Выпадающее меню с использованием только CSS и недокументированных возможностей элемента флажка
В этом уроке мы рассмотрим создание выпадающего меню на чистом CSS. Этот способ основан на применении элемента HTML флажка и интересном использовании классов и селекторов CSS без единой строки JavaScript. Демонстрацию работы этого способа и весь нужный код можно увидеть ниже. Также можно скачать полный исходный код по ссылке в конце урока.
Разметка
Структура HTML выглядит следующим образом. Важно отметить, что элемент ввода должен располагаться первым, до элементов подписи и ненумерованного списка. Позже, когда мы будем разбирать код CSS, станет понятно, почему.
<div>
<input type="checkbox">
<label for="checkbox_toggle">Click to Expand</label>
<ul>
<li><a href="#">Link One</a></li>
<li><a href="#">Link Two</a></li>
<li><a href="#">Link Three</a></li>
<li><a href="#">Link Four</a></li>
</ul>
</div>Как Вы видите, здесь нет ничего сложного, все элементы HTML обычные, широко используемые:
- В блочном элементе находится все остальное.

- Элемент ввода типа флажок нужен из-за его возможности быть установленным или неустановленным. Он будет спрятан все время.
- Элемент подписи будет использоваться для переключения состояния элемента ввода и вызова выпадающего меню.
- Элемент ненумерованного списка — это просто список, который нужно сделать видимым, когда развернуто выпадающее меню. Это может быть и любой другой элемент.
Недокументированные возможности элемента флажка
Нам нужен элемент флажка только ради его установленного состояния, которому можно задать стили с помощью псевдокласса :checked. Установка и снятие флажка делается посредством нажатия на элемент подписи, что является обычной функцией браузера. Сначала спрячем элемент флажка:
input[type=checkbox]{
display: none;
}Еще спрячем по умолчанию элемент ненумерованного списка — это выпадающее меню, которое должно быть видно, только когда оно развернуто:
ul{
display: none;
}А вот и недокументированная возможность.
Если объединить псевдокласс :checked с родственным селектором ~, можно изменять свойства CSS элементов, следующих за элементом флажка. Это причина, по которой нужно, чтобы элемент флажка располагался выше других элементов в дереве объектов документа.
input[type=checkbox]:checked ~ ul {
display: block
}Код выше покажет ненумерованный список, только если установлен флажок. Так как у элемента ввода типа флажок возможно только два состояния, он отлично подходит для переключения элементов между развернутым и спрятанным состояниями.
Надеемся, вам понравился этот урок.
Автор урока Danny Markov
Перевод — Дежурка
Смотрите также:
- Меню для сайта рок-группы: хаотичное расположение с использованием трансформаций CSS
- Простое анимированное горизонтальное меню с использованием HTML5 и CSS
- Создание меню в ромбовидной сетке с использованием CSS
- Опубликовано в css, ноября 3, 2016
- Метки: css, css3, верстка, урок css, урок css3, урок верстка
Tweet
�
Комментарии
[an error occurred while processing the directive]Раскрывающиеся списки • Pico.
css Раскрывающиеся списки состоят из < деталей роли = "список" > в качестве оболочки и < сводки > и < ul > как прямые дети .
Для согласованности стиля с элементами формы выпадающие списки по умолчанию имеют стиль
Раскрывающийся список- Действие
- Другое действие
- Что-то еще здесь
< детали роль = "список" >
< резюме aria-haspopup = "список" >Dropdown резюме >
< ul роль = "список" >
< li >< a >Действие a > li >
< li >< a >Другое действие a > ли >
< li >< a >Что-то еще здесь a > li >
ул >
подробности >
< выберите >
< опция значение = "" отключено выбрано >Выбрать опция >
< опция >… опция >
выберите >
< резюме роль = "кнопка" > превращает раскрывающийся список в кнопку.
- Действие
- Другое действие
- Что-то еще здесь
- Действие
- Другое действие
- Что-то еще здесь
- Действие
- Другое action
- Что-то еще здесь
< детали роль = "список" >
< резюме aria-haspopup = "список" роль = "кнопка" >
Выпадающий список как кнопка 1
резюме >
< ul роль = "список" >
< li >< a >Действие a > li >
< li >< a >Другое действие a > ли >
< li >< a >Что-то еще здесь a > li >
ул >
подробности >
< детали роль = "список" >
< сводка aria-haspopup = "список" роль = "кнопка" класс = "вторичный" >
Выпадающий список как кнопка 2
резюме >
< ul роль = "список" >
< li >< a >Действие a > li >
< li >< a >Другое действие a > li >
< li >< a >Что-то еще здесь a > li >
ул >
подробности >
< детали роль = "список" >
< сводка aria-haspopup = "список" роль = "кнопка" класс = "контраст" >
Выпадающий список как кнопка 3
резюме >
< ul роль = "список" >
< li >< a >Действие a > li >
< ли >< a >Другое действие a > li >
< li >< a >Что-то еще здесь a > li >
ул >
подробности >
Выпадающие списки могут использоваться как пользовательские выборки с вводом < тип = "радио" > или < ввод тип = " флажок"
- Маленький
- Средний
- Большой
- Банан
- Арбуз
- Яблоко
< детали роль = "список" >
< резюме aria-haspopup = "список" >Dropdown резюме >
< ul роль = "список" >
< ли >
< этикетка для = "маленький" >
< ввод тип = "радио" идентификатор = "маленький" имя = "размер" значение = 90 008 "маленький" >
Маленький
метка >
ли >
< ли >
< этикетка для = "средний" >
< ввод тип = "радио" идентификатор = "средний" имя = "размер" значение = "средний" >
Середина
метка >
ли >
< ли >
< этикетка для = "большой" >
< ввод тип = "радио" идентификатор = "большой" имя = "размер" значение = "большой" >
Большой
метка >
ли >
ул >
подробности
>
< детали роль = "список" >
< резюме aria-haspopup = "список" >Dropdown резюме >
< ul роль = "список" >
< ли >
< метка >
< ввод тип = "флажок" >
Банан
метка >
ли >
< ли >
< метка >
< ввод тип = "флажок" >
Арбуз
метка >
ли >
< ли >
< метка >
< ввод тип = "флажок" >
Яблоко
метка >
ли >
ул >
подробности >
Выпадающие списки могут использоваться внутри
Пример с раскрывающимся списком в качестве ссылки:
< 900 04 нав >
< ул >
< li >< li >Марка li > li >
ул >
< ул >
< li >< a href = "#" >Ссылка a > li >
< ли >
< детали роль = "список" каталог = "rtl" >
< резюме aria-haspopup = "список" роль = "ссылка" >Раскрывающийся список сводка >
< ul роль = "список" >
< li >< a >Действие a > li >
< li >< a >Другое действие a > li >
< li >< a >Что-то еще здесь a > ли >
ул >
подробности >
ли >
ул >
nav > Пример с раскрывающимся списком по умолчанию и раскрывающимся списком в виде кнопки:
< nav >
< ул >
< ли >
< детали роль = "список" >
< резюме aria-haspopup = "список" >Раскрывающийся список сводка >
< ul роль = "список" >
< li >< a >Действие a > li >
< li >< a >Другое действие a > li >
< li >< a >Что-то еще здесь a > li >
ул >
подробности >
ли >
< ли >
< детали роль = "список" >
< резюме aria-haspopup = "список" роль = "кнопка" >Dropdown резюме >
< ul роль = "список" >
< li >< a >Действие a > ли >
< li >< a >Другое действие a > li >
< li >< a >Что-то еще здесь a > li >
ул >
подробности >
ли >
ул >
nav > Вы также можете использовать < li роль = "список" > в качестве вложенной оболочки для отображения списка в виде раскрывающегося списка.
ℹ️ Это экспериментальный синтаксис. В этой версии выпадающее меню срабатывает при наведении.
< навигация >
< ул >
< li >< li >Марка li > li >
ул >
< ул >
< li >< a href = "#" >Ссылка a > li >
< li >< a href = "#" >Ссылка a > li >
< li роль = "список" каталог = "rtl" >
< a href = "#" aria-haspopup = "listbox" >Dropdown a >
< ул роль = "список" >
< li >< a >Действие a > li >
< li >< a >Другое действие a > li >
< li >< a >Что-то еще здесь a > li >
ул >
ли >
ул >
nav > Код лицензирован MIT
Z-индекс CSS и раскрывающееся меню | от Otter Cheek
Z-индекс CSS и выпадающие меню | Оттер Чик | Medium 2 минуты чтения·
28 апреля 2021 г.
Я пишу это, потому что я спустился в ад поиска в Интернете, чтобы найти это решение.
Проблема заключалась в том, что мои выпадающие меню отставали от таких элементов, как баннер на главной странице. Большинство из нас, сторонников традиционного дизайна, хотят, чтобы выпадающие списки всегда выскакивали на передний план. Это не может быть сложно, верно? Что ж, решение было простым, хотя проблемы с его поиском сделали его в 100 раз сложнее: просто добавьте z-index: 9999 в ваш CSS. Хорошо, это не так просто; вам также необходимо соединить z-index с элементом position, например, position: fixed .
В других решениях мне предписывалось помещать числа z-индекса во все мои позиционированные элементы, где больший z-индекс соответствует более переднему размещению. Но единственным элементом, который должен был накладываться на другие в моем случае, было выпадающее меню, и ошеломляющие z-индексы (-10, 15, 20, 30…) для всех моих элементов просто создали запутанный беспорядок в моем CSS, который также не т работать как задумано.
Кто-то умнее меня может понять это. Но сделать z-index 9999 был прекрасен. Это просто сработало. Панель меню — единственный элемент с z-индексом в моем файле CSS. Это не обязательно должно быть 9999. Подойдет любое большое число, но я не смог заставить его работать, не установив его очень большим.
Подробнее о z-index можно прочитать здесь и здесь.
Сад. Плохо. Выпадающий после объявления z-индекса.Z Index
Выпадающая строка меню
Панель меню
Автор Otter Cheek
0 Подписчики
Рекомендовано на Medium
The PyCoach
в
Искусственный угол
Вы используете ChatGPT неправильно! Вот как опередить 99% пользователей ChatGPT
Освойте ChatGPT, изучив технику быстрого доступа.
·7 мин чтения·17 мартаМихал Малевич
Существует ПЯТЬ уровней навыков пользовательского интерфейса.
Только уровень 4+ позволяет нанять вас.
·6 минут чтения·25 апреляСписки
Выбор персонала
317 историй·81 сохранение
Истории, которые помогут вам повысить свой уровень на работе
19 историй·40 сохранений
Самосовершенствование 101
20 историй·85 сохранений
Производительность 101
20 этажей·86 сохранений
Christina Sa
in
UX Planet
Пример использования UX-дизайна, благодаря которому меня наняли
Получить работу в области UX-дизайна непросто, но один конкретный пример помог мне выделиться из толпы.
Я разработал нетрадиционный… ·8 минут чтения·16 мартаChristie Tang
в
UX Collective
Адаптивные сетки и как их использовать
9 0922 Подробное объяснение для дизайнеров о том, как использовать сетки для адаптивного дизайна, и как все будет масштабироваться между контрольными точками.
·11 минут чтения·18 апреля 2019 г.Zulie Rane
в
Стартап
Если вы хотите стать творцом, удалите все (кроме двух) платформы социальных сетей
В октябре 2022 года, во время всего фиаско с Илоном Маском, я наконец-то удалил Твиттер со своего телефона. Примерно в то же время я также вышел из…
·8 мин. чтения·19 апреляChristine Vallaure
in
UX Collective
Почему дизайнеры должны перейти с px на rem — и как это сделать в Figma
Проектирование с учетом доступности.
·Чтение через 13 мин·18 окт. 2022 г.

