Выпадающее меню с использованием только 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]
Создание трехуровневого выпадающего меню с помощью CSS в HTML
Теги: html html css
Используйте CSS, чтобы создать трехуровневое раскрывающееся меню (сначала горизонтальное, а затем вертикальное)
При использовании всплывающего меню: hover необходимо различать ul из двух раскрывающихся меню (например, используйте class = «», чтобы различать два ul), в дополнение к запуску В раскрывающемся списке выделяются два символа li.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Чистый CSS для создания трехуровневого раскрывающегося меню</title>
</head>
<!--CSS-->
<style>
*{
padding: 0px;
margin: 0px;
}
header{
background-color: #ff9900;
width: 100%;
height: 100px;
margin-bottom: 5px;
position: relative;
}
nav{
left:160px;
background-color: yellowgreen;
font-weight: bold;
bottom: 5px;
position: absolute;
}
ul{
list-style: none;
}
ul li{
float: left;
position: relative;
}
a{
height: 40px;
line-height: 40px;
width: 100px;
text-decoration: none;
display: block;
background-color: yellow;
text-align: center;
padding: 0px 10px;
border: 1px solid white;
}
a:hover{
background-color: green;
}
ul li ul{
position: absolute;
display: none;
}
ul li ul li{
float: none;
width: 100px;
position: relative;
}
.
first:hover .content1{
display: block;
}
ul li ul li ul{
position: absolute;
left: 121px; / * Зачем здесь использовать 121px вместо 101px * /
top: 0px;
display: none;
z-index: 1;
}
ul li ul li ul li{
float: none;
}
.second:hover .content2{
display: block;
}
</style>
<body>
<header>
<nav>
<ul>
<li><a href="#">Demons</a></li>
<li><a href="#">Faded</a></li>
<li><a href="#">Heartbeat</a>
<ul>
<li><a href="#">Good Time</a></li>
<li><a href="#">Only one</a></li>
<li><a href="#">Attention</a>
<ul>
<li><a href="#">Alone</a></li>
<li><a href="#">Skin</a></li>
<li><a href="#">Hero</a></li>
<li><a href="#">Monody</a></li>
<li><a href="#">Closer</a></li>
</ul>
</li>
<li><a href="#">Monsters</a></li>
<li><a href="#">Clarity</a></li>
</ul>
</li>
<li><a href="#">Arigato</a></li>
<li><a href="#">Stay</a></li>
</ul>
</nav>
</header>
</body>
</html>
Интеллектуальная рекомендация
VS2013 Настройте OpenCV2.

Этот метод прост и легко сделать. После повреждения OpenCV2.4.13 1. Добавьте переменные среды Пользовательская переменная, Новое, имя переменной openCV, значение D: \ opencv \ build Системная переменн…
Структура данных — Алгоритм поиска приоритета бренда (BFS)
Этот столбец записан.Алгоритм поиска родительского приоритета(BFS). (Полный код внизу) Соответствие глубокого приоритета алгоритм поиска Диаграмма хранения, сначала определитьбоковая сторона、вершина、Ф…
Обычно аннотирован в рамках SSM
Мибатис обычно аннотирован @Param — соответствующий параметр в интерфейсе на поля в аннотации @Select Получите количество ближайшего вставленного первичного ключа @Selectkey после @sinsertkey. Весна о…
Google Web Designer: графический инструмент для программирования HTML5
Компания Google запустила общедоступную бета-версию Web Designer, инструмента дизайна веб-сайтов и рекламы HTML5 для творческих профессионалов. В настоящее время Web Designer доступен для устройств Ma.
..
Как учетная запись службы WeChat каждый день отправляет сообщение?
Учетная запись подписки WeChat выдается один раз в день, а учетная запись службы WeChat — четыре раза в месяц. Это правило, установленное WeChat, не может быть изменено. Поэтому, когда многие люди обр…
Вам также может понравиться
TensorFlow VS TensorFlow Mobile VS TensorFlow Lite
Введение в TensorFlow TensorFlow — это фреймворк машинного обучения, и его общая архитектура в основном разделена на Client, Master и Worker. Развязанная архитектура делает его очень гибким, упрощая р…
Python3 — пусть объект поддерживает протокол управления контекстом
проблема Пусть объект поддерживает протокол управления контекстом, совместимый с помощью оператора. решение Для того, чтобы сделать объект совместимымwith Заявление, нужно реализовать__enter__() с__ex…
Tornado Note -Используйте торнадо для создания поддельной статистической системы посещаемости (семь)
В предыдущем блоге мы скорректировали часть структуры проекта и реализовали функцию посещаемости.
SpringBoot004
Swagger Framework Опишите и протестируйте интерфейс API, чтобы автоматически генерировать документ интерфейса API. Добавить зависимость 2. Конфигурация Добавьте новый файл Application.yml в каталоге р…
Когда flask-migrate выполняет обновление, в таблице данных есть ошибка: 1050, «Table’xxxx ‘уже существует»
Экологический фон Недавно я пишу веб-проект flask. База данных использует базу данных mysql8.0, а метод подключения к базе данных использует метод сопоставления flask-sqlalchemy. Разместите свое собст…
Styling CSS раскрывающееся меню при наведении курсора
TL;DR — раскрывающееся меню CSS относится к меню, которое скрывает несколько элементов или отображает дополнительную информацию. Этот контент обычно появляется при наведении курсора мыши.
Наведите курсор на меня
Это выпадающий текст!
Beautiful Travel Picture
Содержание
- 1.
Раскрывающееся меню CSS: основные советы - 2. Основное раскрывающееся меню
- 3. Добавление ссылок
- 4. Выравнивание содержимого по правому краю
- 5. Раскрывающееся меню CSS: полезные советы
Раскрывающееся меню CSS: основные советы
- Раскрывающееся меню CSS скрывает содержимое или параметры до тех пор, пока не произойдет определенное событие (обычно когда срабатывает
:hover). - HTML создает основную структуру , а CSS добавляет основные свойства к стилю кнопки или текста в виде раскрывающегося меню.
- Раскрывающийся список меню являются общими для добавления навигационных кнопок .
Выпадающее меню CSS означает, что вы создаете переключаемое меню в основном с помощью CSS и только нескольких элементов HTML.
Взгляните на этот пример кода, показывающий процесс создания раскрывающегося меню:
Пример
.drop { положение: родственник; отображение: встроенный блок; } .drop-контент { положение: абсолютное; цвет фона: #8842d5; минимальная ширина: 150 пикселей; отступ: 15 пикселей; z-индекс: 1; дисплей: нет; } .drop: hover .drop-content { дисплей: блок; }
Попробуйте живое обучение на Udacity
- Первым шагом является создание HTML-элемента , который будет изначально видимым элементом в раскрывающемся меню. Например, может показать скрытых элементов , как только вы наведете на него курсор.
- Затем необходимо добавить содержимое, которое выпадающее меню скрывает . Вы делаете это, заключая скрытые элементы в.
дисплей: встроенный блокпозиций содержание.имеетотносительную позицию, чтобы убедиться, что скрытое содержимое отображается на ниже видимого элемента.
- Необходимо включить
position: absoluteиdisplay: noneдля поля содержимого, чтобы гарантировать, что оно останется скрытым до наведения.- Вы можете добавить свойства CSS для выпадающего меню: изменить фон, отступы, ширину или шрифты.
- Наконец, мы добавляем
:hoverselector todisplay: blockдля отображения скрытого содержимого при наведении курсора мыши на видимый элемент.Примечание: overflow:auto включает прокрутку скрытого меню на небольших экранах.
Pros
- Простой дизайн (без лишней информации)
- Качественные курсы (даже бесплатные)
- Разнообразие функций
Основные функции
- Программы NanodeGree
- Подходящие для предприятий
- Платные сертификаты о завершении
Эксклюзив: 75% скидка
- .
о своих пользователях
Основные характеристики
- Большое разнообразие курсов
- 30-дневная политика возврата средств
- Бесплатные сертификаты об окончании
AS LOW AS 12.99$
Pros
- Great user experience
- Offers quality content
- Very transparent with their pricing
Main Features
- Free certificates of completion
- Focused on data научные навыки
- Гибкий график обучения
СКИДКА 75%
Выпадающее меню CSS со ссылками может служить навигационными меню для веб-сайтов.
Пример
.drop_btn { /* Это стилизация кнопки раскрывающегося списка */ цвет фона: #8842d5; белый цвет; отступ: 15 пикселей; размер шрифта: 18 пикселей; граница: нет; курсор: указатель; } .
уронить {
отображение: встроенный блок;
положение: родственник;
}
.drop-content { /* Для оформления самого контента */
цвет фона: белый;
минимальная ширина: 150 пикселей;
дисплей: нет;
положение: абсолютное;
}
.drop-content a { /* Для оформления ссылок внутри контента */
черный цвет;
отступ: 15 пикселей;
текстовое оформление: нет;
дисплей: блок;
}
.drop-content a:hover { /* Изменяем цвет выпадающих ссылок при наведении на них */
цвет фона: светло-серый;
}
.drop:hover .drop-content { /* Показывает список выпадающего меню при наведении */
дисплей: блок;
}
.drop:hover .drop_btn { /* Также меняет цвет кнопки раскрывающегося списка при наведении курсора мыши */
цвет фона: #7300ff;
}
Попробуйте живое обучение на Udacity
Вы создаете этот тип меню, выполняя те же действия, что и в предыдущем разделе. Однако вместо текстового поля у вас есть элементы привязки, которые указывают на URL-адреса.
Примечание: чтобы сделать ссылку более подходящей для раскрывающегося меню CSS, вам нужно применить украшение текста к удалить по умолчанию подчеркнуть .

Выровнять содержимое по правому краю
Можно сделать так, чтобы содержимое раскрывающегося меню CSS появлялось справа видимого элемента, а не слева по умолчанию, используйте выравнивание текста: по правому краю.
Пример
.drop-content { справа: 0; }Попробуйте живое обучение на Udacity
- Вы можете заменить
:hoverна другие опции . Например, JavaScript onclick заставляет содержимое меню появляться после того, как пользователи нажимают на видимом элементе .
Создать раскрывающееся меню CSS
- Необходимые знания: Основной HTML, промежуточный CSS
- Требуется: Текстовый редактор, устройства и/или эмуляторы по своему усмотрению
- Время проекта: 30 минут
- .
лучший способ оптимизировать навигацию для мобильных устройств — это очень сложно. Наше сообщество придумало множество различных подходов к решению этой проблемы, каждый из которых имеет свои плюсы и минусы.В прошлом я часто выступал за преобразование традиционной навигации на основе списка в select для мобильных устройств (см. пример ниже). Это простая концепция, которую легко реализовать, и мне нравится элегантность подхода, но тот факт, что вам нужно полагаться на JavaScript (откроется в новой вкладке), чтобы сделать его пригодным для использования, меня никогда не устраивал. Будучи ярым сторонником прогрессивного улучшения, я знал, что должен быть лучший способ.
Навигация на основе выбора на Retreats4Geeks.com(открывается в новой вкладке)
Я всегда был очарован выпадающими меню на чистом CSS, но они традиционно полагались на :hover . А наведение, как вы знаете, не имеет значения в сенсорных сценариях, так что это казалось тупиком.
Но потом меня осенило: :target было ответом на мои молитвы.Как вы, наверное, знаете, селектор целевого псевдокласса ( :target ) позволяет применять стили к элементам, на которые ссылается идентификатор фрагмента URL-адреса. Например:
http://website.tld/my-page/#content
В этом URL-адресе идентификатор фрагмента — «content», что заставит браузер прокручивать элемент с идентификатором «content в поле зрения. Очень просто. Затем мы можем применить стили к этому элементу, когда он выбран, используя :target :
:target {
Элемент, выделенный с помощью :target
background: #F6FD86;
}Когда Колледж Николса обратился в мою компанию с просьбой изменить дизайн их микросайта для будущих студентов, проект предоставил прекрасную возможность проверить мою теорию о : цель .
Микросайт на самом деле состоит всего из двух страниц — формы для сбора информации о будущей ученице и страницы благодарности, на которой собрана актуальная информация о программах Колледжа Николс на основе ее ответов, — но он включает в себя множество навигационных ссылок, которые помогут ей что-то сделать.
например, запланировать визит, начать процесс подачи заявления или проложить маршрут до школы. В дополнение к этим важным навигационным элементам на сайте также есть коллекция навигационных ссылок, которые обеспечивают доступ к большему количеству того, что я бы назвал «изюминкой» школы.Было много жонглирования, но мы начали с контента, естественно, организовав страницу таким образом, чтобы пользователи имели немедленный доступ к материалам, которые они на самом деле могли прочитать и/или изучить, прежде чем предоставлять им какую-либо навигацию:
- Баннер сайта
- Контент
- Призывы к действию
- Механизмы связи
- Ссылки на определенные школьные страницы
- Социальные сети
- Поиск
- Авторское право и т. д.
08 - Учебники по Illustrator (открывается в новой вкладке): потрясающие идеи, которые стоит попробовать сегодня!
- Прекрасные примеры каракулей (открывается в новой вкладке)
- Блестящий учебник по WordPress (открывается в новой вкладке) выбор
и идея представления контента на переднем плане, а затем позволять пользователю поворачиваться оттуда. Этот подход, основанный на содержании, привел к созданию нашего базового макета без медиа-запросов, ориентированного на обычные телефоны.
Первый контент в Opera Mini
Как мы все прекрасно понимаем, на устройствах с маленькими экранами недвижимое имущество имеет большое значение, поэтому мы постоянно искали возможности упростить работу для наших пользователей. Поскольку смартфоны, как правило, имеют лучшую поддержку CSS, чем обычные телефоны, мы решили спрятать менее важные ссылки за значком меню, открывая их только при нажатии, очень похоже на старые выпадающие меню CSS. Это распространенный шаблон дизайна в мобильном Интернете, но каждая реализация, которую я видел до сих пор, требовала JavaScript. Я хотел посмотреть, смогу ли я создать аналогичный опыт, используя только CSS (и не прибегая к хакам, связанным со скрытым элементом управления формой).
Дизайн выпадающего меню для goto.nichols.eduЯ пройдусь по CSS, но сначала я должен отметить, что следующие стили были помещены в таблицу стилей, предназначенную для устройств средней ширины, начиная с 19,375 ems. Большинство этих правил были спрятаны в дополнительный медиа-запрос внутри этой таблицы стилей, что ограничивало их применение шириной менее 46 ems (что было достаточно, чтобы поддерживать альтернативный макет для этой конкретной навигации).
Этот метод изоляции гарантирует, что правила не «вытекают» без необходимости в альтернативные макеты.@media screen and (max-width:46em) {
/* Правила здесь */
}02. Давайте покопаемся в
Первым шагом было применение стилей для перемещения навигации вверх страницы:
#nav {
margin: 0;
позиция: абсолютная;
верх: 0;
справа: 0;
слева: 0;
z-индекс: 1000;
}Примечание. Я удалил ненужные стили, чтобы вы могли сосредоточиться на важных элементах.
Затем я настроил ссылки так, чтобы они выглядели свернутыми, за исключением случаев, когда навигация была текущей целью:
#nav a {
border-bottom-width: 0;
переполнение: скрыто;
высота: 0;
высота строки: 0;
заполнение: 0 1em;
}
#nav:target {
border-bottom-width: 1px;
высота строки: 3em;
высота: 3см;
}При наличии этих правил я мог бы вручную манипулировать URL-адресом, чтобы открывать и закрывать меню, но это не является разумным требованием в реальном сценарии.
Мне нужно было создать ссылку, которая будет нацелена на список навигации, но я хотел сделать это, не добавляя лишних вещей в документ. В конце концов, нет смысла размещать элемент на странице, если он полезен только в одном сценарии. К счастью, старый резерв идеально подходил для этой задачи.03. «Перейти к спасению»
На заре существования Интернета мы часто использовали ссылки «перейти к содержимому», чтобы наши пользователи могли пропустить навигацию по сайту и перейти к основной части страницы. . При подходе, ориентированном на контент, ссылка «перейти к навигации» одинаково полезна для предоставления пользователям прямого доступа к навигации без необходимости размещать все это в верхней части страницы. Самое замечательное в ссылках «перейти к» заключается в том, что они работают, манипулируя идентификатором фрагмента URL-адреса и, таким образом, позволяя нам использовать : цель . Вуаля!
Сначала я добавил ссылку «Перейти к» вверху страницы:
<-- Logo -->
Навигация по сайтуЗатем я сделал его похожим на маленькую кнопку меню в правом верхнем углу нашего дизайна:
#jump {
background: #000 url(/c/i/nav.
png) 50% 50% неповторяемость;
граница: 1px сплошная #8b8b8b;
ширина границы: 0 0 1px 1px;
курсор: указатель;
дисплей: блок;
заполнение: 0;
высота: 53px;
ширина: 53 пикселя;
отступ текста: -999em;
позиция: абсолютная;
справа: 0;
верх: 0;
}Стоит отметить, что эта ссылка полезна даже для обычных телефонов, так как позволяет сразу перейти к навигации. (Вы можете увидеть этот простой подход, используемый в Contents Magazine и Bagcheck. Плюсы и минусы см. в обзоре схемы мобильной навигации Брэда Фроста.)
С помощью кнопки-переключателя у меня был отличный способ сделать так, чтобы навигация появлялась, но не было возможности заставить ее снова исчезнуть.
После некоторого размышления над этой проблемой меня осенило до смешного простое решение: включить ссылку «назад к содержанию» в конце списка навигации. Если щелкнуть эту ссылку, #nav перестанет быть целью, и список рухнет.

Достаточно просто, но это решило только часть проблемы. Мы не хотим, чтобы пользователю приходилось просматривать список, чтобы найти ссылку, позволяющую закрыть раскрывающееся меню; вместо этого мы хотим, чтобы он вел себя так, как ожидает пользователь: нажатие или щелчок за пределами области раскрывающегося меню должно снова свернуть навигацию. К счастью, с небольшим жонглированием z-index и умным позиционированием можно разместить ссылку под другими элементами навигации и расширить ее, чтобы заполнить оставшуюся часть экрана (невидимо, конечно). Вот пример соответствующих правил стиля:
#jump {
/* убедитесь, что кнопка меню находится сверху */
z-index: 1001;
}
#nav {
/* навигация находится за кнопкой меню */
z-index: 1000;
}
#nav:target {
/* если не отображается */
z-index: 1001;
}
#nav:target a {
/* сделать навигационные ссылки выше на уровень */
position: relative;
z-индекс: 1;
}
#back {
/* установить контекст позиционирования для ближнего */
position: relative;
}
#back a {
/* превратить ссылку в призрак */
background: Transparent;
граница: 0;
отступ текста: -999em;
/* Заполнить экран */
position: absolute;
верх: -101em;
низ: -101em;
слева: 0;
справа: 0;
/* убедитесь, что он находится за другими ссылками */
z-index: 0;
}После этого меню стало полностью функциональным.
Окончательное выпадающее меню расширено. Невидимая ссылка «наверх» была окрашена, чтобы показать, как она вписывается в общий макет.
Это просто нуждалось в небольшой доработке.04. Уборка номеров
Чтобы улучшить внешний вид интерфейса, я решил добавить простой переход к ссылкам, позволяющий им расти вертикально при выборе цели навигации:
#nav:target a {
— moz-переход: высота 0,25 с, высота строки 0,25 с;
-ms-transition: высота 0,25 с, высота строки 0,25 с;
-o-transition: высота 0,25 с, высота строки 0,25 с;
-webkit-transition: высота 0,25 с, высота строки 0,25 с;
переход: высота 0,25 с, высота строки 0,25 с;
}С добавлением этого небольшого перехода навигация работала прекрасно, но я все еще немного беспокоился о возможном искажении стиля. Конечно, если браузер поддерживает медиа-запросы, он, вероятно, поддерживает :target , но на всякий случай я решил предварять каждое соответствующее правило стиля body:not(:target) (что будет сопоставляться только в том случае, если браузер поддерживает выбор цели).
Вот пример:body:not(:target) #nav {
/* эти стили применяются, только если :target и :not равны
понял (и тело, конечно, не предназначено) */
}И вот оно: простое прогрессивно улучшенное выпадающее меню CSS, которое прекрасно работает как часть адаптивного дизайна. Я надеюсь, что вы найдете этот подход таким же удобным, как и я.
Аарон Густафсон (открывается в новой вкладке) — основатель и главный консультант Easy! Designs, консультации по веб-разработке. Он также является менеджером группы проекта веб-стандартов (WaSP), приглашенным экспертом в Альянс открытого веб-образования W3C, спикером и автором.
Нравится? Прочтите это!
Что вы думаете о выпадающих меню — хорошая идея или ненужный беспорядок? Дайте нам знать в комментариях ниже!
Спасибо, что прочитали 5 статей в этом месяце* Присоединяйтесь, чтобы получить неограниченный доступ
Наслаждайтесь своим первым месяцем всего за 1 фунт стерлингов / 1 доллар США / 1 евро
У вас уже есть учетная запись? Войдите здесь
*Читайте 5 бесплатных статей в месяц без подписки
Присоединяйтесь и получите неограниченный доступ
Попробуйте первый месяц всего за 1 фунт стерлингов / 1 доллар США / 1 евро
У вас уже есть аккаунт? Войдите здесь
Команда Creative Bloq состоит из группы поклонников дизайна и изменилась и развилась с момента основания Creative Bloq в 2012 году.



drop {
положение: родственник;
отображение: встроенный блок;
}
.drop-контент {
положение: абсолютное;
цвет фона: #8842d5;
минимальная ширина: 150 пикселей;
отступ: 15 пикселей;
z-индекс: 1;
дисплей: нет;
}
.drop: hover .drop-content {
дисплей: блок;
}