ProfiPHPProfiPHP
  1. Главная
  2. jQuery
  3. Адаптивное меню без дублирования ссылок с помощью jQuery

Адаптивное меню без дублирования ссылок с помощью jQuery

Рассмотрим рабочий пример использования адаптивного меню без дублирования ссылок с помощью jQuery.

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

Главное преимущество данной реализации состоит в том, что совсем нет необходимости переделывать шаблон, поскольку мобильное меню появиться в самом топе страницы, а сам список будет средствами Jquery скопирован из существующего десктопного меню. Данный способ позволяет очень просто добавить мобильное меню на свой сайт.

Допустим, на сайте имеем следующий список меню:
<nav class="header-menu">
<ul>
<li><a href="/">Главная</a></li>
<li><a href="/news">Новости</a></li>
<li><a href="/contact">Контакты</a></li>
</ul>
</nav>
Данное меню отображается на десктопной версии, соответственно него необходимо спрятать для мобильной версии. Для этого в таблице стилей добавляем правило:
@media only screen and (max-width: 767px) {
.header-menu{display: none}
}
Теперь, когда ширина экрана будет менее 767 пикселей, декстопное меню исчезнет с экрана.

Следующим этапом необходимо показать мобильно меню. Для этого в после тега body сразу добавляем HTML код:
<div id="menu_navigazione_mobile">
<a id="show_menu_ist" title="Меню" href="#">Меню</a>
<div id="mobile-menu-wrapper">
<div id="mobile-menu"></div>
</div>
</div>
После подключение jQuery библиотеки необходимо добавить JS код:
<script>
$(function(){
$("#show_menu_ist").click(function(e){
e.preventDefault();
$(this).toggleClass("active");
$("#mobile-menu").html($(".header-menu").html());
$("#mobile-menu-wrapper").toggle();
});
});
</script>
Данный скрипт выполняет действие на нажатии блока с ID - #show_menu_ist, и соответственно, без перезагрузки страницы, добавляет к блоку #mobile-menu значения списка .header-menu, и делает #mobile-menu-wrapper видимым. При повторном нажатии блок скрывается. Для визуализации стиля меню необходимо добавить в таблицу стилей несколько правил:
#menu_navigazione_mobile{display: none}
@media only screen and (max-width: 767px) {
#menu_navigazione_mobile{position: relative; z-index: 2; display: block; height: 40px; border-bottom: solid 1px #DCDCDC}
#menu_navigazione_mobile ul{margin: 0; padding: 0}
#menu_navigazione_mobile li{list-style-type: none}
#menu_navigazione_mobile li a{text-decoration: none; display: block; position: relative; color: #676666; border-bottom: solid 1px #E5E5E5; padding: 8px 30px 8px 10px}
#menu_navigazione_mobile li:last-child a{border-bottom: none}
#menu_navigazione_mobile li a:hover{text-decoration: underline}
#show_menu_ist{display: block; float: left; padding: 12px 15px}
#mobile-menu-wrapper{display: none; position: absolute; top: 40px; left: 0; z-index: 2; width: 100%; background-color: #F2F2F2}
}
Полностью рабочий пример HTML страницы:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<div id="menu_navigazione_mobile">
<a id="show_menu_ist" title="Меню" href="#">Меню</a>
<div id="mobile-menu-wrapper">
<div id="mobile-menu"></div>
</div>
</div>

<nav class="header-menu">
<ul>
<li><a href="/">Главная</a></li>
<li><a href="/news">Новости</a></li>
<li><a href="/contact">Контакты</a></li>
</ul>
</nav>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

<script>
$(function(){
// mobile menu
$("#show_menu_ist").click(function (e) {
e.preventDefault();
$(this).toggleClass("active");
$("#mobile-menu").html($(".header-menu").html());
$("#mobile-menu-wrapper").toggle();
});
});
</script>

<style>
#menu_navigazione_mobile{display: none}
@media only screen and (max-width: 767px) {
.header-menu{display: none}
#menu_navigazione_mobile{position: relative; z-index: 2; display: block; height: 40px; border-bottom: solid 1px #DCDCDC}
#menu_navigazione_mobile ul{margin: 0; padding: 0}
#menu_navigazione_mobile li{list-style-type: none}
#menu_navigazione_mobile li a{text-decoration: none; display: block; position: relative; color: #676666; border-bottom: solid 1px #E5E5E5; padding: 8px 30px 8px 10px}
#menu_navigazione_mobile li:last-child a{border-bottom: none}
#menu_navigazione_mobile li a:hover{text-decoration: underline}
#show_menu_ist{display: block; float: left; padding: 12px 15px}
#mobile-menu-wrapper{display: none; position: absolute; top: 40px; left: 0; z-index: 2; width: 100%; background-color: #F2F2F2}
}
</style>
</body>
</html>

Добавить комментарий

Имя:
Текст комментария: