Стили для списков начинаются с приставки list-style-. К ним относятся: list-style-type, list-style-position, list-style-image и объединенное свойство list-style. Рассмотрим их последовательно.
Стили маркеров (цифр). Свойство list-style-type
И для маркированных, и для нумерованных списков внешний вид маркеров или цифр определяет свойство list-style-type. Оно имеет следующие значения:
Для маркированных списков:
- disc - темная точка (значение по умолчанию)
- circle - кружок
- square - в виде темного квадрата
Для нумерованных списков:
- desimal - 1, 2, 3 ... - арабские цифры (значение по умолчанию);
- decimal-leading-zero - 01, 01, 03 - арабские цифры с ведущим нулем в первой десятке;
- lower-alpha, lower-latin - строчные (маленькие) латинские буквы.
- upper-alpha, upper-latin - прописные (большие) латинские буквы;
- lower-roman - строчные римские цифры;
- upper-roman - прописные римские цифры;
- lower-greek - строчные греческие буквы;
- upper-greek - прописные греческие буквы;
- armenian - армянская нумерация;
- georgian - грузинская нумерация.
Посмотреть на варианты отображения различных маркеров можно ниже. Хотя в примере и используется список ol, но маркеры с помощью кнопок могут назначаться, как и для ul. В реальной практике этого следует избегать.
- Элемент списка 1
- Элемент списка 2
- Элемент списка 3
- Элемент списка 4
- Элемент списка 5
- Элемент списка 6
- Элемент списка 7
- Элемент списка 8
- Элемент списка 9
- Элемент списка 10
Свойство list-style-position
Определяет позицию маркера. Бывает:
- outside -маркер расположен снаружи текста (значение по умолчанию);
- inside - маркер встроен внутрьтекста и обтекается им;
- inherit - свойство наследуется от родителя (как правило, во вложенных списках).
Как правило, если используют это свойство, то со значением inside, т.к. значение outside применяется по умолчанию, а inherit используется очень редко.
Пример с использование list-style-position: inside:
- Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore impedit aliquam dolores tempora nisi sapiente, dolorem nihil, harum consequuntur porro ab in eveniet aspernatur esse!
- Harum modi architecto perferendis officiis labore voluptate eveniet aut alias minima excepturi quaerat quod atque eum dolorem, unde porro sit deserunt dolor dolorum expedita, veniam.
- Reprehenderit ullam saepe recusandae corporis dignissimos impedit voluptates suscipit delectus, facilis officia quisquam perspiciatis, excepturi autem! Dolor non tempora sint facilis labore autem harum quisquam.
- Dicta ducimus, pariatur, magni molestiae temporibus excepturi dignissimos dolores repudiandae soluta quos, voluptate laborum. Ullam nemo, cum corporis dignissimos, fugit similique omnis placeat assumenda modi?
Изображения вместо маркеров или цифр. Свойство list-style-image
Вы можете заменить обычные маркеры или цифры на подходящие для ваших целей изображения. Это задается с помощью свойства list-style-image. Значения этого свойства - это none (т.е. отсутствие изображения - вариант по умолчанию) или url(путь_к файлу_изображения.расш).
Путь к файлу указывается либо относительно положения html-файла, либо в виде абсолютного пути вместе с именем сайта.
Например:
1 2 3 | ul { list-style-image: url(markers/ok.png);} ul{list-style-image: url(http://somesite.com/images/marker.png);} |
Следует учитывать, что изображения в качестве маркеров имеют приоритет перед самими маркерами или цифрами, поэтому будут их перекрывать.
Пример:
- Элемент списка 1
- Элемент списка 2
- Элемент списка 3
- Элемент списка 4
- Элемент списка 5
- Элемент списка 6
- Элемент списка 7
- Элемент списка 8
- Элемент списка 9
- Элемент списка 10
Чтобы удалить маркер в виде изображения, необходимо записать:
1 | ul { list-style-image: none;} |
Свойство list-style
Свойство list-style
является универсальным (обобщенным) и содержит в себе перечисление предыдущих трех:
1 | list-style: list-style-type list-style-position list-style-image |
В этом свойстве могут быть указаны все свойства или какая-то часть из этих свойств, даже одно. Например, можно записать так:
1 | ul { list-style: square; } |
Или так:
1 | ul { list-style: url(markers/arrow.gif); } |
Или так:
1 | ul { list-style: inside url(markers/arr.gif); } |
Используем псевдоэлементы ::before и ::marker для оформления списков
Для того чтобы оформить списки, можно использовать псевдоэлемент ::before
, а также специальный псевдоэлемент ::marker
.
Для начала давайте заменим точки у маркированного списка на небольшие черточки + сделаем их красными. Для этого необходимо отключить стандартные маркеры и использовать псевдоэлемент ::before
.
1 2 3 4 5 6 7 8 9 10 | .styled{ list-style-type: none; padding: 20px; } .styled li::before{ content: '- '; font-size: 20px; font-weight: bold; color: #f00; } |
Вот, что получилось:
- Lorem ipsum dolor.
- Iure, vitae, quidem.
- Quisquam quis, rerum!
- Earum, numquam impedit.
- A aliquid, eum!
Для псевдоэлемента ::before
можно также использовать различные HTML-спецсимволы. Например, для добавления длинного тире можно использовать спецсимвол —
. Однако для записи его в свойстве content необходимо Unicode-написание этого символа с обратным слэшом в начале.
1 2 3 4 5 6 7 8 | .mdash li::before{ content: '\2014'; display: inline-block; margin-right: 10px; font-size: 20px; font-weight: bold; color: #10ba44; } |
Так будет выглядеть сейчас наш список:
- Lorem ipsum dolor.
- Iure, vitae, quidem.
- Quisquam quis, rerum!
- Earum, numquam impedit.
- A aliquid, eum!
Давайте теперь попробуем добавить размеры, рамку и изменение цвета нового маркера при наведении на элемент списка.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | .arrows li::before { content: '\00BB'; display: inline-block; width: 22px; height: 22px; margin-right: 10px; border: 2px solid; border-radius: 50%; font-weight: bold; font-size: 20px; line-height: 20px; text-align: center; } .arrows li:hover { cursor: pointer; } .arrows li:hover::before { color: #0d44c1; } |
Наведите на элементы списка.
- Lorem ipsum dolor.
- Iure, vitae, quidem.
- Quisquam quis, rerum!
- Earum, numquam impedit.
- A aliquid, eum!
С помощью псевдоэлемента ::before
можно заменить изображение-маркер на html-символ, если подобрать подходящий.
Если вы всего лишь хотите поменять цвет маркера по сравнению с цветом текста списка или сделать его полужирным, достаточно использовать псевдоэлемент ::marker
. Он сработает и для маркированного, и для нумерованного списка. Единственный минус - псевдоэлемент ::marker
поддерживается в Firefox 68+ иSafari 11.1+и с ограничениями в Chrome и Edge 80+. Ряд мобильных браузеров пока его не поддерживает.
Допустимые свойства CSS для ::marker
animation-*
transition-*
color
direction
font-*
content
unicode-bidi
white-space
Если вы хотите изменить содержиме псевдоэлемента ::marker
, используйте свойство content
, как и в псевдоэлементе ::before
.
Пример стилизации маркеров списков с помощью псевдоэлемента ::marker
.
1 2 3 4 5 6 7 8 9 10 11 12 | ul.marker-styled { font-size: 20px; color: #a987e0; } .marker-styled li::marker { color: #6c2ed0; font-weight: bold; } .line-marker li::marker { content: '\2014\00A0'; color: orange; } |
Посмотрим, как это выглядит на 2-х списках.
- Lorem ipsum dolor.
- Iure, vitae, quidem.
- Quisquam quis, rerum!
- Earum, numquam impedit.
- A aliquid, eum!
- Lorem ipsum dolor.
- Iure, vitae, quidem.
- Quisquam quis, rerum!
- Earum, numquam impedit.
- A aliquid, eum!
- Lorem ipsum dolor.
- Iure, vitae, quidem.
- Quisquam quis, rerum!
- Earum, numquam impedit.
- A aliquid, eum!
Вы можете посмотреть на различные варианты оформления списков в примере ниже.
See the Pen CSS Маркеры для списков by Elen (@ambassador) on CodePen.
Изменение вида счетчиков в нумерованных (упорядоченных списках)
Для нумерованных (упорядоченных) списков, которые формируются с помощью тега <ol>
, необходимо также менять внешний вид нумерации (счетчиков) с помощью оформления псевдоэлементов ::before
. Однако тут важно, чтобы нумерация продолжалась с каждым новым элементом списка. Поэтому в стилях для элементов li
такого списка (в примере он имеет id="circle-counter"
) необходимо задать свойство counter-increment: list
(значение может быть любым словом), а в css для псевдоэлемента ::before нужно использовать это значение в свойстве content: counter(list)
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #circle-counter { margin-left: 0; } #circle-counter li{ list-style-type: none; margin-bottom: 10px; counter-increment: list; } #circle-counter li:before { box-sizing: border-box; content: counter(list); display: inline-block; padding-top: 4px; margin-right: 12px; border-radius: 50%; background-color: #1e8cbe; color: #fff; width: 40px; height: 40px; text-align: center; vertical-align: middle; } |
Посмотрите, что получилось:
- Элемент списка №1
- Элемент списка №2
- Элемент списка №3
- Элемент списка №4
- Элемент списка №5
Внизу списка есть переключатели, которые дают возможность протестировать несколько значений для свойства counter-increment
: с отрицательными значениями, четные, через 10 единиц.