• Страница 1 из 1
  • 1
Создать адаптивное меню для сайта и устройств
Kosten
Воскресенье, 16 Апреля 2017, 01:27 | Сообщение 1
Оффлайн
Администраторы
Сообщений:44490
Награды: 70
Сейчас редко можно встретить сайт у которого не адаптивное меню, но это статья для тех, кто еще не сделал на своем интернет ресурсе. А это по клику значка сворачивание и разворот навигация, когда экран становится меньше. И результат должен быть такой, по умолчанию стоит значjк, по клику навигация разворачивается и значjк меняется в крестик и показывает все категорий меню и также под разделы, если они на сайте есть.



Меню для больших экранов

Для начала сверстаем обычное меню для «большого» разрешения (в нашем случае это будет разрешение экрана 1000px и больше). Для этого создадим следующую структуру HTML:

Код
<div class="menu">
    <div class="menu__links">
        <a class="menu__links-item" href="/">Item 1</a>
        <a class="menu__links-item" href="/">Item 2</a>
    </div>
</div>


И добавим необходимые стили:

Код
.menu {
    text-align: right;
}

.menu__links-item {
    display: inline-block;
    color: #333333;
    font-family: Arial;
    font-size: 14px;
    line-height: 30px;
    padding: 0 10px;
    text-transform: uppercase;
    text-decoration: none;
}

.menu__links-item:hover {
    text-decoration: underline;
}


Мы добавили два пункта меню и стилизовали их так, как нам нужно.

Адаптация для мобильных устройств

Здесь как раз будем добавлять кнопку, которая под функцией на разворот меню, что должно по клику разворачиваться. Если у вас ширина больше 1000 пикселей, то меню будет отображаться по умолчанию.

В HTML структуру добавим иконку:

Код
<div class="menu__icon">
      <span></span>
      <span></span>
      <span></span>
      <span></span>
</div>


И напишем для нее стили:

Код
.menu__icon {
    display: none;
    width: 45px;
    height: 35px;
    position: relative;
    cursor: pointer;
}

.menu__icon span {
    display: block;
    position: absolute;
    height: 9px;
    width: 100%;
    background: #333333;
    border-radius: 9px;
    opacity: 1;
    left: 0;
    transform: rotate(0deg);
    transition: .25s ease-in-out;
}

.menu__icon span:nth-child(1) {
    top: 0px;
}

.menu__icon span:nth-child(2), .menu__icon span:nth-child(3) {
    top: 13px;
}

.menu__icon span:nth-child(4) {
    top: 26px;
}

Обратите внимание на правило display: none; для класса .menu__icon — по умолчанию иконка должна быть не видна.

Для маленьких экранов добавим дополнительные правила: во-первых, нам нужно показать иконку, во-вторых — доработать стили и скрыть меню, в-третьих, добавить стили для элементов меню:

Код
@media screen and (max-width: 999px) {
  .menu__icon{
    display: inline-block;
  }
  
  .menu__links {
    position: fixed;
    display: block;
    top: 0;
    right: 0;
    left: 0;
    margin-top: 52px;
    background-color: rgba(0, 0, 0, 0.8);
    z-index: 1000;
    overflow: auto;
    opacity: 0;
  }
  
  .menu__links-item {
    display: block;
    padding: 10px 0;
    text-align: center;
    color: #ffffff;
  }
}

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

Реализация логики меню

Чтобы показать меню при клике на иконку, добавим JavaScript

(function($){
  $(function() {
    $('.menu__icon').on('click', function() {
      $(this).closest('.menu').toggleClass('menu_state_open');
    });
  });
})(jQuery);

В коде выше мы всего лишь переключаем класс .menu_state_open у элемента .menu при нажатии на иконку.

И наконец, добавим стили для открытого состояния меню.

.menu.menu_state_open .menu__icon span:nth-child(1) {
    top: 18px;
    width: 0%;
    left: 50%;
}

.menu.menu_state_open .menu__icon span:nth-child(2) {
    transform: rotate(45deg);
}

.menu.menu_state_open .menu__icon span:nth-child(3) {
    transform: rotate(-45deg);
}

.menu.menu_state_open .menu__icon span:nth-child(4) {
    top: 18px;
    width: 0%;
    left: 50%;
}

.menu.menu_state_open .menu__links {
    opacity: 1;  
}


И посмотреть, что получиться:

See the Pen QdYOGX by Ekaterina Nazarova (@katienazarova) on CodePen.




Источник: Getinstance.info
Прикрепления: 3680814.jpg (27.4 Kb)
Страна: (RU)
  • Страница 1 из 1
  • 1
Поиск: