Создание адаптивного мобильного меню на CSS без JavaScript

На момент написания этой статьи более 54 процентов веб-трафика во всем мире приходится на мобильные устройства. Благодаря адаптивному дизайну, ориентированному на мобильные устройства, разработчики начинают с наименьшего размера экрана, а затем постепенно увеличивают масштаб, добавляя дополнительные функции и функциональные возможности для экранов большего размера. Полученные веб-страницы будут автоматически подстраиваться под размер окна браузера пользователя.

Однако, как бы ни было важно адаптивное меню для UX веб-сайта, нет необходимости создавать его на JavaScript. В этом руководстве будет рассмотрено, как создать адаптивное меню для мобильных устройств, используя только HTML и CSS.

Адаптивное мобильное меню только с помощью CSS

Существует множество методов создания адаптивных мобильных меню. Одной из распространенных практик является использование чистого CSS без единой строки JavaScript. Этот метод включает в себя использование простой структуры списка HTML для разработки меню ссылок, которые можно стилизовать и отображать по-разному в зависимости от размера экрана устройства.

В этом руководстве мы будем использовать CSS для создания адаптивного меню для мобильных устройств, планшетов и компьютеров:

Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

Для небольших экранов пользователь должен кликать на значок гамбургера, чтобы открыть пункты меню. На больших экранах элементы меню будут отображаться на панели навигации. В этом уроке мы создадим адаптивное меню, включая значок гамбургера, полностью из чистого HTML и CSS.

С помощью вашего любимого текстового редактора, например VS Code, создайте два файла в общей папке:

index.html для HTML-кода

style.css для кода CSS

Скопируйте путь к файлу index.html и вставьте его в адресную строку браузера, для просмотра приложения. Добавьте следующий код в файл index.html:

<html lang=»en»> <head> <meta charset=»UTF-8″> <meta http-equiv=»X-UA-Compatible» content=»IE=edge»> <meta name=»viewport» content=»width=device-width, initial-scale=1.0″> <!— App title —> <title>Responsive Pure CSS Menu</title> <!— Link CSS file —> <link rel=»stylesheet» href=»style.css»> </head> <body> <!— Navigation bar —> <header class=»header»> <!— Logo —> <a href=»#» class=»logo»>LR</a> <!— Hamburger icon —> <input class=»side-menu» type=»checkbox» id=»side-menu»/> <label class=»hamb» for=»side-menu»><span class=»hamb-line»></span></label> <!— Menu —> <nav class=»nav»> <ul class=»menu»> <li><a href=»#»>Gallery</a></li> <li><a href=»#»>Blog</a> </li> <li><a href=»#»>About</a></li> </ul> </nav> </header> <!— Main content —> <main> <article> <h1> Some content </h1> <p> More Content </p> </article> </main> </body> </html>

12345678910111213141516171819202122232425262728293031323334353637383940 <html lang=»en»><head>    <meta charset=»UTF-8″>    <meta http-equiv=»X-UA-Compatible» content=»IE=edge»>    <meta name=»viewport» content=»width=device-width, initial-scale=1.0″>    <!— App title —>    <title>Responsive Pure CSS Menu</title>    <!— Link CSS file —>    <link rel=»stylesheet» href=»style.css»></head><body>    <!— Navigation bar —>    <header class=»header»>        <!— Logo —>        <a href=»#» class=»logo»>LR</a>        <!— Hamburger icon —>        <input class=»side-menu» type=»checkbox» id=»side-menu»/>        <label class=»hamb» for=»side-menu»><span class=»hamb-line»></span></label>        <!— Menu —>        <nav class=»nav»>            <ul class=»menu»>                <li><a href=»#»>Gallery</a></li>                <li><a href=»#»>Blog</a> </li>                <li><a href=»#»>About</a></li>            </ul>        </nav>    </header>    <!— Main content —>    <main>        <article>            <h1>                Some content            </h1>            <p>                More Content            </p>        </article>    </main></body></html>

Этот код содержит структуру и содержимое веб-страницы. Он также включает ссылку на таблицу стилей CSS. Мы используем семантические теги header и main, чтобы отделить панель навигации от основного содержимого страницы.
Также, мы добавляем логотип, используя тег привязки <a>.

Наконец, создаем гамбургер-меню, используя хак checkbox. С помощью этой стратегии мы можем стилизовать меню в зависимости от того, выбран ли чекбокс.

Мы используем тег label для определения значка меню гамбургера. Тег input используется для условного отображения меню в зависимости от состояния чекбокса (класс side-menu).

Затем мы добавляем пункты меню в виде элементов списка ссылок li, в неупорядоченный список ul. Тег nav служит контейнером списка. Вот результат нашего HTML кода:

Добавление CSS

Мы будем использовать CSS для стилизации различных компонентов и функций пользовательского интерфейса:

стилизации содержимого и фона

стилизации заголовка и логотипа

стилизации меню навигации

стилизации меню гамбургера

стилизации значка переключаемого меню

добавления отзывчивости

Стилизация содержимого и фона

Добавим следующий код в файл style.css, чтобы настроить внешний вид содержимого HTML:

CSS /* Theming */ @import url(«https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap»); /* import font */ :root{ —white: #f9f9f9; —black: #36383F; —gray: #85888C; } /* variables*/ /* Reset */ *{ margin: 0; padding: 0; box-sizing: border-box; } body{ background-color: var(—white); font-family: «Poppins», sans-serif; } a{ text-decoration: none; } ul{ list-style: none; }

12345678910111213141516171819202122232425 /* Theming */@import url(«https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap»); /* import font */ :root{    —white: #f9f9f9;    —black: #36383F;    —gray: #85888C;} /* variables*/ /* Reset */*{    margin: 0;    padding: 0;    box-sizing: border-box;}body{    background-color: var(—white);    font-family: «Poppins», sans-serif;}a{    text-decoration: none;}ul{    list-style: none;}

Этот код импортирует шрифт Google Poppins для использования в приложении. Мы определяем переменные CSS для цветов, которые будут использоваться в приложении. Затем мы используем сброс CSS, чтобы удалить настройки браузера по умолчанию для margin, padding, box-sizing, text-decoration и list-style.

Мы также указываем background-color white и font-family Poppins для содержимого страницы. Вот результат, отображающий стилизованное содержимое и фон:

Стилизация заголовка и логотипа

CSS /* Header */ .header{ background-color: var(—black); box-shadow: 1px 1px 5px 0px var(—gray); position: sticky; top: 0; width: 100%; } /* Logo */ .logo{ display: inline-block; color: var(—white); font-size: 60px; margin-left: 10px; }

123456789101112131415 /* Header */.header{    background-color: var(—black);    box-shadow: 1px 1px 5px 0px var(—gray);    position: sticky;    top: 0;    width: 100%;}/* Logo */.logo{    display: inline-block;    color: var(—white);    font-size: 60px;    margin-left: 10px;}

Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

Этот код добавляет заголовку черный background-color и серый box-shadow. Чтобы заголовок оставался в верхней части экрана во время прокрутки, мы указываем фиксированную позицию и нулевое смещение сверху. Мы также настраиваем заголовок так, чтобы он растягивался по всей ширине устройства.

Стилизуем логотип, указав color, font-size и left-margin. Чтобы не путать с отступами, [margin] — это область вокруг логотипа, которая отделяет его от других элементов. Вот результат, отображающий стилизованный заголовок и логотип:

Стилизация меню навигации

CSS /* Nav menu */ .nav{ width: 100%; height: 100%; position: fixed; background-color: var(—black); overflow: hidden; } .menu a{ display: block; padding: 30px; color: var(—white); } .menu a:hover{ background-color: var(—gray); } .nav{ max-height: 0; transition: max-height .5s ease-out; }

123456789101112131415161718192021 /* Nav menu */.nav{    width: 100%;    height: 100%;    position: fixed;    background-color: var(—black);    overflow: hidden; }.menu a{    display: block;    padding: 30px;    color: var(—white);}.menu a:hover{    background-color: var(—gray);}.nav{    max-height: 0;    transition: max-height .5s ease-out;}

В этом коде, для элемента навигации, мы устанавливаем свойствам width и height 100 процентнов, чтобы содержимое соответствовало размеру экрана. Затем мы указываем фиксированную позицию для наложения меню навигации поверх основного содержимого приложения. Мы также выбираем черный цвет фона для элемента навигации и указываем, что любое переполнение содержимого элемента навигации должно быть скрыто.

Для элементов ссылки меню мы указываем блочный формат отображения, добавляем отступы и цвет, а также меняем фоновый цвет с белого на серый при наведении.

Наконец, мы используем свойство CSS [transition] и max-height, равное нулю, чтобы скрыть элемент навигации по умолчанию, но показать его при нажатии на значок меню. Вот результат, отображающий стилизованное меню навигации:

Стилизация меню гамбургера

CSS /* Menu Icon */ .hamb{ cursor: pointer; float: right; padding: 40px 20px; }/* Style label tag */ .hamb-line { background: var(—white); display: block; height: 2px; position: relative; width: 24px; } /* Style span tag */ .hamb-line::before, .hamb-line::after{ background: var(—white); content: »; display: block; height: 100%; position: absolute; transition: all .2s ease-out; width: 100%; } .hamb-line::before{ top: 5px; } .hamb-line::after{ top: -5px; } .side-menu { display: none; } /* Hide checkbox */

123456789101112131415161718192021222324252627282930313233343536 /* Menu Icon */.hamb{    cursor: pointer;    float: right;    padding: 40px 20px;}/* Style label tag */ .hamb-line {    background: var(—white);    display: block;    height: 2px;    position: relative;    width: 24px; } /* Style span tag */ .hamb-line::before,.hamb-line::after{    background: var(—white);    content: »;    display: block;    height: 100%;    position: absolute;    transition: all .2s ease-out;    width: 100%;}.hamb-line::before{    top: 5px;}.hamb-line::after{    top: -5px;} .side-menu {    display: none;} /* Hide checkbox */

В коде мы указываем, что указатель cursor должен отображаться, когда пользователь взаимодействует с гамбургер-меню. Мы позиционируем элемент label справа и добавляем отступ. Затем стилизуем элемент span, чтобы создать три линии значков меню.

Мы используем псевдоэлементы CSS [::before] и [::after] для элемента span, чтобы определить три строки значков гамбургера. Селектор .hamb-line определяет центральную (или вторую) линию. .hamb-line::before и .hamb-line::after размещают первую и третью строки на 5 пикселей выше и ниже центральной линии соответственно.

Наконец, мы используем свойство display, чтобы скрыть чекбокс (.side-menu). Вот результат, отображающий стилизованное меню гамбургера:

Стилизация значка переключаемого меню

CSS /* Toggle menu icon */ .side-menu:checked ~ nav{ max-height: 100%; } .side-menu:checked ~ .hamb .hamb-line { background: transparent; } .side-menu:checked ~ .hamb .hamb-line::before { transform: rotate(-45deg); top:0; } .side-menu:checked ~ .hamb .hamb-line::after { transform: rotate(45deg); top:0; }

123456789101112131415 /* Toggle menu icon */.side-menu:checked ~ nav{    max-height: 100%;}.side-menu:checked ~ .hamb .hamb-line {    background: transparent;}.side-menu:checked ~ .hamb .hamb-line::before {    transform: rotate(-45deg);    top:0;}.side-menu:checked ~ .hamb .hamb-line::after {    transform: rotate(45deg);    top:0;}

Мы стилизуем значок меню гамбургера, чтобы изменить его внешний вид. Во-первых, указываем max-height элемента навигации когда чекбокс выбран (класс .side-menu:checked).

Затем мы следуем двухэтапному процессу, чтобы создать значок закрытия в форме «x». Во-первых, мы скрываем вторую строку значка гамбургера, установив для нее прозрачный фон. Затем мы поворачиваем первую и третью линии на -45 и 45 градусов соответственно, чтобы сформировать фигуру «x». Вот результат, отображающий переключаемое меню:

Добавление отзывчивости

Мы можем сделать приложение отзывчивым, используя медиа-запросы для условного включения свойств CSS. Другими словами, свойства внутри медиа-запроса будут применяться к веб-странице только тогда, когда выполняется набор условий.

CSS /* Responsiveness */ @media (min-width: 768px) { .nav{ max-height: none; top: 0; position: relative; float: right; width: fit-content; } .menu li{ float: left; } .menu a:hover{ background-color: transparent; color: var(—gray); } .hamb{ display: none; } }

12345678910111213141516171819202122 /* Responsiveness */@media (min-width: 768px) {    .nav{        max-height: none;        top: 0;        position: relative;        float: right;        width: fit-content;    }    .menu li{        float: left;    }    .menu a:hover{        background-color: transparent;        color: var(—gray);     }     .hamb{        display: none;    }}

В этом коде мы добавляем правило @media для условия когда минимальая ширина устройства 768 пикселей. Мы хотим, чтобы такие устройства отображали полное меню навигации, а не гамбургер-меню. Мы удаляем свойство max-height элемента nav, установив для него значение none.

Размещаем элемент навигации в правом верхнем углу экрана и указываем его ширину равной fit-content. Размещаем элементы списка меню слева от навигации. Также, указываем, что цвет фона должен быть прозрачным, а элементы списка меню должны быть серыми при наведении.

Наконец, мы используем свойство display, чтобы скрыть значок меню гамбургера. Вот полностью стилизованное приложение:

Это видео демонстрирует адаптивный пользовательский интерфейс приложения:

Заключение

В этом руководстве мы спроектировали и создали адаптивное меню для мобильных устройств, используя только HTML и CSS без JavaScript. Полный код, используемый в этой статье, доступен на GitHub.

Техника, используемая в этой статье, является лишь одним из многих методов, которые можно использовать для создания адаптивного мобильного меню. Поэкспериментировав с разными методами, вы сможете решить, какой из них вам больше нравится. Удачного кодирования!

Автор: Ivy Walobwa

Источник: webformyself.com

Comments (0)
Add Comment