В данной заметке рассматривается процесс создания адаптивного горизонтального меню для сайта. Для того, чтобы интегрировать его на сайт, предварительно следует подключить библиотеку jquery и «иконочный» шрифт font awesome на сайт.
Заметка разбита на 3 части: HTML, CSS и JS. Пример полностью рабочий и апробирован в нескольких проектах, в т.ч. есть успешный опыт интеграции данного меню в шаблон opencart (в связке с php), где пункты меню добавляются автоматом при появлении их в БД сайта.
1. HTML-разметка
Для начала создается базовая html-разметка (по количеству нужных пунктов, уровней вложенности etc):
<nav> <a id="touch-menu" class="mobile-menu" href="#"> <i class="fa fa-bars" aria-hidden="true"></i>Меню </a> <ul class="menu"> <li><a href="#">Пункт 1</a> <ul class="sub-menu"> <li><a href="#">Пункт 1.1</a></li> <li><a href="#">Пункт 1.2</a> <ul> <li><a href="#">Пункт 1.2.1</a></li> <li><a href="#">Пункт 1.2.2</a></li> <li><a href="#">Пункт 1.2.3</a></li> <li><a href="#">Пункт 1.2.4</a></li> <li><a href="#">Пункт 1.2.5</a></li> </ul> </li> </ul> </li> <li><a href="#">Пункт 2</a></li> <li><a href="#">Пункт 3</a></li> <li><a href="#">Пункт 4</a></li> </ul> </nav>
На данном этапе сложностей возникнуть не должно. Простые html-списки и иконки там, где это необходимо. Верхняя ссылка с id=»touch-menu» понадобится нам позднее для мобильной версии меню.
2. CSS стили
Тут все тоже должно быть понятно. Адаптивность достигается за счет верстки на @media-запросах. Управление выпадающими блоками меню происходит на основе псевдокласса :hover (т.е. по наведению мыши/нажатием на блок на тачскрине). Остальные атрибуты отвечают за графическое представление меню и их, естественно, можно менять по своему желанию.
/*Адаптивное меню*/ .menu{display:block; background-color: #ffffff; } .menu li{display: inline-block; position: relative; z-index:100; padding: 0 10rem 0 0; } .menu li a { font-family: 'Montserrat', sans-serif ; text-decoration:none; padding:11px; display:block; color:black; -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:black; background:#ffffff;} /* hide the second level menu */ .menu ul {display: none; margin: 0; padding: 0; width: 150px; position: absolute; top: 43px; left: 0px; background: #ffffff; } /* display second level menu on hover */ .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 #ffffff; color:#797979; } .menu ul ul {left: 149px; top: 0px; } /* change level 3 menu positions */ .menu ul ul {left: 149px; top: 0px; } .mobile-menu{display:none; width:100%; padding:11px; background:#231f20; color:#ffffff !important; text-transform:uppercase; font-weight:600; } .mobile-menu:hover{background:#231f20; color:#ffffff; text-decoration:none; } @media (max-width: 768px) { .menu li{ padding: 0 6.5rem 0 0; } } @media (max-width: 767px) { .menu{display:none;} .mobile-menu{display:block; margin-top:20px;} 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*/
3. Немного JS
Приведенный ниже js-код активируется только в мобильной «версии» сайта, т.е. когда ширина экрана < 767 пикселей. Кнопка типа «гамбургер» и надпись «меню» становятся активными и при клике на эти элементы меню раскрывается выпадающим списком. До этого момента, соответственно, меню убрано под кат.
<script> $(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 > 767 && menu.is(':hidden')) { menu.removeAttr('style'); } }); }); </script>
Наверное, на этом моменте стоит завершать данную заметку. Да, конечно, в ней мало внимания уделено тому, какой элемент за что отвечает, но, с другой стороны, это довольно простой вариант меню для сайта. По крайней мере, человеку, более-менее знакомому с основами веб-разработки, не составит труда разобраться, что к чему.