Адаптивное динамичное меню

Верстка и скрипт простого адаптивного динамичного меню.

Разметка:

<div class="menu-wrapper">
<ul class="menu-main">
<li>
<a href="#">Главная</a>
</li>
<li>
<a href="#">О нас</a>
</li>
<li>
<a href="#">О компании</a>
</li>
<li>
<a href="#">Новости</a>
</li>
<li>
<a href="#">Статьи</a>
</li>
<li>
<a href="#">Галерея</a>
</li>
<li>
<a href="#">Отзывы</a>
</li>
<li>
<a href="#">Информация</a>
</li>
<li>
<a href="#">Контакты</a>
</li>
</ul>
<ul class="menu-more">
<li>
<span>...</span>
<ul class="menu-sub">

</ul>
</li>
</ul>
</div>

Стили:

* {
box-sizing: border-box;
}
body {
max-width: 920px;
margin: 50px auto;
}
.menu-wrapper ul {
padding: 0;
margin: 0;
list-style: none;
}

.menu-wrapper ul li {
display: inline-block;
}

.menu-wrapper ul li a {
color: #fff;
text-transform: uppercase;
text-decoration: none;
padding: 15px 22px;
display: block;
}
.menu-wrapper {
background: #333;
position: relative;
}
.menu-more, .menu-main {
vertical-align: top;
}
.menu-main {
display: inline-block;
}
.menu-more {
display: none;
float: right;
}
.menu-more.active {
display: inline-block;
}
.menu-more>li {
width: 100%;
}
.menu-more span {
padding: 15px 0;
color: #fff;
display: block;
text-align: center;
font-weight: bold;
font-size: 15px;
}
.menu-more span:hover {
cursor: pointer;
}
.menu-sub {
position: absolute;
height: 0;
overflow: hidden;
right: 0;
background: #333;
z-index: 20;
}
.menu-more:hover .menu-sub {
height: auto;
}
.menu-wrapper .menu-sub li {
padding: 5px 0 0 0;
display: block;
}

Скрипт:

$(document).ready(
function () {
var menu = $('.menu-main'),
more = $('.menu-more'),
subMenu = $('.menu-sub'),
parent = $('.menu-wrapper'),
windowWidth = $(window).width();
more.css('width', '45px');
function contract() {
var w = 0,
outerWidth = parent.width() - 75;
for(var i = 0; i < menu.children('li').size(); i++){
w += menu.children('li').eq(i).outerWidth();
if(w > outerWidth){
menu.children('li').eq(i-1).nextAll()
.detach()
.css('opacity', 0)
.prependTo(subMenu)
.stop().animate({
'opacity': 1
}, 300);
break;
}
}
}
function expand() {
var w = 0,
outerWidth = parent.width() - 75;
menu.children('li').each(function () {
w += $(this).outerWidth();
})
for(var i = 0; i < subMenu.children('li').size(); i++){
w += subMenu.children('li').eq(i).outerWidth();
if(w>outerWidth){
var a = 0;
while (a < i){
subMenu.children('li').eq(a)
.css('opacity', 0)
.detach()
.appendTo(menu)
.stop().animate({
'opacity': 1
}, 300);
a++;
}
break;
}
}
}
function checkActivity() {
if(subMenu.children('li').size()>0){
more.addClass('active');
} else{
more.removeClass('active');
}
}
contract();
checkActivity();
$(window).on("resize", function (e) {
($(window).width()>windowWidth) ? expand() : contract();
windowWidth = $(window).width();
checkActivity();
})
}
)

Используется библиотека jquery.


bitrixone © 2024