АДАПТИВНОЕ МНОГО-УРОВНЕВОЕ МЕНЮ - Меню - UCOZ - Каталог файлов - Каморка
kamorka
Menu
Правила чата
Пользователи онлайн
Мини-чат
+Мини-чат
0
Онлайн всего: 1
Гостей: 1
Пользователей: 0
   Категории

Комментарии

KaMoRkA.uCoz.com -- uCoz -- Меню


Сегодня сделаем адаптивное много-уровневое меню. Для мобильной версии добавим несколько строчек javascript кода. Для лучшего восприятия пунктов навигации, добавим для каждого иконки, воспользовавшись уже знакомым нам по предыдущим урокам - font-awesome.css - со шрифтами-иконками

HTML

Меню представляет из себя неупорядоченный список:

Код
<nav>
  <ul class="menu">
  <li>
  <a href="#"><i class="icon-home"></i>Главная</a>
  <ul class="sub-menu">
  <li><a href="#">Подменю 1</a></li>
  <li><a href="#">Подменю 2</a></li>
  <li><a href="#">Подменю 3</a></li>
  </ul>
  </li>
  <li>
  <a href="#"><i class="icon-user"></i>О нас</a>
  </li>
  <li>
  <a href="#"><i class="icon-camera"></i>Портфолио</a>
  <ul class="sub-menu">
  <li>
  <a href="#">Подменю 1</a>
  </li>
  <li>
  <a href="#">Уровень 3 меню</a>
  <ul>
  <li><a href="#">Подменю 4</a></li>
  <li><a href="#">Подменю 5</a></li>
  <li><a href="#">Подменю 6</a></li>
  </ul>
  </li>
  </ul>
  </li>
  <li>
  <a href="#"><i class="icon-bullhorn"></i>Блог</a>
  </li>
  <li>
  <a href="#"><i class="icon-envelope-alt"></i>Контакты</a>
  </li>
  </ul>
</nav>


Для добавления иконок, нужно просто добавить соответствующий иконке класс к тегу i - например, icon-home, icon-camera и т.п.

CSS

Посмотрим на CSS для десктопного меню первого уровня:

Код
.menu{
  display:block;
}
.menu li{
  display: inline-block;
  position: relative;
  z-index:100;
}
.menu li a {
  font-weight:600;
  text-decoration:none;
  padding:11px;
  display:block;
  color:#ffffff;
   
  -webkit-transition: all 0.2s ease-in-out 0s;
  -moz-transition: all 0.2s ease-in-out 0s;
  -o-transition: all 0.2s ease-in-out 0s;
  -ms-transition: all 0.2s ease-in-out 0s;
  transition: all 0.2s ease-in-out 0s;
}
.menu li a:hover,
.menu li:hover > a{
  color:#ffffff;
  background:#9CA3DA;
}


Мы будем скрывать меню второго уровня и раскрывать его, когда пользователь наведет курсор на элемент меню первого уровня.

Код
/* скрываем меню второго уровеня */
.menu ul {
  display: none;
  margin: 0;
  padding: 0;
  width: 150px;
  position: absolute;
  top: 43px;
  left: 0px;
  background: #ffffff;
}
/* показываем меню второго уровня при наведении */
.menu li:hover > ul{
  display: block;
}
.menu ul li {
  display:block;
  float: none;
  background:none;
  margin:0;
  padding:0;
}
.menu ul li a {
  font-size:12px;
  font-weight:normal;
  display:block;
  color:#797979;
  border-left:3px solid #ffffff;
  background:#ffffff;
}
.menu ul li a:hover,
.menu ul li:hover > a{
  background:#f0f0f0;
  border-left:3px solid #9CA3DA;
  color:#797979;
}


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

Код
/* Изменение позиций для меню третьего уровня */
.menu ul ul {
  left: 149px;
  top: 0px;
}


Теперь добавим адаптивности, и рассмотрим из чего строится мобильная версия меню.

При уменьшении размера окна менее, чем 760px у нас меню заменится кнопкой-ссылкой, которая в десктопной версии скрыта.

Код
<a id="touch-menu" class="mobile-menu" href="#">
  <i class="icon-reorder"></i>
  Меню
</a>


Уникальный идентификатор touch-menu будем использовать в javascript коде, для обращения к меню.

Ниже css свойства для кнопки Меню:

Код
.mobile-menu{
  display:none;
  width:100%;
  padding:11px;
  background:#3E4156;
  color:#ffffff;
  text-transform:uppercase;
  font-weight:600;
}
.mobile-menu:hover{
  background:#3E4156;
  color:#ffffff;
  text-decoration:none;
}


Ниже свойства CSS для мобильной версии меню.

Код
@media (max-width: 760px) {
   
  .menu{display:none;}
   
  .mobile-menu{
  display:block;
  margin-top:100px;
  }
   
  nav{
  margin:0;
  background:none;
  }
   
  .menu li{
  display:block;
  margin:0;
  }
   
  .menu li a {
  background:#ffffff;
  color:#797979;
  border-top:1px solid #e0e0e0;
  border-left:3px solid #ffffff;
  }
   
  .menu li a:hover,
  .menu li:hover > a{
  background:#f0f0f0;
  color:#797979;
  border-left:3px solid #9CA3DA;
  }
   
  /*level 2 and 3 - make same width as all items*/
  .menu ul {
  display:block;
  position:relative;
  top:0;
  left:0;
  width:100%;
  }
   
  .menu ul ul {
  left:0;
  }
   
}/*end media queries*/


javascript

Подключаем jQuery и файл с кодом для мобильной версии:

Код
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript" ></script>
<script src="js/menu.js" type="text/javascript"></script>


Ниже приведено содержимое файла menu.js - код используемый в мобильной версии.
При нажатии на кнопку-ссылку Меню с эффектом slide появляется вся наша навигация вместе с выпадающими подпунктами.

Код
$(document).ready(function(){
   
  var touch = $('#touch-menu');
  var menu = $('.menu');
   
  $(touch).on('click', function(e) {
  e.preventDefault();
  menu.slideToggle();
  });
  $(window).resize(function(){
  var w = $(window).width();
  if(w > 760 && menu.is(':hidden')) {
  menu.removeAttr('style');
  }
  });
   
});


Если размер окна браузера более 760px, то мы удаляем инлайновые свойства у .menu и внешний вид навигации вернется к десктопному варианту.


Важно!

При копировании материала указывать ссылку на источник.

- 651
- 05-Мая-2017
- 1
- 0
Материал разместил:

Похожий материал
Статьи сайта