Стили для списков начинаются с приставки 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!
Следующим образом можно реализовать список с отмеченными пунктами. В чем-то он похож на стилизацию чекбоксов.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<style> .check-list { margin: 0; margin-left: 1.2rem; list-style-type: none; } .check-list li { position: relative; list-style-type: none; padding-left: 2.5rem; margin-bottom: 0.5rem; } .check-list li:before { content: ''; display: block; position: absolute; left: 0; top: 5px; width: 5px; height: 11px; border-width: 0 2px 2px 0; border-style: solid; border-color: #00a8a8; transform-origin: bottom left; transform: rotate(45deg); } </style> ------------------------------- <ul class="check-list"> <li>Head</li> <li>Shoulders</li> <li>Knees</li> <li>Toes</li> </ul> |
Вот как это выглядит:
- Head
- Shoulders
- Knees
- Toes
С помощью псевдоэлемента ::before можно заменить изображение-маркер на html-символ, если подобрать подходящий.
Если вы всего лишь хотите поменять цвет маркера по сравнению с цветом текста списка или сделать его полужирным, достаточно использовать псевдоэлемент ::marker. Он сработает и для маркированного, и для нумерованного списка. Единственный минус - псевдоэлемент ::marker поддерживается в Firefox 68+ иSafari 11.1+и с ограничениями в Chrome и Edge 80+. Ряд мобильных браузеров пока его не поддерживает.
Допустимые свойства CSS для ::marker
animation-*transition-*colordirectionfont-*contentunicode-bidiwhite-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 единиц.
Нумерация для элементов, которые не являются списками
Ниже вы найдете пример, в котором с помощью псевдоэлемента ::before нумерация назначается для элементов типа <section>. Причем нумерация идет в виде 01, 02, 03 и т.д. Это реализуется элементарно для нумерованных списков с помощью свойства list-style-type: decimal-leading-zero, как в примере выше, а вот для несписков это придется делать с помощью дополнительного счетчика.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
.num-section{ border: 1px solid #0fe; border-radius: 12px; box-shadow: rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px; padding: 15px; margin-bottom: 20px; counter-increment: my-counter; position: relative; padding-left: 60px; } .num-section::before { display: inline-block; content: counter(my-counter, decimal-leading-zero) ; position: absolute; left: 15px; top: 15px; font-weight: bold; font-family: serif; padding: 5px 8px; background-color: #0fe; border-radius: 6px; } |
Неким минусом этого подхода является то, что вам нужно сдвинуть контент в <section> слева за счет свойства padding-left: 60px, чтобы абсолютно позиционированный псевдоэлемент ::before не наползал на текст.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptatum explicabo veniam ducimus quod reiciendis neque eum quis voluptas, voluptate assumenda.
Expedita sapiente modi rerum minima provident necessitatibus ullam mollitia veritatis impedit eaque, nisi et cum! Expedita quas harum natus ipsa!
Quisquam magni quis, expedita inventore corporis modi! Perferendis velit dolorum ipsam quae adipisci quidem praesentium veritatis doloremque excepturi, sit deleniti.
Labore iste commodi recusandae, assumenda, repellat officiis tempore quos animi accusantium perspiciatis aperiam quo cum quod expedita neque id rerum.
Ut voluptate provident autem recusandae exercitationem eum culpa quibusdam alias iusto nostrum consequatur omnis labore pariatur, deserunt, est aspernatur laboriosam.
Veritatis, quae? Tempora, ipsam odio vitae vero nobis eos, similique voluptatem quos deleniti autem odit asperiores placeat exercitationem architecto iure.
Alias nulla amet atque ipsa officiis quo, esse optio accusamus aliquid quibusdam asperiores. Dignissimos corporis dolores reiciendis explicabo voluptatibus cupiditate.
Corrupti odio deleniti, aliquid corporis, amet, possimus dolorem similique ut illo impedit nam. Enim voluptates illum totam quis itaque fugit?
Tempora voluptates dolorum aliquid numquam eligendi fugiat delectus labore atque quia doloremque, facere amet ducimus obcaecati fugit aliquam molestiae minima!
Sapiente, unde animi ipsam facilis molestiae iusto numquam dolorem repellat, quod odit, corporis officia tempora molestias! Tempora, in necessitatibus! Est.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptatum explicabo veniam ducimus quod reiciendis neque eum quis voluptas, voluptate assumenda.
Expedita sapiente modi rerum minima provident necessitatibus ullam mollitia veritatis impedit eaque, nisi et cum! Expedita quas harum natus ipsa!
Примеры стилизации списков с codepen.io
Еще несколько примеров со стилизацией списков:
Анимация маркированного списка при наведении от Yair Even Or .
See the Pen Better bullets for lists by Yair Even Or (@vsync) on CodePen.
Список со скошенными краями от Natalia на основе трансформаций и линейного градиента.
See the Pen A simple folded list with CSS only by Natalia 🤟 (@natszafraniec) on CodePen.
Опять скошенный список с 2-мя вариантами размещения текста от Josh Bader.
See the Pen Tiltlist by Josh Bader (@joshbader) on CodePen.
Нумерованный список от Sheelah Brennan.
See the Pen CSS counters with ordered list by Sheelah Brennan (@sheelah) on CodePen.
Древовидные списки от Chris Bolson
See the Pen Tree list styling ul by Chris Bolson (@cbolson) on CodePen.
Оформление многоуровневого (вложенного) списка.
See the Pen <ul>Tree View - unlimited nested levels by Chris Bolson (@cbolson) on CodePen.