TGViewer
<divelopers> <divelopers> @alexnozer_dev · 1.18K subscribers
Post #247 757
Стилизация счётчиков списка

Чтобы далеко не уходить от темы списков, предлагаю продолжение предыдущего поста, где расскажу про некоторые возможности стилизации маркеров.

Цифра в нумерованных списках — это псевдо-элемент ::marker, в который браузер автоматически подставляет значение счётчика. Его можно базово стилизовать ограниченным набором свойств:

- font-*;
- white-space;
- color;
- text-combine-upright;
- unicode-bidi;
- direction;
- content;
- animation-*;
- transition-*.

Интереснее всего свойство content. Его можно переопределить, что сбросит стандартные маркеры со счётчиком:

ol li::marker {
content: '🔹 ';
}

/*
🔹 Foo
🔹 Bar
🔹 Baz
*/


Стандартный счётчик списка называется list-item. Используя функцию counter() для вывода значения счётчика в свойство content и встроенную конкатенацию строк, можно задать собственный суффикс. Это полезно, когда нужны скобки вместо стандартных точек:

ol li::marker {
content: counter(list-item) ') ';
}

/*
1) Foo
2) Bar
3) Baz
*/


При использовании стандартного счётчика таким образом будут работать атрибуты reversed и start. Атрибут value будет работать частично: значение установится, но отсчёт у следующего элемента будет от предыдущего значения счётчика. С помощью data-* атрибутов и attr() можно добавить возможность настройки префикса и суффикса в HTML для контент-менеджеров:

ol {
--prefix: '';
--suffix: ') ';
}

ol li::marker {
content: var(--prefix) counter(list-item) var(--suffix);
}

ol[data-prefix] {
--prefix: attr(data-prefix);
}

ol[data-suffix] {
--suffix: attr(data-suffix);
}

/*
<ol data-prefix="[" data-suffix="] ">
...
</ol>

[1] Foo
[2] Bar
[3] Baz
*/


Иногда нужно вывести цифры так, чтобы впереди были незначащие нули. Это делается с помощью передачи второго аргумента decimal-leading-zero в функцию counter():

ol li::marker {
content: counter(list-item, decimal-leading-zero) '. ';
}

/*
09. Foo
10. Bar
11. Baz
*/


Маркеры по умолчанию вынесены за пределы элементов списка. С помощью свойства list-style-position: inside можно поместить маркеры внутрь элементов списка, чтобы текст их обтекал:

ol {
list-style-position: inside;
}

/*
1. Foo
Foo Foo
2. Bar
Bar Bar
3. Baz
Baz Baz
*/


Если для маркеров нужна расширенная стилизация, можно перенести стандартный счётчик list-item в псевдо-элемент ::before. Все атрибуты списка продолжат работать, но псевдо-элемент ::before можно стилизовать без ограничений.

ol {
list-style: none;
}

ol li::before {
content: counter(list-item) '. ';
/* другие стили */
}


#css
  • 👍 12
  • 🔥 9
  • ❤ 4
  • 🆒 2
More from @alexnozer_dev
  1. Sep 21, 2026Реализация пользовательских атрибутов Под конец прошлого года я рассказывал об API пользов…
  2. Sep 14, 2026Подклассы Event вместо CustomEvent Многие библиотеки предоставляют систему событий в качес…
  3. Sep 11, 2026Эволюция стилей в темах Shopify Адам Ватан на днях поделился новостью, что Shopify выкупил…
  4. Sep 9, 2026Persistent Widgets Многие сайты не должны быть SPA. Но иногда эта архитектура продиктована…
  5. Sep 7, 2026Processing Instructions и маркеры В DOM всё представлено в виде узлов (Node) разных типов.…
  6. Sep 1, 2026@scope и потоковая передача HTML Ноам Розенталь поделился интересной техникой, в которой с…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →