Нормализация расстояния между внутренним текстом и маркером

#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>  


Принятые значения:

MDN

диск, круг, квадрат, десятичная дробь, десятичный начальный ноль, строчный римский, верхний римский, нижний греческий, нижний латинский, верхний латинский, армянский, грузинский, нижний альфа, верхний альфа


Подробная информация:

Больше информации о counter() функции CSS здесь.

Комментарии:

1. По словам CanIUse , это будет хорошее и кроссбраузерное (неожиданно для меня) решение. Спасибо!

2. С тех пор существует counter() функция CSS 2.1 , и она довольно приятная, но это одна из тех вещей, на которые людям нужно оглянуться, чтобы действительно вспомнить, как они используются.

3. Когда я увидел это в первый раз, я подумал, что это одна из новых функций CSS3 в одной строке с calc и т.д. 🙂

4. Вы даже можете сделать это с counters() одним ;-) .