Хлебные крошки – это элемент навигации, который позволяет пользователю легко ориентироваться на сайте и понимать, где он находится в данный момент относительно главной страницы.

Хлебные крошки имеют несколько размеров для большей гибкости при адаптации к разным интерфейсам.

Внешний вид задают две директивы. kbqBreadcrumbView заменяет содержимое отдельного пункта, а kbqBreadcrumbsSeparator — разделитель между пунктами.

max ограничивает число одновременно показанных пунктов: остальные сворачиваются в выпадающий список за кнопкой раскрытия. Кнопка занимает одно из мест, поэтому [max]="4" отображает три пункта и кнопку. Значение null снимает ограничение, и тогда пункты скрываются при нехватке ширины.

routerLink рекомендуется указывать у каждого kbq-breadcrumb-item: выпадающий список строит скрытые пункты из text и routerLink, поэтому пункт без адреса превращается в строку без перехода.

disabled переводит хлебные крошки в режим только для чтения: пункты и кнопка раскрытия перестают вести на страницы и не принимают фокус по клавише Tab.

@Component({
template: `
<nav
kbq-breadcrumbs
[disabled]="isReadOnly"
>...
</nav>
`
})

У отдельного пункта есть собственный disabled с тем же действием.

Пункты могут содержать наименования с разной величины.
Режимы ниже — это приемы, а не свойства компонента: каждый из них задает стили, которые приложение применяет к отрисованным пунктам. В примерах эти стили собраны в блоке styles, и переносить их нужно вместе с разметкой.

Стандартный прием сокращения, при котором наименование будет обрезано после первых 14 символов.

Для случаев, когда необходимо выделить уникальный идентификатор в конце наименования

Для случаев, когда необходимо выделить начало наименования и его окончание.

Для случаев, когда наименование можно заменить на сокращенную версию с помощью известной аббревиатуры. Важно, что данное сокращение должно быть уже известно аудитории пользователей сервиса.

По умолчанию панель хлебных крошек смещена влево на --kbq-breadcrumb-item-negative-margin, используя негативный отступ. Это поведение можно изменить при помощи свойства firstItemNegativeMargin.

Для определенных хлебных крошек:

@Component({
template: `
<nav
kbq-breadcrumbs
[firstItemNegativeMargin]="false"
>...
</nav>
`
})

Для всех хлебных крошек в модуле, используя Dependency Injection при помощи kbqBreadcrumbsConfigurationProvider провайдера:

import { kbqBreadcrumbsConfigurationProvider } from '@koobiq/components/breadcrumbs';
@NgModule({
providers: [
kbqBreadcrumbsConfigurationProvider({
firstItemNegativeMargin: false
})
]
})

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

Данный режим позволяет хлебным крошкам подстраиваться под доступное пространство.

Automatic truncation is used as a basis when middle items are hidden due to lack of free space.
If space becomes even smaller, the leftmost breadcrumb level is also hidden, leaving only the rightmost level visible.
Next, breadcrumbs can only reduce in size when the visible item's name is trimmed to 3 characters.

Если необходимо отобразить значение хлебных крошек без сокращений и скрытия пунктов, то можно воспользоваться переносом пунктов на новую строку.

Хлебные крошки — это ориентир навигации. Компонент проставляет роль navigation на <kbq-breadcrumbs>, а у <nav kbq-breadcrumbs> эта роль есть изначально.

Доступное имя приходит из активной локали. Если на странице несколько блоков хлебных крошек, им нужно задать разные имена через aria-label — так вспомогательные технологии их различат:

<nav kbq-breadcrumbs aria-label="Навигация по разделу">...</nav>

Разделитель по умолчанию скрыт от вспомогательных технологий, поэтому они не зачитывают знаки между пунктами. Разделитель, переданный через kbqBreadcrumbsSeparator, тоже нужно скрыть:

<ng-template kbqBreadcrumbsSeparator>
<span aria-hidden="true">→</span>
</ng-template>

Последнему пункту компонент проставляет атрибут aria-current="page". Если хлебные крошки не заканчиваются текущей страницей — например, карточка открыта из списка, — нужный пункт отмечают свойством current.

Клавиша
Поведение
TabПереход к началу навигации: При переключении фокуса на хлебные крошки, курсор автоматически перемещается на первый элемент навигационного пути.
Enter \ SpaceАктивация элемента. Переход по ссылке: Если выбранный элемент соответствует ссылке на другую страницу, происходит переход. Раскрытие списка: Для элементов с выпадающими списками, открывается список и фокус переносится на первый элемент в списке. Вызов действия: Если элемент имеет связанное с ним действие (например, вызов всплывающего окна), это действие выполняется. Без действия: Для остальных элементов, никаких действий не происходит.
Right Arrow \ Left ArrowПеремещение по элементам: Позволяют перемещаться по элементам навигации вперед или назад. При достижении конца или начала списка, курсор циклически переходит на противоположный конец.
Bottom ArrowРаскрытие выпадающего списка: если текущий элемент содержит вложенный список, он будет раскрыт.
HomeПереход к началу: Перемещает фокус на первый элемент навигации.
EndПереход к концу: Перемещает фокус на последний элемент навигации, который его принимает. Пункт текущей страницы фокус не принимает, поэтому курсор встает на предыдущий элемент.
Предложения по улучшению
Если вы нашли ошибку или хотите доработать статью, создайте запрос на GitHub.