Хлебные крошки показывают путь от главной страницы до текущей и дают перейти
на любой родительский уровень. Это вторичная навигация: она дополняет
меню, а не заменяет его, и описывает
структуру сайта, а не историю переходов.
Минимальную разметку показывает пример выше. Части:
Корень <nav class="sf-breadcrumbs flex items-cross-center"> с
aria-label. CSS блока не задаёт display: раскладку даёт утилита
flex, перенос и отступы — сам блок.
Пункты sf-breadcrumbs-item — прямые потомки корня: скрипт сворачивает
только их. Родительские уровни — ссылки <a> с модификатором
sf-breadcrumbs-item--link, текущая страница — <span> с
aria-current="page".
Внутри каждого пункта — sf-breadcrumbs-item-container с подписью и
иконкой; утилиты flex items-cross-center выстраивают их в строку.
Между пунктами — разделитель sf-breadcrumbs-item--separator с иконкой
chevron_right и aria-hidden="true".
Варианты
Вид пункта
Ссылка (sf-breadcrumbs-item--link) окрашена основным цветом. Пункт без
модификатора — приглушённый текст: так показывают уровень, у которого нет
своей страницы. Текущая страница с aria-current="page" набрана основным
цветом текста и средним начертанием. Разделитель отражается при письме справа
налево.
Иконка ставится в sf-breadcrumbs-item-container перед подписью и берёт
высоту строки пункта. Главную часто показывают одной иконкой home; у такой
ссылки обязателен aria-label.
Если пунктов больше data-max-items (по умолчанию 4), скрипт сворачивает
середину пути в кнопку с многоточием; data-expand-label задаёт её
доступное имя (без него — имя на языке страницы, по-русски «Показать скрытые крошки»). Нажатие
раскрывает весь путь. Значения меньше 3 выключают сворачивание.
Когда путь нельзя сокращать, задайте data-max-items="0". Пункты переносятся
на следующую строку, длинная подпись переносится внутри пункта, и страница не
получает горизонтальной прокрутки.
Наведение и нажатие окрашивают ссылку и её иконку цветами --sf-primary-hover
и --sf-primary-active; эти состояния компонент показывает сам.
Фокус
При переходе клавишей Tab ссылка получает кольцо фокуса по :focus-visible.
В примере фокус показан классом focus-visible, который CSS компонента
читает наравне с псевдоклассом.
Корень — <nav> с локализованным aria-label, например «Хлебные крошки»:
так область попадает в список ориентиров.
Родительские уровни — нативные ссылки, текущая страница — текст с
aria-current="page", не ссылка.
Ссылка-иконка получает aria-label; разделители и иконки — aria-hidden="true".
Кнопка с многоточием — нативный <button> с aria-expanded="false" и
именем из data-expand-label; задайте его на языке страницы.
Пункты переходят по Tab в порядке пути; кольцо фокуса рисует компонент.
JavaScript
Скрипт компонента подключается сам и обслуживает каждый .sf-breadcrumbs
на странице, в том числе добавленный позже. Он сворачивает длинный путь и
пересчитывает его, когда пункты добавляют или удаляют или меняются атрибуты
data-max-items и data-expand-label; после такого изменения раскрытый путь
снова сворачивается.
Нажатие кнопки с многоточием отправляет на корне событие
sf-breadcrumb-click (всплывает, отменяемое). В detail — root, index
('ellipsis'), items (пункты пути без разделителей), originalEvent и
item с полями label, ellipsis: true и hiddenItems — скрытые пункты.
preventDefault() оставляет путь свёрнутым, например чтобы показать скрытые
уровни в своём меню.
Классы и переменные собраны из CSS выпуска и обновляются вместе с ним.
Переменные
Компонент читает свои переменные, а модификаторы задают им значения; таблица показывает, из чего складывается вид. Переменные компонента — его внутренняя проводка, а не поверхность настройки: их имена и устройство могут меняться. Вид проекта меняют общие токены, а глубокий вид Smart-компонента — его шаблон (см. Переменные компонента). Значение по умолчанию — из базового правила блока (.sf-breadcrumbs); переменную без него задают только модификаторы.
Переменная
По умолчанию
Задаёт
--sf-breadcrumbs-item--background-color
не задана; задают модификаторы, например .sf-breadcrumbs-item: transparent
background-color
--sf-breadcrumbs-item--box-shadow
не задана; задают модификаторы, например .sf-breadcrumbs-item: none
box-shadow
--sf-breadcrumbs-item-container--background-color
не задана; задают модификаторы, например .sf-breadcrumbs-item .sf-breadcrumbs-item-container: transparent
background-color
--sf-breadcrumbs-item-container--color
не задана; задают модификаторы, например .sf-breadcrumbs-item .sf-breadcrumbs-item-container: var(--sf-on-surface-variant)
color
--sf-breadcrumbs-item-container--font-family
не задана; задают модификаторы, например .sf-breadcrumbs-item .sf-breadcrumbs-item-container: var(--sf-text--family)
font-family
--sf-breadcrumbs-item-container--font-size
не задана; задают модификаторы, например .sf-breadcrumbs-item .sf-breadcrumbs-item-container: var(--sf-text-size-1/2)
font-size
--sf-breadcrumbs-item-container--font-weight
не задана; задают модификаторы, например .sf-breadcrumbs-item .sf-breadcrumbs-item-container: var(--sf-font-weight-regular)
font-weight
--sf-breadcrumbs-item-container--gap
не задана; задают модификаторы, например .sf-breadcrumbs-item .sf-breadcrumbs-item-container: var(--sf-space-1/4)
gap
--sf-breadcrumbs-item-container--line-height
не задана; задают модификаторы, например .sf-breadcrumbs-item .sf-breadcrumbs-item-container: var(--sf-text-height-1/2)