Выпадающее меню

Плюсом использования псевдокласса :checked является то, что мы можем щёлкать по разным элементам и отслеживать их состояние — включено или нет. Этот механизм пригодится для создания выпадающего меню, которое можно привязать к определённому тексту. При щелчке по тексту появляется меню, ещё один щелчок это меню скрывает. На рис. 1 продемонстрировано, как это меню выглядит.

Выпадающее меню

Рис. 1. Выпадающее меню

Алгоритм создания такого меню не отличается от создания вкладок. Добавляем <input type="checkbox"> и <label>, затем связываем их друг с другом через атрибуты id и for.

<input type="checkbox" id="menu">
<label for="menu">Текст</label>

Ниже располагаем само меню в виде списка <ul>.

<ul>
  <li><a href="#">Пункт 1</a></li>
  <li><a href="#">Пункт 2</a></li>
</ul>

В стилях скрываем <input> и <ul> через свойство display со значением none.

input, ul { display: none; /* Прячем */ }

Затем <ul> отображаем через комбинацию :checked и ul.

:checked ~ ul {
  display: inline-block; /* Показываем меню */
}

Чтобы пользователь понимал, что перед ним не обычный текст, добавим к нему пунктирное подчёркивание через border-bottom и при наведении поменяем курсор на «руку», как это происходит со ссылками, через cursor.

label {
  cursor: pointer; /* Вид курсора */
  border-bottom: 1px dashed blue; /* Пунктир снизу */
}

Окончательный код для создания выпадающего меню с использованием псевдокласса :checked показан в примере 1.

Пример 1. Выпадающее меню на CSS

Код примера скопирован в буфер
<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Меню</title>
  <style>
   .dropdown {
    position: relative; /* Относительное позиционирование */
   }
   .dropdown input, .dropdown ul { display: none; /* Прячем */ }
   .dropdown label {
    cursor: pointer; /* Вид курсора */
    border-bottom: 1px dashed blue; /* Пунктир снизу */
   }
   .dropdown ul {
    position: absolute; /* Абсолютное позиционирование */
    left: 0; top: 1.3em; /* Положение меню */
    margin: 0; padding: 5px; /* Убираем отступы и поля */
    list-style: none; /* Убираем маркеры списка */
    background: #673AB7; /* Цвет фона */
   }
   .dropdown a { color: #fff; /* Цвет ссылок */ }
   .dropdown :checked ~ ul {
    display: inline-block; /* Показываем меню */
   }
  </style>
 </head>
 <body>
  <div class="dropdown">
   <input type="checkbox" id="menu">
   <label for="menu">Выбери меня</label>
   <ul>
    <li><a href="#">Леонардо</a></li>
    <li><a href="#">Рафаэль</a></li>
    <li><a href="#">Донателло</a></li>
    <li><a href="#">Микеланджело</a></li>
   </ul>
  </div>
 </body>
</html>

Здесь у нас меню располагается снизу от текста, но с помощью свойств left, top, right, bottom для селектора ul меню можно отображать сверху или справа от текста.

Автор: Влад Мержевич
Последнее изменение: 20.02.2024