Кратко
Скопировано: — псевдоэлемент, отвечающий за маркерное поле. В нём находятся, например, маркеры списка.
Пример
СкопированоСоздадим ненумерованный список <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
- Chrome 86, поддерживается
- Edge 86, поддерживается
- Firefox 80, поддерживается
- Safari, не поддерживается
На практике
Скопированосоветует
Скопировано🛠 К сожалению, из-за того, что на данный момент свойств для изменения маркерного поля достаточно мало, его не получится как-то по-особому стилизовать. Например, в первой демке в начале доки фактически не используется псевдоэлемент :. Синие маркеры в виде квадратиков сделаны в псевдоэлементе : через 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.