#html #css #html-lists #normalization
#HTML #css #html-списки #нормализация
Вопрос:
Недавно заметил, что Chrome и Safari имеют разное расстояние по умолчанию между текстом внутри <li>
и маркером, когда list-style-position
установлено значение inside
:
Вопрос в том, как нормализовать это расстояние до чего-то равного в обоих браузерах, не используя background-image
технику, которая очень уродлива?
Версия Chrome 53.0.2785.143 (64-разрядная), Safari версии 10.0 (11602.1.50.0.10)
PS. Код списка из скриншотов:
ul { list-style-position: inside; margin: 0; padding: 0; }
ul > li { margin: 0; padding: 0; }
Комментарии:
1. С Firefox еще один… зачем вам нужно использовать
inside
?2. Для меня выглядит одинаково во всех браузерах… chrome / safari / Firefox на MAC jsfiddle.net/j0vopgfo
3. @LGSon чтобы установить это
<ul>
на одну строку с формой ввода по вертикали4. @DaniP расстояние отличается в Chrome и safari — take.ms/8IirT
5. Может быть, вы хотите включить версии, я не могу воспроизвести проблему
Ответ №1:
Если вы не найдете решения / причины, по которой Safari плохо себя ведет (или это Chrome), вы можете использовать псевдоэлемент в качестве обходного пути
ul {
list-style-type: none;
margin: 0;
padding: 0;
}
ul li {
margin: 0;
padding: 0;
}
ul li::before {
content: '•';
margin-right: 10px;
}
<ul>
<li>A</li>
<li>B</li>
<li>C</li>
</ul>
Комментарии:
1. Спасибо, это хорошее решение, но я подожду других идей. Может быть, кто-то знает причину этой ошибки.
Ответ №2:
Следуя ответу @LGSon, я бы рекомендовал использовать counter()
функцию CSS с необязательным параметром list-style-type
.
Вы можете использовать disc
значение, но это требует немного большей гибкости. (Смотрите игровую площадку ниже).
ФРАГМЕНТ КОДА:
ul {
list-style-type: none;
margin: 0;
padding: 0;
counter-reset: list-item;
}
ul li {
margin: 0;
padding: 0;
counter-increment: list-item;
}
ul li::before {
content: counter(list-item, disc);
margin-right: 10px;
}
<ul>
<li>A</li>
<li>B</li>
<li>C</li>
</ul>
ИГРОВАЯ ПЛОЩАДКА:
decimal-leading-zero
ul {
list-style-type: none;
margin: 0;
padding: 0;
counter-reset: list-item;
}
ul li {
margin: 0;
padding: 0;
counter-increment: list-item;
}
ul li::before {
content: counter(list-item, decimal-leading-zero);
margin-right: 10px;
}
<ul>
<li>A</li>
<li>B</li>
<li>C</li>
</ul>
lower-roman
ul {
list-style-type: none;
margin: 0;
padding: 0;
counter-reset: list-item;
}
ul li {
margin: 0;
padding: 0;
counter-increment: list-item;
}
ul li::before {
content: counter(list-item, lower-roman);
margin-right: 10px;
}
<ul>
<li>A</li>
<li>B</li>
<li>C</li>
</ul>
Принятые значения:
диск, круг, квадрат, десятичная дробь, десятичный начальный ноль, строчный римский, верхний римский, нижний греческий, нижний латинский, верхний латинский, армянский, грузинский, нижний альфа, верхний альфа
Подробная информация:
Больше информации о counter()
функции CSS здесь.
Комментарии:
1. По словам CanIUse , это будет хорошее и кроссбраузерное (неожиданно для меня) решение. Спасибо!
2. С тех пор существует
counter()
функция CSS2.1
, и она довольно приятная, но это одна из тех вещей, на которые людям нужно оглянуться, чтобы действительно вспомнить, как они используются.3. Когда я увидел это в первый раз, я подумал, что это одна из новых функций CSS3 в одной строке с
calc
и т.д. 🙂4. Вы даже можете сделать это с
counters()
одним;-)
.