Недавно я делал небольшие изменения на своем сайте , когда я вновь обнаружил меню гамбургера, которое я сделал для него. В нем нет ничего особенного, просто меню, которое при небольшом разрешении сжимается в скрытое вертикальное меню, которое можно показать или скрыть нажатием кнопки. Самое интересное, что оно сделано только с помощью HTML и CSS.
Я помню, что когда я его создавал, я не смог найти в интернете полного примера того, как этого добиться, и что это предполагало много проб и ошибок для достижения желаемого результата. Поэтому я извлек код меню и превратил его в упрощенный пример.
Когда я начинал этот проект, у меня было несколько требований, которым он должен соответствовать:
Проект состоит из следующих шагов:
Меню - это, в конечном счете, список ссылок, используемых для навигации, поэтому мы начнем с него:
<nav> <!-- Always visible items in the nav bar --> <ul> <li> <a href="https://threkk.com">threkk.com</a> </li> </ul> <!-- The collapsable menu --> <ul> <li><a href='https://mastodon.social/@threkk'>Mastodon</a></li> <li><a href='https://twitter.com/threkk'>Twitter</a></li> <li><a href='https://github.com/threkk'>Github</a></li> </ul> </nav>
Этот список - практически весь HTML, который мы будем использовать для всего меню, остальное - магия CSS.
Эта часть проста, с небольшим количеством CSS мы готовы. Вам решать, что будет выглядеть красиво:
nav { background-color: SeaGreen; color: snow; display: flex; justify-content: space-between; } nav ul { /* Make the markers disappear */ list-style-type: none; } nav ul li { /* Puts the elements in a single line */ display: inline-flex; margin: 0.3em 1em; }
Мы закончили с этой частью и не будем вносить в нее никаких изменений.
Используя медиа-запросы, мы ограничиваем следующие правила только маленькими разрешениями. Вы можете поиграть с используемым значением в зависимости от того, хотите ли вы, например, считать планшеты "маленькими устройствами".
@media (max-width: 576px) { nav { flex-direction: row; flex-wrap: wrap; margin-left: 0; margin-right: 0; } /* Because we are in mobile mode, we want to display it as a vertical list */ nav ul { display: block; } /* We have two lists: the first one are the always visibile items in the menu bar. The second one is the one that will be hidden */ nav ul:last-child { width: 100%; flex-basis: 100%; } nav ul li { margin-bottom: 0; width: 100%; text-align: right; padding: 0.5em; } }
Наконец, самая интересная часть. Вся магия здесь: если флажок не отмечен, то соседний список не отображается.
input[type='checkbox']:not(:checked)+ul { display: none; }
Сначала мы добавим флажок с меткой в наш HTML.
<nav> <!-- Always visible items in the nav bar --> <ul> <li> <a href="https://threkk.com">threkk.com</a> </li> </ul> <!-- The hamburger menu --> <label for='menu' tabindex="0"> 🍔 </label> <input id='menu' type='checkbox' /> <!-- The collapsable menu --> <ul> <li><a href='https://mastodon.social/@threkk'>Mastodon</a></li> <li><a href='https://twitter.com/threkk'>Twitter</a></li> <li><a href='https://github.com/threkk'>Github</a></li> </ul> </nav>
Флажок и метка будут скрыты на больших экранах, и их значение не будет иметь значения.
nav input[type='checkbox'], nav label { display: none; }
Но в небольших разрешениях мы отображаем метку, а флажок оставляем скрытым в эстетических целях.
/* Stlying the menu icon, the checkbox stays hidden */ nav label { text-align: right; display: block; padding: 0.5em; line-height: 1.6em; align-self: center; }
И вуаля. Вот и все. Вы можете увидеть полный пример в действии здесь , и вы можете проверить полный исходный код на GitHub .
Вам понравился этот пост? Дайте мне знать на Mastodon или Twitter!
20.08.2023 18:21
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".
20.08.2023 17:46
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
19.08.2023 18:39
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.
19.08.2023 17:22
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!
18.08.2023 20:33
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.
14.08.2023 14:49
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.