Расстояние между элементами в CSS Grid
Как сделать так, чтобы элементы разошлись на всю ширину контейнера без использования grid-column-gap ?
.grid < display: grid; grid-template-columns: 1fr 1fr 1fr; border: 1px solid red; width: 100%; max-width: 200px; >.item
Отслеживать
user262779
задан 30 дек 2018 в 17:56
Danil Lyamkin Danil Lyamkin
75 1 1 серебряный знак 9 9 бронзовых знаков
– user262779
30 дек 2018 в 18:36
grid-template-columns: 1fr 1fr 50px; Вычисление свободного пространства происходит только после применения фиксированных значений
30 дек 2018 в 18:43
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Единица fr позволяет вам настраивать размер треков как часть свободного пространства в контейнере.
.container
Свободное пространство высчитывается после вычисления всех фиксированных элементов. В этом примере, общее количество свободного пространства для единиц fr не будет включать в себя 50px .
.container
Код:
* < box-sizing:border-box; >.grid < display: grid; grid-template-columns: 1fr 1fr 50px; border: 1px solid red; width: 100%; max-width: 200px; >.item
Пример 2 для родителя большей ширины и для большего кол-ва item :
* < box-sizing:border-box; >.grid < display: grid; grid-template-columns: 1fr 1fr 1fr 50px; border: 1px solid red; width: 100%; max-width: 500px; >.item
Источники:
P.S: Если же нужно выравнивание по центру, слева, справа, то можно применить justify-items: center | start | end; . Больше на alligator.io.
+Доп. ссылка на ответ о grid и flex. Смысл в том, что grid можно использовать совместно с flex .
Как задать расстояние между элементами в css
Как сделать одинаковый отступ между элементами, но кроме краев контейнера?
У контейнера может меняться ширина. У элементов фиксированная ширина 75px, margin-left 20px. Как можно сделать, что бы элементы равномерно распределились?
ссылка на мою разметку:

Если делать через flex-wrap и space-between, то у последних элементов margin-left не такой как у всех (2 картинка)

А нужно сделать как на 3 картинке. Т.е margin-left у всех одинаковый
Мне удалось это сделать, но только с помощью js
Можно ли это сделать без помощи js? Или что делать с лишним пространством справа?
Как задать расстояние между пунктами списка?
Пример 1. Использование margin-bottom
- создание пунктуальности (никогда не будете никуда опаздывать);
- излечение от пунктуальности (никогда никуда не будете торопиться);
- изменение восприятия времени и часов.
Результат данного примера показан на рис. 1.

Рис. 1. Расстояние между пунктами списка
Второй способ следующий — для селектора li добавляем свойство line-height, значение в виде дробного числа подбираем самостоятельно. В примере 2 используется значение 1.8.
Пример 2. Использование line-height
- создание пунктуальности (никогда не будете никуда опаздывать);
- излечение от пунктуальности (никогда никуда не будете торопиться);
- изменение восприятия времени и часов.
Этот способ менее универсален, поскольку line-height воздействует на все строки. Вид списка зависит от переносов строк; если переносов нет, то мы получим результат, показанный на рис. 2. Если в тексте имеются переносы, то получим результат как на рис. 3.
Простой способ задать отступы между flexbox элементами
Вариант 1 – отрицательный отступ для родительского блока
Самый простой способ установить минимальное расстояние между элементами flexbox – используем margin: 0 5px для дочерних элементов .item и отрицательный отступ margin: 0 -5px для родительского контейнера .box .
CSS
HTML
See the Pen NWGKWGJ by Denis (@deniscreative) on CodePen.dark
Вариант 2 – без отрицательного отступа с отступами по бокам
Не используем отрицательные отступы и не используем :first-child/:last-child . Задаем внутреннее поле для контейнера padding:5px и задаем отступы для дочерних элементов margin:5px . Таким образом мы получаем равномерный отступ 10px между дочерними элементами и от дочерних элементов до контейнера.
CSS
HTML
Вариант 3 – фиксированная ширина с помощью calc()
Задаем фиксированную ширину для дочерних элементов с учетом отступа между ними с помощью CSS функции calc() . Данный способ не совсем хорош для размещения флексбокс-элементов в несколько рядов, потому что элементы растягиваются по краям контейнера justify-content: space-between .
CSS
где 1/3 – это 3 колонки в ряд, и 10px – это ширина между колонками.
HTML
Вариант 4 – фиксированная ширина с помощью calc() с отступами по бокам
Задаем фиксированную ширину для дочерних элементов с учетом отступа между ними с помощью CSS функции calc() . Но главное отличие от предыдущего варианта, что для дочерних элементов .item заданы отступы по бокам, а для родительского контейнера .box заданы отрицательные отступы как в первом примере. И таким образом, мы можем задать justify-content: flex-start; чтобы flexbox-элементы располагались равномерно слева направо.
Я чаще всего использую этот вариант, как наиболее универсальный и удобный для размещения любых flexbox-элементов.
CSS
где 1/3 – это 3 колонки в ряд, и 10px – это ширина между колонками.
HTML
Естественно, что способов для того, чтобы задать отступы между флексбокс-элементами или для их равномерного размещения внутри контейнера, гораздо больше, и есть гораздо более изощренные варианты. Но я привел наиболее часто используемые способы и самые простые для понимания.
«Загадочные отступы» между инлайн-элементами
Каждому, даже самому «молодому» верстальщику известны неприятности (проблемы) с интервалом между элементами, пробелами, которые вставляются между словами. Эти пробелы часто мешают нам при вёрстке того или иного блока. Избавиться от них бывает не так-то просто, а зачастую эти межсловные расстояния и вовсе ставят нас перед выбором, выбором способа решения данной проблемы.
В этой статье мы попытаемся понять, что же из себя представляют эти загадочные «Отступы», что это за звери и с чем их едят. Так же рассмотрим, что такое inline-block, и почему после себя он ставит эти непонятные интервалы. Ну, и, самое главное, мы увидим несколько универсальных решений данного вопроса и ,конечно же, обсудим все их стороны.
Для начала мне хотелось бы пояснить, что же такое inline-block и почему все решения мы будем обсуждать именно с этим значением.
inline-block
Значит, inline-block — представляет собой этакую «коробочку», в которой содержатся буковки, т.е. некий коробок со спичками. Этот коробок представляет из себя блок, с поведением строки, т.е. по сути является строчно-блочным элементом.
Строчное поведение inline-block позволяет ему оставаться в одной строке с другими строчными элементами, например span>-ом или попусту сливаться с обычными буквами, т.е. вести себя, как текст в строке. Ну а благодаря своим блочным способностям, inline-block-у можно смело задавать любые свойства, которые присущи блочным элементам: ширину, высоту, верхний и нижний margin, например, уже будет действовать, как у блоков.
Ну и т.д., в общем, эдакий «блок-строка»

Как видно из примера, inline-block чувствует высоту и ширину, которую мы ему прописали. Так же можно заметить одну интересную штуку, наш подопечный выровнялся по вертикали, выровнялся так, как и должны выравниваться большинство инлайн-элементов в html, т.е. по базовой линии (baseline) , т.е. выравнивается наш блок относительно своего текста, который в нём находится. Добавляем текста в блок и смотрим результат.

Блок выровнялся по базовой линии. Чего и следовало ожидать.
Сразу же приведу несколько разных примеров, поведения inline-block с разным вертикальным выравниванием.
Тут я продемонстрировал три разных выравнивания, но на самом деле их намного больше, если интересно, то вот здесь описаны все возможные варианты. В данной статье нет смысла всех их описывать. Просто учитывайте это, при работе с inline-block.
inline-block — как буква
Одна из главных вещей, которые вы должны знать, это то, что наш коробок со спичками inline-block — является по сути обычной буквой — символом, т.е. весь наш строчный блок составляет всего лишь одну букву в строке, одну единицу. Даже не смотря на то, что содержит в себе кучу других символов или элементов. Именно по этой причине inline-block не «разрываются», как строчные элементы, а переносятся на следующую строку целиком. Ну и соответственно, если рядом с inline-block не будет пробелов, то расстояние между ним и соседними буквами будет обычный межбуквенный интервал (трекинг), которым можно управлять (кернинг). Если есть пробелы — до соседней буквы будет этот же интервал плюс ширина пробела.
Переваривайте эту информацию и идёмте дальше…
Почему в статье я использую именно inline-block?
На самом деле «Проблема» пробелов для inline-block и обычных инлайн элементов — является общей. Т.е. и с теми и с другими происходят идентичные вещи. Ненавистные отступы, появляются у тех и у других. Просто дело в том, что:
Во-первых, inline-block имеет больше возможностей, таких например, как задание ширины или высоты и т.д.
Во-вторых, мне всё-таки хотелось немного объяснить вам, что такое inline-block и что они из себя представляют, всё-же они относятся к строкам, как-никак.
Ну и в-третьих это то, что с inline-block связаны определённые проблемы в браузере Safari, о которых мне бы хотелось, чтобы вы знали.
Так что я думаю, что знакомство с этим поведением строчно-блочного элемента будет для вас полезным делом и, безусловно, расширит ваш кругозор.
Загадочные отступы
Познакомившись поближе со строчно-блочным элементом, мы можем смело двигаться дальше, к демонстрации и ответам на вопрос: «Откуда берутся отступы после инлайн элементов?». Для того, чтобы понять, о чём идёт речь, приведу код и скриншот с проблемой.
В итоге мы видим ту самую «неприятность», из-за которой мы все тут и собрались.

На картинке отчётливо видны пробелы между пунктами меню. Откуда же они берутся? Причина кроется в том, что, как мы уже выяснили, inline-block ведет себя, как обычная буква, а значит так же, как и простой текст — имеет пробелы между словами. Эти пробелы можно отчётливо наблюдать в разных веб-инспекторах, например таких как «IE WebDeveloper» для Internet Explorer.

Как мы видим, браузер создаёт пустой текстовый узел, который, по сути, может являться переводом строки, пробелом или, например, табом. Все и эти перечисленные вещи превращаются в один единственный пробел и описывается следующей сущностью: . Так же следует учитывать, что, так как пробел — это обычный символ, то, соответственно, и изменяться этот самый символ будет в зависимости от размера или семейства шрифта, т.е, по сути, вести себя точно также, как и обычная буква в строке. Всё это обязательно следует учитывать при вёрстке.
Наша задача
Перед нами стоит задача каким-то образом избавиться от этого ненавистного расстояния. Убрать, сделать его ширину нулевой, сплющить, спрятать, всё что угодно… в общем придумать какой нибудь способ, который избавит нас от этого межсловного промежутка и соединит наши пункты вплотную.
Материал для работы
Давайте поразмыслим, что же нам сможет помочь для решения этой задачи.
1. margin-left (отрицательный) — свойство, с помощью которого можно сдвинуть пункты влево, как бы друг на друга, «избавившись» так сказать от ненавистного пробела между них.
2. font-size — свойство, задающее размер шрифта, с помощью которого нашему пробелу (символу) можно выставить размер шрифта, равный нулю, и тем самым сделать его настолько маленьким, что его попусту не будет видно.
3. letter-spacing — свойство, определяющее интервал между символами. По умолчанию (normal) задаёт обычный интервал, исходя из размера и типа шрифта.
4. word-spacing — свойство, определяющее интервал между словами. По умолчанию так же, как и letter-spacing , задаёт его в зависимости от размера и типа шрифта.
5. Прижать элементы друг к другу, т.е. вплотную, тег к тегу, и таким образом убрать межссловный интервал.
6. Поставить комментарии между элементами, тем самым убрав между ними отступы.
7. Самое, на мой взгляд, интересное решение из всех… оставлю его пожалуй на закуску… интрига…
Плюс ко всему сделаем тестовый элемент
, который будет нашей вспомогательной линейкой. Ширина наших пунктов в сумме составляет 510px. Это боковые границы + их ширина + кол-во самих пунктов ((1+100+1)*5) = 510.
Вроде ничего не забыли, поэтому переходим к рассмотрению всех вышеперечисленных вариантов.
Вариант 1 — margin-left
Первым у нас на очереди выступает левый отрицательный margin. Посмотрим, как он сможет помочь нам. Код CSS для наглядности:
Из кода видно, что для общего списка я выставил шрифт Verdana и размер шрифта в 14px (в наших примерах будет отталкиваться от этих значений). Ну и ,конечно же, левый отрицательный margin, равный -.36em. Как вы могли заметить, для нашей цели я выбрал именно масштабируемую единицу длины (em), потому что, как мы уже знаем, наш пробел пляшет от размера шрифта, а значит, может масштабироваться в зависимости от него. Долго повозившись со значениями, я определил, что -.36em) подходит для нашего шрифта лучше всего (для иного придётся подбирать другие значения), так что оставим, пожалуй, именно этот масштаб. Посмотрим на результат:

Как мы можем наблюдать из скриншота, наши пункты уехали за левую границу, что в принципе и очевидно, ведь мы же по сути подвинули все пункты влево, а значит, и первый пункт также уехал в левую сторону. Для решения этого «недоразумения», мы можем обнулить margin-left именно у первого пункта меню, добавив в наш код следующую запись ul li:first-child .
*Стоит заметить, что для IE6-7 мы вообще обнулили margin-left, а почему… мы узнаем чуть позже.
А между делом смотрим результат:

Да, действительно, на данный момент во всех браузерах всё здорово и смотрится одинаково. Хм… неужели мы добились своей цели? Давайте проверим это, сделав размер шрифта, к примеру, в два раза больше.

Как можно видеть, мы достигли своей цели, но это до тех пор, пока мы не поменяли шрифт, например, на Arial (предварительно подогнав под него левый, отрицательный margin)


Выставив фон нашему списку, мы можем заметить, что теперь результаты немного разнятся в браузерах Chrome, Opera 11.53, IE6-8 и Firefox 8, IE 9. В первых всё осталось на своих местах, а вот в последних можно заметить небольшой отступ справа, что говорит о том, что всё-таки есть риск получить немного не ту картину, которую мы задумывали изначально. Как вариант, конечно же, можно подогнать спец. значения для Firefox 8 и IE 9 отдельно, но, опять же, это не очень хорошее решение, так как во-первых, это по сути костыль, а во-вторых, не даёт полной универсальности, ведь никогда не знаешь, при каких размерах и как, поведут себя остальные браузеры.
В общем, я, лично, сделал вывод, что это вполне себе нормальный и жизнеспособный вариант, в фиксированной ситуации можно подогнать размеры и будет всё в порядке. Ряд минусов конечно же тоже есть, в виде обнуления margin-left у первого пункта + подгонка значений для разных браузеров, ну и… конечно же есть доля риска, из-за которой могут быть, хоть и не большие, но какие-то отличия с отступами, при разных шрифтах и их размерах.
Вариант 2 — font-size
Как вы уже знаете, font-size влияет на размер шрифта элемента, делая его больше или меньше, в зависимости от своего значения. Пробел — это символ, который исходит от этого самого размера шрифта, а значит, с помощью font-size мы можем попробовать воздействовать на него, например, выставив его значение в ноль и тем самым, возможно полностью «скрыть» наш ненавистный пробел. Давайте проверим это на деле.

Что произошло с символами? Куда они все пропали? На самом деле всё просто. font-size наследуемое свойство, а значит, выставив родителю (в нашем случае UL) какое либо значение, отличное от значения по умолчанию, мы должны возвратить font-size в прежнее состояние, у потомков (в нашем случае у LI).

Отлично! Теперь всё работает! Но везде ли? Проверяем… упс… к сожалению почти…


Как видно из скриншотов, Safari подвёл нас, напрочь отказавшись обнулять наш межсловный символ :(. Почему же так произошло? Не найдя ответа на этот вопрос, я рискнул предположить, что всё-таки это ни что иное, как самый настоящий баг браузера Safari и поэтому, нам нужно, либо искать вменяемое лекарство от этого бага, либо отказываться от этого способа, полностью. Исключать этот способ из списка не очень хочется, потому что, во-первых, этот вариант не работает лишь в Safari, а во-вторых, моя интуиция мне подсказывала, что решение всё же имеется. В итоге спортивный интерес взял вверх и решение всё таки нашлось! Да, и при чём оно оказалось для меня приятной неожиданностью. Ответ кроется в свойстве display: table , которое вешается на контейнер с пунктами (в нашем случае UL). Проверим.
А вот и скриншот из Safari:

Супер! Сработало! Но как же это так? Возможно, при display:table движок воспринимает строку блоков внутри как «что-то вроде table-cell» , т.е. ячеек таблицы, в каких-то FF до 3.6, если я ничего не путаю, был похожий баг.
Чем это может нам грозить?
Есть пару мелких недостатков, о которых следовало бы знать.
1. Во всех браузерах, кроме Firefox, точкой отсчёта позиционированных элементов являются ближайший предок с relative, т.е. это может быть та же ячейка (TD). Но у нас тут не TD, а LI, так что в этом плане проблем у нас точно не будет. Но проблемы будут, если мы захотим позиционировать сами LI, внутри UL, а так как UL у нас — это, по сути, таблица, то Firefox откажется позиционировать пункты относительно её. Но тут не стоит беспокоиться, так как в этом случае на помощь к нам придёт обычная обёртка (например div) для элемента UL.
2. Второй нюанс — ширина. display:table по умолчанию не растягивается на доступное пространство, так что может понадобиться еще выставление ширины контейнеру (а при наличии бордеров/паддингов — box-sizing: border-box c нужными префиксами вдобавок).
Это что касалось самого display:table , а что же сам font-size ? У него есть минусы? Да, есть, пожалуй, один неприятный недостаток. Из-за нулевого значения font-size у родителя, мы не можем применять масштабируемые единицы длины к потомкам, т.к. они отталкиваются от наследуемого размера шрифта и соответственно от нуля в нашем случае. Ну и плюс ко всему, это то, что всегда надо быть начеку и смотреть, чтобы у потомков был переназначен размер шрифта.
Ну а так в целом способ, вполне себе рабочий, если не считать нюансы. Так что смотрим пример в действии и идём дальше.
Решение с font-size
Вариант 3 — letter-spacing
Третьим номером у нас идёт letter-spacing . Чуть ранее мы выяснили, что это свойство влияет на интервал между символами, а так как наш inline-block по сути и есть один, большой символ, то letter-spacing всё таки должен помочь в решении нашей задачи. Как и в прошлый раз, я повозился с масштабом и выяснил, что -.36em будет как раз то, что нужно для Verdana.
* Да, и ещё стоит учесть, что letter-spacing , как и font-size , наследуемое свойство, поэтому нам придётся проделывать ту же операцию с обнулением потомков, что и во втором варианте.

Отлично, сами пункты вроде бы состыковались так, как нам нужно. «Вроде бы» — я сказал не случайно, а почему, вы поймёте из следующих скриншотов.


Во всех браузерах, кроме Opera, мы можем наблюдать вполне себе отличную картину, но вот в самой Opera к сожалению всё наоборот. Как оказалось, Норвежцы считают, что letter-spacing может влиять на всё, кроме пробела. Видимо из-за того, что символ пробела означает конец слова, а значит и letter-spacing заканчивает на этом свою работу, так как предназначен для сдвижки/раздвижки букв, именно внутри слова (в т.ч. для кернинга вручную). И тут не имеет значения, что inline-block тоже по сути буква, после неё есть пробел, а значит в любом случае, слово по факту, закончилось.
Считать ли это багом Opera? Ну не знаю, ситуация двоякая, и те и другие по своему правы, так что предлагаю оставить это на совести самой Opera, а самим отправиться на поиски решения этой проблемы.
В общем, повозившись довольно таки приличное время в поисках лекарства для этого случая, я не смог придти ни к чему путному, кроме как воспользоваться предыдущим решением с font-size и добавить его в наши стили.
Да, вот теперь всё отлично, font-size действительно смог нам помочь. Из этого я сделал вывод, что по сути можно пользоваться обоими вариантами в равной степени: font-size + display-table или letter-spacing + font-size. Т.е. как в первом, так и во втором случае нам требуются вспомогательные инструменты в виде дополнительных свойств.
Upd: Кстати, пока писал статью, обнаружил странный баг в Safari. Когда выставляешь родителю связку font-size : 0 и letter-spacing в любое значение em, например letter-spacing : -.36em , то в Safari всё сразу же рушится((. Причину этого странного поведения Safari мне так и не удалось выявить. Буду рад услышать ответ на этот вопрос в комментариях. Решением с моей стороны является выставление значений letter-spacing , например в пиксели.
Вариант 4 — word-spacing
Сразу же хочется отметить, что word-spacing и letter-spacing похожи друг на друга и отличаются только лишь тем, что первый работает с расстоянием между символами, а второй — между словами. При этом word-spacing так же имеет свои недостатки, но в отличие от letter-spacing , с недостатками word-spacing можно бороться, что не может не радовать.
* Также стоит отметить, что word-spacing тоже наследуемое свойство, поэтому в целом код будет напоминать код с letter-spacing . Так что подбираем значение и в путь.
По коду вроде всё уже ясно, переходим к скриншотам:


Ну и конечно же снова не обошлось без происшествий. Но теперь уже оба webkit-a (Chrome и Safari) показали нам свои недостатки. Как мы можем наблюдать, word-spacing в этих браузерах вообще не сработал, как будто бы мы его и не назначали. Поведение webkit-ов в данной ситуации, скорее всего, можно назвать багом, так как свойство, которое мы тут применяли, предназначено именно для межсловных расстояний. Доказательством в пользу бага служит то, что для обычных inline элементов word-spacing как раз таки работает в webkit так, как и должен, а вот для inline-block -ов к сожалению нет.
Первый вопрос, который вы зададите, будет: «А есть ли решение у данной проблемы?». С радостью отвечу вам, что ДА! И, как, ни странно, этим решением является снова наш старый, добрый display:table , который помог нам при проблемах в Safari, во втором варианте с font-size . Так что смело добавляем это правило и смотрим результат.

Да, вы не ошиблись. display: table действительно помог нам решить баг webkit-ов. Недостатки этого лечения, собственно точно такие же, как я приводил во-втором варианте, т.е. это позиционирование и задания ширины в контейнере. В остальном этот способ я лично считаю более уместным, чем все предыдущие предшественники, так как, во-первых, мы всё таки решаем проблемы с межсловным расстоянием (word-spacing как раз и создан для этого), во-вторых, решение для проблемы webkit-ов вполне безобидное, если не считать пару нюансов, ну и в-третьих, я, тестировал этот метод с разными размерами шрифта и даже тут ничего страшного не заметил.
Так что привожу работающий пример, смотрим и идём далее…
Результат с word-spacing
Вариант 5, 6 — Соединение элементов
Эти два решения, я решил объединить в одно целое, так как они схожи по своей сути и делают почти одно и то же, т.е. состыковывают элементы, убирая между ними пробелы.
HTML первого варианта:
Ну и второго соответственно:
А CSS для обоих вариантов будет таким:
Ну и конечно же, скриншоты:

Как видно из кода, в первом варианте мы просто пристыковали элементы вплотную, перенеся закрывающие теги вплотную к открывающим. А во втором — поместили между границами элементов комментарии, заменяя ими наши пробелы. Т.е. фактически мы намеренно лишили элементы каких либо отступов между ними, специально соединив их разными способами. При этом, как можно заменить, у этих вариантов есть хороший плюс, для них не требуются никакие спец. свойства и костыли в CSS, они работают сами по себе, при чём во всех браузерах, начиная с IE6+.
Но между тем эти решения несут в себе ряд неких проблем, которые связаны, во-первых, с удобочитаемостью кода, во-вторых, со случайным сбросом одного элемента под другой или убиранием одного комментария возле пункта, что сразу же повлияет на отображения вашего сайта, далеко не в лучшую сторону. Например, ваш сайт, может попросту развалиться или какой-нибудь пункт перескочит на другую строку и т.д.
В общем, можно сделать вывод, что эти варианты, однозначно имеют право на жизнь, но пользоваться ими можно только тогда, когда ты точно знаешь и уверен в том, что делаешь.
Так что пока смотрим рабочий пример и плавно переходим к завершающему методу, самому практичному и интересному, на мой взгляд…
Результат
Вариант 7
Как оказалось, на свете есть ещё более простое, а главное, абсолютно законное решение, которым я хочу поделиться. Дело в том, что любая спецификация HTML (но не XHTML), позволяет нам опускать закрывающие теги у некоторых элементов, т.е. разрешает их отсутствие. В спецификации HTML5 таких элементов целых 18 штук. Это означает, что мы, на вполне законных основаниях, можем пользоваться этим преимуществом. Ведь никто не запрещает нам это сделать, не правда ли?)
В нашем случае элементы li> попадают в этот список, так что воспользуемся этим.

Т.е. по сути, я просто опустил закрывающие теги /li>, и раз после содержимого первого элемента сразу же идёт открывающий тег второго, то соответственно и интервала между ними быть не должно. Что наглядно демонстрируется на скриншоте.
*Стоит заметить, что в IE6-7, например, опциональные закрывающие теги в списках всё равно игнорируются, поэтому там этот метод получается «автоматом». Именно из-за этого в первом варианте c отрицательным левым margin-ом, мы, отдельно, обнуляли margin-left для этих браузеров.
Этот способ мне кажется наиболее удачным, одновременно лёгким и удобным, чем все остальные, которые мы рассматривали в этой статье. Недостатком лишь стоит назвать то, что такую структуру не воспринимают любые XML-парсеры.
Вывод такой, что этот метод не подходит «фанатикам валидности ради валидности», выбирающим XHTML-доктайп, но практикам, ориентирующимся на современные спецификации и реальный результат, отказываться от такого решения незачем =)
Результат
Резюме:
Подводя итоги, хочу сказать, что в данной статье мы выяснили, что за странные отступы браузер вставляет между инлайн-элементами, а так же рассмотрели много разных решений этой проблемы, и в итоге всё таки выяснили, что они не так страшны, как кажутся на первый взгляд. Как оказалось, с этой проблемой можно бороться (причём не одним способом) и побеждать её.
Все варианты воедино:
1. Результат с margin-left (Почти рабочее решение)
2. Решение с font-size (Рабочее решение)
3. Результат с letter-spacing (Работающее решение)
4. Результат с word-spacing (Рабочее решение)
5. Вариант с намеренно прижатыми элементами (Рабочее решение)
6. Решение с незакрытыми тегами (Рабочее решение)
Похожие публикации:
- Как подключить ttf шрифт в css
- Как подключить наушники mi true wireless earbuds basic к телефону через блютуз
- Как подключить шрифт к сайту css
- Как позиционировать изображение в css
Как правильно задать расстояние между элементами списка с помощью CSS
Веб-разработчики часто сталкиваются с необходимостью создания списка на своих веб-страницах. Однако, задание оптимального расстояния между элементами списка может быть вызовом для многих. Неправильный отступ между элементами может привести к затруднению в чтении или дизайну веб-страницы, что может отразиться на пользовательском опыте.
Следует отметить, что задание отступов для элементов списка с помощью CSS является достаточно простым процессом, который может улучшить читаемость ваших веб-страниц и снизить утомляемость глаз пользователей.
В этой статье мы рассмотрим несколько основных способов задания отступов между элементами списка с помощью CSS. Мы расскажем о нескольких методах, которые могут помочь вам создать практичный и эстетически приятный список.
Основные принципы создания списка
-
) и маркированным (созданным с помощью тега
).
-
и
. Для маркированного списка номера не используются, вместо этого используются символы-маркеры.
Помимо основных типов списков, существует также и комбинированный список (созданный с помощью тега ), где каждый элемент представляет пару термин-определение.
Для придания спискам определенного стиля и визуальной привлекательности, в CSS существует большое количество свойств, которые можно применять к спискам, такие как задание расстояния между элементами списка или изменение вида маркеров.
Правильное создание и стилизация списка является важной частью верстки веб-страницы, которая существенно влияет на ее удобочитаемость и визуальное восприятие.
Основные свойства CSS для списка
Списки являются одним из основных элементов в веб-разработке и могут быть использованы для представления информации в удобном для пользователей формате. Чтобы создать список, разработчики обычно используют теги
-
. В этом контексте важно знать основные свойства CSS для списка, которые позволяют изменять его внешний вид.
Свойства padding и margin: Эти свойства позволяют задавать отступы вокруг элемента списка. При использовании свойства padding расстояние между границей элемента списка и его содержимым будут отбиты от границы. Свойство margin позволяет изменять расстояние между элементами списка.
Свойство list-style: Данное свойство позволяет изменять внешний вид маркеров списка, такие каккруг и квадрат, а также заменять маркер текстом.
Свойства float и display: С помощью этих свойств можно изменить расположение элементов списка. Если задать свойство float со значением left или right, то элемент будет выровнен по левому или правому краю. С помощью свойства display можно изменить тип отображения элементов списка.
Свойства text-align и text-indent: Свойство text-align позволяет изменить выравнивание текста в элементе списка. Значение left выравнивает текст по левому краю, а значение right — по правому. Свойство text-indent позволяет задать отступ первой строки, что полезно для создания вложенных списков.
Свойство font-size: Позволяет изменять размер шрифта в элементах списка, что может улучшить его читаемость и визуальное восприятие.
Используя вышеперечисленные свойства CSS, разработчики могут легко изменить внешний вид элементов списка и сделать его более удобным для пользователей.
Способы создания отступов между элементами списка
Вертикальные отступы между элементами списка могут быть заданы несколькими способами в CSS. Один из наиболее распространенных способов — использование свойства margin для элемента списка. Это позволяет задать отступы отступы сверху и снизу элемента, а также слева и справа.
Другим способом является использование свойства padding для родительского элемента, содержащего список. Это создаст отступы вокруг каждого элемента списка и поможет выровнять их по горизонтали и вертикали.
Третий способ заключается в использовании CSS псевдоэлемента ::before или ::after, который добавляет пустой блок перед или после каждого элемента списка. Это может быть полезно, если нужно добавить дополнительное пространство или разделитель между элементами.
Также можно использовать таблицы для создания списка, где каждый элемент списка представлен в отдельной строке таблицы. Это позволяет более гибко управлять отступами при помощи CSS свойств таблицы и ячеек. Однако этот метод может замедлить загрузку страницы, так как таблицы требуют большего количества кода и ресурсов.
Независимо от выбранного способа, важно следить за качеством и эффективностью кода, чтобы создать читабельную и производительную веб-страницу.
Создание отступов без margin
Отступы могут быть полезны для разделения контента на странице и придания ему визуальной структуры. Когда дело доходит до создания отступов, многие разработчики обращаются к свойству margin.
Однако, использование margin может привести к нежелательным результатам, таким как наложение элементов друг на друга или изменение макета страницы. К тому же, margin может возникнуть неожиданными проблемами при верстке сайтов под разные экраны и устройства.
Вместо использования margin, можно создавать отступы с помощью свойства padding. Подобно margin, padding определяет расстояние между элементами, однако, это свойство задает отступ внутри элемента, а не между элементами.
Это означает, что при использовании padding, размер элементов на странице останется неизменным, а отступ будет добавлен внутри элемента, тем самым оставляя достаточно места для расположения других элементов на странице. Такой подход является более безопасным и предсказуемым для восприятия макета страницы.
Как и при использовании margin, значение свойства padding можно задавать в пикселях, процентах или em. Например:
- padding: 10px;
- padding: 5%;
- padding: 1em;
Помните, что каждый элемент на странице имеет внутренний отступ (padding) по умолчанию, который может быть изменен с помощью свойства padding. Также не забывайте, что использование padding может привести к увеличению размера элемента, что может повлиять на расположение на странице.
Все варианты стилей для внутренних отступов и междустрочных интервалов можно найти в спецификации CSS, а также решить задачи и более глубоко изучать CSS можно на специализации HTML, CSS, и JavaScript на Coursera.
Использование padding для задания отступов
Один из самых распространенных способов задания отступов между элементами списка с помощью CSS является использование свойства padding. Это свойство позволяет задавать внутренние отступы элемента и, таким образом, увеличивать пространство между содержимым элемента и его краями.
Для того чтобы задать внутренние отступы элемента списка, необходимо использовать CSS-свойство padding и указать значение в пикселях или процентах. Например:
- padding: 10px; — задает внутренние отступы в 10 пикселей для всех сторон элемента
- padding: 5px 10px; — задает внутренние отступы в 5 пикселей сверху и снизу и в 10 пикселей слева и справа
- padding: 0 20px 15px; — задает внутренние отступы в 0 пикселей сверху, в 20 пикселей слева и справа и в 15 пикселей снизу
При использовании свойства padding для задания отступов между элементами списка необходимо учитывать, что отступы будут применяться к каждому элементу списка. Если вы хотите задать разные отступы для разных элементов списка, то необходимо каждому элементу задавать отдельные стили, либо использовать другие способы задания отступов, например, свойство margin.
Использование border для задания отступов в списке HTML
Веб-сайты, созданные с помощью языка HTML, содержат списки элементов, которые могут быть выровнены и расположены на странице с помощью CSS. Один из способов задать отступы между элементами списка — использовать свойство border в CSS.
Для настройки расстояния между элементами списка с помощью border, сначала необходимо определить стиль границы. Каждая граница имеет толщину, цвет и стиль, и эти свойства могут быть настроены через CSS. После определения стиля границы, можно использовать значение желаемого отступа между элементами списка, чтобы настроить свойство margin для каждого элемента списка.
Другой способ использования border для задания отступов состоит в том, чтобы настроить свойство padding для каждого элемента списка. Значение padding определяет расстояние от текста до границы элемента, и может использоваться для создания отступов между элементами списка, если задать значение padding для каждого элемента.
В любом случае, при настройке отступов между элементами списка с использованием border, необходимо тщательно подбирать значения свойств так, чтобы создать желаемое расстояние между элементами и добиться оптимального внешнего вида списка на веб-странице.
Как задать отступы для первого и последнего элемента списка
Для того чтобы задать отступы для первого и последнего элемента списка, используйте псевдоклассы :first-child и :last-child.
Например, вы можете задать отступы для первого элемента нумерованного списка следующим образом:
В этом примере мы задали отступ сверху для первого элемента списка в размере 20 пикселей.
Аналогично вы можете задать отступы для последнего элемента списка:
В этом случае мы задали отступ снизу для последнего элемента списка в размере 20 пикселей.
Кроме того, для того чтобы задать отступы как для первого, так и для последнего элемента списка, можно использовать комбинацию псевдоклассов :first-child и :last-child:
В этом примере мы задали отступ сверху и снизу для первого и последнего элемента списка в размере 20 пикселей.
Как правильно задать отличное расстояние между элементами в списке?
Если вы создаете список элементов, то столкнулись со следующей проблемой – как установить нужное расстояние между ними? На самом деле, все просто – есть несколько способов решения этой задачи. Но важно понимать, что каждый из них зависит от содержимого и стиля вашего списка.
1. Использование margin:
Один из наиболее распространенных способов задания расстояния – использование CSS свойства margin. Вы можете добавить нужный вам отступ (в пикселях или процентах) между элементами, применив эту настройку через класс CSS к элементу списка. Но нужно помнить, что при этом каждый элемент будет иметь одинаковое расстояние, даже если его содержимое отличается по объему.
2. Использование padding:
Если вы хотите установить одинаковый отступ, но не только между элементами, но и внутри каждого элемента, вы можете использовать свойство padding. Оно позволяет установить отступы по краям элемента, что дает возможность регулировать интервал между ними в сочетании с margin.
3. Изменение размеров между элементами:
Некоторые элементы могут содержать большой объем текста, в то время как другие достаточно короткие. В этом случае, изменение размера между элементами списка будет лучшим способом задания расстояния. Это может быть выполнено путём изменения высоты элемента или расстояния между строками, но при этом надо учесть, что это может изменить внешний вид списка в целом.
4. Использование таблиц:
Наконец, для списка, состоящего из множества мелких элементов, вы можете использовать таблицы. В них можно легко установить размеры и отступы для каждого элемента. Но нужно учитывать, что таблица может сильно увеличить размер документа, что может быть нежелательным.
Следуя любому из этих методов, вы сможете задать нужное расстояние между элементами списка в зависимости от их содержания и внешнего вида.
Задание различных стилей для активного и неактивного состояний списка
Один из способов выделения активного пункта списка — это изменение его стиля. Это может быть, например, изменение цвета фона или текста, изменение размера шрифта или добавление границы. С помощью CSS можно задать различные стили для активного и неактивного состояний списка.
Для начала, нужно присвоить классы элементам списка, которые будут выделяться как активные. Это можно сделать, например, с помощью псевдокласса «:hover». Когда мы наводим курсор на элемент списка, он получит определенный стиль. Для выделения активного элемента списка нужно задействовать псевдокласс «:active». Этот псевдокласс применяется к элементу, который был активирован в данный момент, например, когда на него нажали мышью.
Для того чтобы задать стили для активного и неактивного состояний элементов списка, можно использовать следующий CSS-код:
li < font-size: 16px; padding: 10px; border: 1px solid #ccc; >li:hover < background-color: #f2f2f2; >li:active
В этом примере у элементов списка заданы общие стили, такие как размер шрифта и отступы. Когда мы наводим курсор на элемент списка, задается цвет фона, отличный от остальных элементов. Активный элемент списка будет выделяться еще ярче — у него будет другой цвет фона.
Это всего лишь пример того, как можно выделить активный элемент списка. Для каждого сайта и дизайна может потребоваться свой подход и свои стили. Но важно помнить, что выделение активного элемента списка позволяет повысить удобство использования и улучшить визуальный метод передачи информации.
Настройка отступов для вложенных списков
В CSS можно задавать отступы для каждого элемента списка по отдельности, а также для вложенных списков. Для этого используются свойства margin и padding.
Свойство margin задает отступы вокруг элемента списка, а свойство padding — внутри него. Для вложенных списков нужно задавать отступы только для внешнего списка, так как внутренние списки будут наследовать значения от своих родительских элементов.
Чтобы задать отступы только для внешнего списка, нужно использовать псевдоэлемент :first-child для первого элемента списка. Например:
ul < margin: 0; >ul > li < margin: 0; padding: 10px 0 0 20px; >ul > li:first-child
В данном примере отступы задаются в пикселях, но также можно использовать проценты или em.
Также для вложенных списков можно использовать относительные единицы измерения, чтобы отступы адаптировались под разные размеры экрана. Например:
ul < margin: 0; >ul > li < margin: 0; padding: 1em 0 0 2em; >ul > li:first-child < padding-top: 0; >ul ul > li
В данном примере отступы задаются в em, что позволяет автоматически адаптироваться под размер шрифта.
Практические примеры задания отступов между элементами списка
1. Использование margin и padding
Для того чтобы задать отступы между элементами списка, можно использовать свойства margin и padding. С помощью margin можно задать внешние отступы элемента, а с помощью padding — внутренние.
-
, можно использовать следующий CSS-код:
ul li
Этот код задаст отступы сверху и снизу каждому элементу списка, а также установит отступы слева и справа внутри элемента.
2. Использование свойства line-height
Для задания отступов между элементами списка можно также использовать свойство line-height, которое задает высоту строки.
Например, чтобы задать отступы между элементами списка в виде пустой строки, можно использовать следующий CSS-код:
ul li
Этот код задаст отступы между элементами списка в виде пустой строки, выставляя высоту строки в два раза больше, чем размер шрифта.
3. Использование таблицы
В этом примере задана таблица с одной строкой и одной ячейкой, которая содержит список. Для задания отступов между элементами списка можно использовать стандартные CSS-свойства таблицы, такие как padding и border-spacing.
Вопрос-ответ:
Как задать расстояние между элементами списка только на определенных страницах сайта?
Для этого можно использовать классы, которые добавляются только на нужных страницах и в CSS файле задать для этого класса нужное расстояние между элементами списка.
Как изменить расстояние только между первым и вторым элементом списка?
Для этого можно использовать псевдокласс :first-child в CSS и задать нужное расстояние между первым и вторым элементом списка.
Как задать разное расстояние между элементами, если список содержит элементы разных типов?
Для каждого типа элементов можно использовать отдельные классы и в CSS файле для каждого класса задать нужное расстояние между элементами.
Как задать расстояние между элементами списка, если они расположены горизонтально?
Для этого можно использовать свойство display: inline-block в CSS и задать нужное расстояние между элементами списка.
Как задать расстояние между элементами списка, если они имеют разную высоту?
Для этого можно задать минимальную высоту элементов списка и в CSS файле задать нужное расстояние между элементами.
Как задать расстояние между пунктами списка?

Второй способ следующий — для селектора li добавляем свойство line-height, значение в виде дробного числа подбираем самостоятельно. В примере 2 используется значение 1.8.
Пример 2. Использование line-height
- создание пунктуальности (никогда не будете никуда опаздывать);
- излечение от пунктуальности (никогда никуда не будете торопиться);
- изменение восприятия времени и часов.
Этот способ менее универсален, поскольку line-height воздействует на все строки. Вид списка зависит от переносов строк; если переносов нет, то мы получим результат, показанный на рис. 2. Если в тексте имеются переносы, то получим результат как на рис. 3.

Рис. 2. Межстрочное расстояние

Рис. 3. Межстрочное расстояние при переносе строк
См. также
- line-height
- line-height в CSS
- margin-bottom
- Атрибут bottommargin
