Хлебные крошки

Влад Мержевич

Хлебные крошки — это разновидность навигации, которая помогает посетителям понять, где они находятся на сайте и быстро перемещаться по иерархии веб-страниц. Обычно хлебные крошки отображаются в виде цепочки ссылок, разделённых между собой специальными символами (например: «>», «/» или «→»).

Первой в цепочке ссылок, как правило, идёт главная страница, а последней — текущая веб-страница. Вместо надписи «Главная страница» также применяют изображение домика. На рис. 1 приведено несколько вариантов хлебных крошек.

Рис. 1. Вид хлебных крошек

Обратите внимание, что последний пункт не является ссылкой, поскольку указывает на текущую веб-страницу.

Разметка хлебных крошек обычно делается с помощью списков <ul> или <ol>, каждая ссылка вставляется внутрь пункта списка <li>. Для последнего пункта списка ссылка не нужна, поэтому вместо элемента <a> используем <span>.

<ol>
  <li><a href="/">Главная</a></li>
  <li><a href="/catalog/">Каталог</a></li>
  <li><a href="/catalog/electronics/">Электроника</a></li>
  <li><span>Смартфоны</span></li>
</ol>

Поскольку хлебные крошки служат формой навигации, их рекомендуется поместить внутрь элемента <nav>, снабдив его атрибутом aria-label с текстовой подсказкой. Она помогает слабовидящим людям, использующих скринридер для озвучивания текста веб-страницы, понять что это за элемент. Для обозначения текущей веб-страницы добавляем к последнему <li> атрибут aria-current со значением page. И последнее — добавим класс breadcrumb к элементу <ol>, чтобы целенаправленно применять стиль только к этому элементу.

<nav aria-label="Хлебные крошки">
  <ol class="breadcrumb">
    <li><a href="/">Главная</a></li>
    <li><a href="/catalog/">Каталог</a></li>
    <li><a href="/catalog/electronics/">Электроника</a></li>
    <li aria-current="page"><span>Смартфоны</span></li>
  </ol>
</nav>

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

.breadcrumb {
  margin: 0; padding: 0; /* Обнуляем отступы и поля */
  list-style: none; /* Убираем маркеры и нумерацию */
}

Затем превращаем список в горизонтальный, добавив к классу breadcrumb свойство display со значением flex или inline-flex. Разница между значениями следующая:

  • flex — делает хлебные крошки на всю ширину области;
  • inline-flex — ширина хлебных крошек соответствует их содержимому.

На рис. 2 показаны хлебные крошки при разных значениях свойства display.

а. display: flex

б. display: inline-flex

Рис. 2. Значение display

Обратите внимание, что разница будет заметна только при использовании фонового цвета под хлебными крошками.

По умолчанию флекс-элементы не переносятся на другую строку, поэтому это поведение следует исправить через свойство flex-wrap со значением wrap.

.breadcrumb {
  flex-wrap: wrap;
}

Разделители между ссылками также устанавливаются через стили, что удобно, поскольку не требуется каким-либо образом менять исходный код HTML. Символ разделителя добавляется с помощью свойства content и псевдоэлемента ::after.

.breadcrumb > li::after {
  content: '→';
  color: orange;
}

Здесь мы используем стрелку и делаем её оранжевой через свойство color. После последнего пункта стрелка не нужна и она убирается комбинацией свойства content со значением none и псевдокласса :last-child, он применяет стиль только к последнему пункту списка.

.breadcrumb > li:last-child::after {
  content: none;
}

Окончательный код приведён в примере 1.

Пример 1. Хлебные крошки

<!DOCTYPE html>
<html lang="ru">
 <head>
  <meta charset="utf-8">
  <title>Хлебные крошки</title>
  <style>
   body {
    background-color: #f3f3f3; /* Серый цвет фона */
   }
   .breadcrumb {
    margin: 0; padding: 0; /* Обнуляем отступы и поля */
    list-style: none; /* Убираем маркеры и нумерацию */
    background-color: #fff; /* Белый цвет фона */
    font-family: Arial, Helvetica, sans-serif; /* Шрифт */
    padding: 1rem; /* Расстояние от текста до края */
    border-radius: 5px; /* Радиус скругления */
    display: flex; /* Выстраиваем список по горизонтали */
    flex-wrap: wrap; /* Текст переносится на другую строку */
    margin-top: 2rem; /* Расстояние сверху */
   }
   .breadcrumb > li > a,
   .breadcrumb > li > a:visited {
    color: #2c2c2c; /* Серый цвет ссылок */
    text-decoration: none; /* Убираем подчёркивание */
   }
   .breadcrumb > li > a:hover {
    color: #1335c5; /* Цвет ссылок при наведении */
   }
   .breadcrumb > li::after {
    content: '→';  /* Символ разделителя */
    color: orange; /* Цвет символа */
    padding: 0 1rem; /* Расстояние слева и справа */
   }
   .breadcrumb > li:last-child::after {
    content: none; /* Убираем разделитель */
   }
   .breadcrumb > span {
    color: #0e0e0e; /* Цвет текста */
    font-weight: bold; /* Жирный шрифт */
   }
  </style>
 </head>
 <body>
  <nav aria-label="Хлебные крошки">
   <ol class="breadcrumb">
    <li><a href="/">Главная</a></li>
    <li><a href="/catalog/">Каталог</a></li>
    <li><a href="/catalog/electronics/">Электроника</a></li>
    <li aria-current="page"><span>Смартфоны</span></li>
   </ol>
  </nav>
 </body>
</html>

Результат данного примера показан на рис. 2a.

Итоги

  • Хлебные крошки — это навигационный элемент, отображающий путь от главной страницы сайта до текущей, помогающий пользователю ориентироваться и быстро перемещаться по иерархии веб-страниц.
  • Хлебные крошки обычно создаются с помощью маркированного списка <ul> или нумерованного списка <ol>. С помощью свойства display со значением flex или inline-flex список превращается в горизонтальный.
  • Внешний вид ссылок задаётся через стили, там же добавляется и символ разделителя между пунктами списка.

Не выкладывайте свой код напрямую в комментариях, он отображается некорректно. Воспользуйтесь сервисом cssdeck.com или jsfiddle.net, сохраните код и в комментариях дайте на него ссылку. Так и результат сразу увидят.