Дизайн та розробка сайту

Як створити бургер меню з виїжджає панеллю на чистому CSS

Как создать бургер меню с выезжающей панелью на чистом CSS

Доброго вам дня.

Сьогодні буде простенька стаття про те, як зробити просте виїжджаюче меню без використання скриптів, тобто на чистому html + CSS. Даний урок буде корисний тим, хто верстає прості макети, хоче створити свій сайт і вивчає верстку. Звичайно ж, підійде і майстрам, що створюють теми на WordPress. Матеріал цікавий і відмінно підійде для створення простих меню або меню для мобільних пристроїв, яке з'являється на адаптивних сторінках.

Как создать бургер меню с выезжающей панелью на чистом CSS

Я використовував даний варіант кілька разів і ось недавно мені попався схожий варіант, але він був складнішим і з великою кількістю коду, тому я вирішив опублікувати статтю про свій варіант і поділиться цим 100% робочим методом з вами. Приклад того як працює все це можна подивитися натиснувши на кнопку нижче. Якщо це те що потрібно вам і ви хочете зробити виїжджаюче меню з лівого або правого боку без використання скриптів у себе на сайті, то давайте перейдемо до коду.





Перше що знадобиться - додати html розмітку. Це звичайне меню зроблене списком, але його особливість це checkbox. Звичайний чекбокс з label, які ми і перетворимо в кнопку, тобто бургер меню. Бургер меню, це зазвичай три смужки розташовані одна під одною, нагадуючи бургер. Тому меню і носить таку назву. Для відвідувачів сайтів і користувачів мобільних пристроїв даний вид кнопки звичний і люди інтуїтивно розуміють, що це кнопка меню. Якраз натискаючи на наш чекбокс у вигляді бургера і буде відбуватися поява панелі з пунктами меню.

В потрібне вам місце на сайті додайте html наступний код:

<div class="burger-menu">
    <input id="menu-toggle" type="checkbox" />
    <label class="menu-btn" for="menu-toggle">
      <span></span>
    </label>

    <ul class="menubox">
			<li><a class="menu-item" href="#">Home</a></li>
			<li><a class="menu-item" href="#">About us</a></li>
			<li><a class="menu-item" href="#">Blog</a></li>
			<li><a class="menu-item" href="#">Articles</a></li>
			<li><a class="menu-item" href="#">Contacts</a></li>
    </ul>
  </div>

Давайте я докладно розпишу що і як тут влаштовано і для чого кожен елемент

  • Спочатку йде головний блок-контейнер з класом burger-menu, усередині якого і розташовується наше меню і кнопка бургер. Можете задавати будь-який клас або взагалі вилучити всі меню і кнопку з контейнера. Він не обов'язковий. Він зроблений для зручності. Можливо вам він буде заважати. Наприклад, ви вирішите розмістити меню у вигляді UL списку в одному місці, а кнопку-чекбокс бургер меню в іншому.
  • Далі йде чекбокс з ID - menu-toggle, яке міняти не можна (можна, якщо ви розумієте що робити і аналогічно змініть в стилях CSS всі підв'язки до цього айді). Чекбокс буде ховатися але він і буде кнопкою, його ми модифікуємо.
  • Далі йде label з класом - menu-btn, міняти теж не потрібно, якщо для вас це не критично. Усередині label розташований span елемент, який в майбутньому буде смужками бургер меню. Зробимо це завдяки псевдоелементи before та after.
  • Після йде наше основне меню у вигляді ul списку з класом - menubox. Наш чекбокс, буде використовувати даний клас, щоб відкрити панель. Тут як вам зручно, маєте в своєму розпорядженні пункти вашого меню з посиланнями. Класи, порядок, структуру - робите як вам захочеться, у мене просто зроблено для прикладу - п'ять простих пунктів у вигляді посилань.

Як ви зрозуміли, суть методу в тому, що у нас є приховане меню за межами сторінки і звичайний чекбокс, стилізований під бургер меню. Коли ми натискаємо на чекбокс, ми задаємо нові параметри для нашої прихованої панелі / блоку який з'являється збоку. У прикладі він виїжджає зліва, можете поміняти і зробити справа.

Для початку, давайте додамо самі CSS стилі, щоб запрацювало, а вже потім зможете їх змінювати. Відкривайте свій файл стилів і додайте в нього наступний шматок коду:

Задаємо стилі нашому label і span всередині нього, щоб він став кнопкою у вигляді бургера.

.menu-btn{
  display: flex;
  align-items: center;
  position: absolute;
  top: 0;
  right:0;
  width: 26px;
  height: 26px;
  cursor: pointer;
  z-index: 1;
}

.menu-btn > span,
.menu-btn > span::before,
.menu-btn > span::after {
  display: block;
  position: absolute;
  width: 100%;
  height: 2px;
  background-color: #616161;
  transition-duration: .25s;
}
.menu-btn > span::before {
  content: '';
  top: -8px;
}
.menu-btn > span::after {
  content: '';
  top: 8px;
}

Далі задаємо стилі для нашого меню, тобто ul списку.

.menubox{
  display: block;
  position: fixed;
  visibility: hidden;
  top: 0;
  left: -100%;
  width: 300px;
  height: 100%;
  margin: 0;
  padding: 80px 0;
  list-style: none;
  background-color: #ECEFF1;
  box-shadow: 1px 0px 6px rgba(0, 0, 0, .2);
  transition-duration: .25s;
}

left: -100%; - в шостому рядку це і є розташування панелі меню зліва за межами сторінки. Якщо треба справа, змініть на right: -100%;.

Ну і мої стилі для пунктів меню. Тут можете задавати що хочете, свої, ці стилі не обов'язкові

.menu-item {
  display: block;
  padding: 12px 24px;
  color: #333;
  font-family: 'Roboto', sans-serif;
  font-size: 20px;
  font-weight: 600;
  text-decoration: none;
  transition-duration: .25s;
}
.menu-item:hover {
  background-color: #CFD8DC;
}

Тепер приховуємо стандартний чекбокс у вигляді галочки

#menu-toggle{
  opacity: 0;
}

Задаємо правила, що робити з нашим бургер меню, і самим меню, коли відбувається активаія чекбокса, тобто коли ви тиснете по ньому і по label. Одну смужку ми повертаємо, потім дві нижні піднімаємо вгору і теж повертаємо і в результаті з трьох смужок отримуємо хрестик. Так само робимо видимим наш прихований блок з пунктами меню.

#menu-toggle:checked ~ .menu-btn > span{
  transform: rotate(45deg);
}
#menu-toggle:checked ~ .menu-btn > span::before{
  top: 0;
  transform: rotate(0);
}
#menu-toggle:checked ~ .menu-btn > span::after{
  top: 0;
  transform: rotate(90deg);
}
#menu-toggle:checked ~ .menubox{
  visibility: visible;
  left: 0;
}

У передостанньому рядку, ми вказуємо, що панель з'явиться зліва на самому початку сторінки - left: 0; . Якщо хочете справа, то просто змініть на right: 0;.

Ну і весь код повністю, якщо ви не копіювали один за одним попередні відрізки.

.menu-btn{
  display: flex;
  align-items: center;
  position: absolute;
  top: 0;
  right:0;
  width: 26px;
  height: 26px;
  cursor: pointer;
  z-index: 1;
}

.menu-btn > span,
.menu-btn > span::before,
.menu-btn > span::after {
  display: block;
  position: absolute;
  width: 100%;
  height: 2px;
  background-color: #616161;
  transition-duration: .25s;
}
.menu-btn > span::before {
  content: '';
  top: -8px;
}
.menu-btn > span::after {
  content: '';
  top: 8px;
}

.menubox{
  display: block;
  position: fixed;
  visibility: hidden;
  top: 0;
  left: -100%;
  width: 300px;
  height: 100%;
  margin: 0;
  padding: 80px 0;
  list-style: none;
  background-color: #ECEFF1;
  box-shadow: 1px 0px 6px rgba(0, 0, 0, .2);
  transition-duration: .25s;
}

.menu-item {
  display: block;
  padding: 12px 24px;
  color: #333;
  font-family: 'Roboto', sans-serif;
  font-size: 20px;
  font-weight: 600;
  text-decoration: none;
  transition-duration: .25s;
}
.menu-item:hover {
  background-color: #CFD8DC;
}


#menu-toggle{
  opacity: 0;
}

#menu-toggle:checked ~ .menu-btn > span{
  transform: rotate(45deg);
}
#menu-toggle:checked ~ .menu-btn > span::before{
  top: 0;
  transform: rotate(0);
}
#menu-toggle:checked ~ .menu-btn > span::after{
  top: 0;
  transform: rotate(90deg);
}
#menu-toggle:checked ~ .menubox{
  visibility: visible;
  left: 0;
}

Якщо ви все зробили правильно і ніде не допустили помилку, то все повинно працювати так як у прикладі. Маю велику надію, що вам сподобалася стаття і ви скористалися нею. Якщо у вас виникли питання або проблеми, можете звернутися до мене або замовити послугу з доопрацювання вашого сайту. Контакти можете знайти в шапці або у підвалі сайту.

На цьому все, дякую за увагу. 🙂

Дизайн та розробка сайту

Back to top