Кратко
Скопировано:
— псевдоэлемент, отвечающий за маркерное поле. В нём находятся, например, маркеры списка.
Пример
СкопированоСоздадим ненумерованный список <ul>
и установим синий цвет точки для каждого элемента <li>
:
<ul> <li>Цвет точек</li> <li>этого ненумерованного списка</li> <li>#2e9aff</li></ul>
<ul> <li>Цвет точек</li> <li>этого ненумерованного списка</li> <li>#2e9aff</li> </ul>
li::marker { color: #2e9aff;}
li::marker { color: #2e9aff; }
Как пишется
Скопированоli::marker { color: #2e9aff;}
li::marker { color: #2e9aff; }
Псевдоэлемент :
работает только на элементах списка.
💡 Для обратной совместимости с CSS 2 браузеры позволяют писать некоторые псевдоэлементы с одним двоеточием, например: :
, :
, :
, :
. Однако псевдоэлемент :
необходимо указывать с двумя двоеточиями.
Как понять
СкопированоЭлемент списка
СкопированоЭлемент списка — это любой элемент со свойством display
. Как пример, всем вам знакомый элемент <li>
по умолчанию имеет свойство display
.
Каждый новый элемент <li>
в списке <ol>
или <ul>
обозначается маркером.
Маркеры
СкопированоПсевдоэлемент :
— это маркерное поле в котором находится маркер. Маркер может представлять собой символ или порядковый номер.
Например, в нумерованном списке <ol>
каждый элемент <li>
по умолчанию нумеруется в порядке возрастания. В ненумерованном списке <ul>
каждый элемент <li>
помечается маркером в виде точки.
Элементы списка автоматически создают псевдоэлемент :
, никакие другие элементы этого не делают.
Содержимым этого маркерного поля можно управлять с помощью свойств:
Также есть шорткат list
, который даёт возможность задать значения для всех этих свойств одновременно.
Свойства применяемые к маркерному полю
СкопированоТолько следующие CSS-свойства применяются к маркерному полю:
- свойства
text
,- combine - upright unicode
и- bidi direction
; - свойство
content
; - все свойства анимации и переходов.
Свойства, применяемые к содержимому маркерного поля
СкопированоНаследуемые свойства, которые применяются к тексту, могут быть установлены на псевдоэлемент :
, текстовое содержимое псевдоэлемента будет наследовать значения:
white
,- space text
,- transform letter
;- spacing - все свойства для работы с текстом (шрифтом);
- свойство
color
.
Генерация содержимого маркера
СкопированоЕсли вы попробуете создать и стилизовать псевдоэлемент :
для элемента, у которого свойство display
не равно display
, то ничего не выйдет, маркерное поле не создастся.
Воссоздадим искусственный ненумерованный список и попробуем стилизовать псевдоэлемент :
элементов <p>
:
<div class="unordered-list"> <p class="list-item">первый элемент псевдосписка</p> <p class="list-item">второй элемент псевдосписка</p> <p class="list-item">третий элемент псевдосписка</p></div>
<div class="unordered-list"> <p class="list-item">первый элемент псевдосписка</p> <p class="list-item">второй элемент псевдосписка</p> <p class="list-item">третий элемент псевдосписка</p> </div>
.list-item::marker { content: "🌵";}
.list-item::marker { content: "🌵"; }
Как видно, маркеры в виде кактусов не появились.
Однако, если указать элементам <p>
значение display
:
.list-item { display: list-item;}
.list-item { display: list-item; }
Работает!
Псевдоэлемент :
элемента списка встаёт перед псевдоэлементом :
, если он существует в элементе.
Возьмём демку, которая демонстрировалась выше, но немного изменим её CSS:
.list-item::marker { content: "🌚";}.list-item::before { content: "🌝 ";}
.list-item::marker { content: "🌚"; } .list-item::before { content: "🌝 "; }
Браузер решает как в итоге будет выглядеть :
по порядку проверяя следующие условия:
- Будет отображаться указанное значение если свойство
content
на псевдоэлементе:
отличается от значения по умолчанию (: marker normal
). - Будет отображаться указанное изображение если применено свойство
list
на элементе списка.- style - image - Будет отображаться маркер в виде строки если применено свойство
list
на элементе списка.- style - type - Если ничего из выше перечисленного не выполняется, псевдоэлемент
:
не создаст поле.: marker
На практике
Скопированосоветует Скопировано
🛠 К сожалению, из-за того, что на данный момент свойств для изменения маркерного поля достаточно мало, его не получится как-то по-особому стилизовать. Например, в первой демке в начале доки фактически не используется псевдоэлемент :
. Синие маркеры в виде квадратиков сделаны в псевдоэлементе :
через position
с указанием свойств width
и heigth
и свойства background
, данные свойства псевдоэлемент :
не поддерживает.
🛠 Используя псевдоэлемент :
, маркеры можно стилизовать отдельно от самой контентной части элемента <li>
:
li { color: #2e9aff;}li::marker { color: #f498ad; font-weight: bold;}
li { color: #2e9aff; } li::marker { color: #f498ad; font-weight: bold; }
Или вы можете стилизовать маркер конкретного элемента списка, например, комбинируя псевдоэлемент :
с псевдоклассом last
:
li::marker { color: aquamarine;}li:last-of-type::marker { color: tomato;}
li::marker { color: aquamarine; } li:last-of-type::marker { color: tomato; }
🛠 Взаимодействовать можно не только с маркерами элементов списка <ul>
. Также можно влиять и на элементы списка <ol>
при помощи счётчиков в CSS.