Мобильное меню для сайта на CSS и jQuery

35717 просмотров
Автор: Николай Ковалёв

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

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

Делаем разметку меню:

<div class="mobile_menu_container">
    <div class="mobile_menu_content">
        <ul>
            <li>
                <a href="#" class="parent">Компьютерная техника</a>
                <ul>
                    <li><a href="#" class="back"></a></li>
                    <li><a href="#">Компьютерная техника</a></li>
                    <li>
                        <a href="#" class="parent">Ноутбуки и аксессуары</a>
                        <ul>
                            <li><a href="#" class="back"></a></li>
                            <li><a href="#">Ноутбуки и аксессуары</a></li>
                            <li><a href="#">Ноутбуки</a></li>
                            <li><a href="#">Аксессуары</a></li>
                            <li>
                                <a href="#" class="parent">Компьютеры и комплектующие</a>
                                <ul>
                                    <li><a href="#" class="back"></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="#">Жесткие диски HDD</a></li>
                                    <li><a href="#">Корпуса</a></li>
                                </ul>
                            </li>
                            <li><a href="#">Перифирия</a></li>
                        </ul>
                    </li>
                    <li><a href="#">Техника для печати</a></li>
                    <li><a href="#">Микрофоны</a></li>
                    <li><a href="#">Вебкамеры</a></li>
                    <li><a href="#">Наушники</a></li>
                </ul>
            </li>
            <li><a href="#">Строительство и ремонт</a></li>
            <li>
                <a href="#" class="parent">Телефоны</a>
                <ul>
                    <li><a href="#" class="back"></a></li>
                    <li><a href="#">Телефоны</a></li>
                    <li><a href="#">Nokia</a></li>
                    <li><a href="#">Xiaomi</a></li>
                    <li><a href="#">Samsung</a></li>
                    <li><a href="#">iPhone</a></li>
                </ul>
            </li>
            <li>
                <a href="#" class="parent">Одежда</a>
                <ul>
                    <li><a href="#" class="back"></a></li>
                    <li><a href="#">Одежда</a></li>
                    <li><a href="#">Брюки</a></li>
                    <li>
                        <a href="#" class="parent">Куртки</a>
                        <ul>
                            <li><a href="#" class="back"></a></li>
                            <li><a href="#">Куртки</a></li>
                            <li><a href="#">Зимние куртки</a></li>
                            <li><a href="#">Летние ветровки</a></li>
                            <li><a href="#">Осенняя коллекция</a></li>
                        </ul>
                    </li>
                    <li><a href="#">Штанишки</a></li>
                    <li><a href="#">Майки</a></li>
                </ul>
            </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>
    </div>
</div>
<div class="mobile_menu_overlay"></div>

Блок с классом mobile_menu_overlay нужен для создания затемнённой области при активном мобильном меню.

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

<div class="menu_container">
	<a href="#" class="mobile_menu">Показать меню</a>
</div>

Добавляем CSS:

.mobile_menu_overlay, .mobile_menu_container{
	position: fixed;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
}
.mobile_menu_container, .mobile_menu_container ul li ul{
	-webkit-transition: all 200ms;
	-moz-transition: all 200ms;
	transition: all 200ms;
}
.mobile_menu_overlay{
	display: none;
	cursor: pointer;
	z-index: 10200;
	background: rgba(0, 0, 0, 0.5);
}
.mobile_menu_container{
	-webkit-transform: translateX(-300px);
	transform: translateX(-300px);
	width: 300px;
	overflow: hidden;
	z-index: 10201;
	background: #3884da;
}
.mobile_menu_container.loaded{
   	-webkit-transform: translateX(0px);
   	transform: translateX(0px);
}
.mobile_menu_container .mobile_menu_content{
	overflow: auto;
	max-height: 100%;
	padding-bottom: 30px;
}
.mobile_menu_container ul{
	margin: 0;
	padding: 0;
}
.mobile_menu_container ul li{
	list-style: none;
}
.mobile_menu_container ul li a{
	display: block;
	padding: 15px 20px;
	line-height: 20px;
	font-size: 16px;
	background: #3884da;
	color: #ffffff;
	text-decoration: none;
	font-weight: bold;
}
.mobile_menu_container ul li a.parent{
	padding-right: 50px;
	background: #3884da url("images/arrow_right.svg") right 20px center no-repeat;
	background-size: 20px;
}
.mobile_menu_container ul li a.parent:hover{
	background: #3c8de8 url("images/arrow_right.svg") right 20px center no-repeat;
	background-size: 20px;
}
.mobile_menu_container ul li a.back{
	padding-left: 50px;
	background: #3c8de8 url("images/arrow_left.svg") left 20px center no-repeat;
	background-size: 20px;
	box-sizing: border-box;
	min-height: 50px;
}
.mobile_menu_container ul li a.back:hover{
	background: #3c8de8 url("images/arrow_left.svg") left 20px center no-repeat;
	background-size: 20px;
}
.mobile_menu_container ul li a:hover{
	background: #3c8de8;
}
.mobile_menu_container ul li ul{
	-webkit-transform: translateX(300px);
	transform: translateX(300px);
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	background: #3884da;
	z-index: 2;
}
.mobile_menu_container ul li ul.loaded{
	-webkit-transform: translateX(0px);
	transform: translateX(0px);
}
.mobile_menu_container ul li ul.activity{
	overflow-y: auto;
	overflow-x: hidden;
}

@media (max-width: 320px){
	.mobile_menu_container{
		width: 240px;
	}
}

И немножко скриптов с использованием jQuery:

$(function() {
    $(document).on("click", ".mobile_menu_container .parent", function(e) {
        e.preventDefault();
        $(".mobile_menu_container .activity").removeClass("activity");
        $(this).siblings("ul").addClass("loaded").addClass("activity");
    });
    $(document).on("click", ".mobile_menu_container .back", function(e) {
        e.preventDefault();
        $(".mobile_menu_container .activity").removeClass("activity");
        $(this).parent().parent().removeClass("loaded");
        $(this).parent().parent().parent().parent().addClass("activity");
    });
    $(document).on("click", ".mobile_menu", function(e) {
        e.preventDefault();
        $(".mobile_menu_container").addClass("loaded");
        $(".mobile_menu_overlay").fadeIn();
    });
    $(document).on("click", ".mobile_menu_overlay", function(e) {
        $(".mobile_menu_container").removeClass("loaded");
        $(this).fadeOut(function() {
            $(".mobile_menu_container .loaded").removeClass("loaded");
            $(".mobile_menu_container .activity").removeClass("activity");
        });
    });
})

Вот и всё! Мы получили простое и качественное мобильное меню.

Для битриксоидов в исходники закинул готовый шаблон компонента bitrix:menu.

4.57 21 голос
Валюта цен: BYN RUB