Меню як в facebookе (адаптивне)

1

Від автора: безсумнівно, адаптивна технологія стає все більш популярною. Вона дозволяє нам зекономити час при розробці дизайну, призначеного для застосування на безлічі пристроїв: від мобільних до широкоекранних комп’ютерів. Не потрібно розробляти окремі версії сайту для кожного формату (пристрою). Сьогодні ми створимо нове адаптивне меню, яке виглядає, як у facebook’е. Для його створення не знадобиться javascript, все виконується за допомогою одного CSS3 (для IE7-IE10, Firefox, Opera, Safari, Chrome і iPad/iPod/iPhone).

До сьогоднішнього уроку ми приготували дві демонстрації (різні адаптивні результати). Перше меню перетворюється в select, друге – у вертикальне меню (для відкриття підменю можна користуватися сенсорним екраном):

Меню як в facebookе (адаптивне)

Меню як в facebookе (адаптивне)Меню як в facebookе (адаптивне)Меню як в facebookе (адаптивне)

Крок 1. HTML

Основа меню звичайна, на базі UL-LI:

index.html

На цьому етапі все має бути зрозуміло. Для створення першої версії (з застосуванням select) нам потрібно додати елемент (під меню):

Choise Page…
Submenu 1
A Submenu
Submenu B
Submenu C
Submenu D
Submenu 2
Submenu E
Submenu F
Submenu G
Submenu H
Submenu 3
Submenu 4
Submenu 5
Back to Responsive menu tutorial

За замовчуванням цей селектор прихований. Він видно тільки на маленьких пристроях (з-за своїх адаптивних правил)

Крок 2. CSS

У цьому розділі ми починаємо прикрашати навігаційне меню. Спочатку потрібно призначити загальні стилі:

css/main.css

* {
margin: 0;
padding: 0;
}
html {
background-color: #E9EAED;
height: 100%;
}
body {
color: #333333;
font-family: ‘Helvetica Neue’,Helvetica,Arial,’lucida grande’,tahoma,verdana,arial,sans-serif;
}
/* інші елементи */
#nav_v2 {
display: none;
}

Тепер можна підготувати стилі елементів першого рівня:

/* елементи першого рівня */
#nav, #nav ul {
list-style: none outside none;
margin: 0;
padding: 0;
}
#nav {
background-color: rgb(78,105,162);
background: -moz-linear-gradient(top, rgba(78,105,162,1) 0%, rgba(59,88,152,1) 100%);
background: -webkit-gradient(left, top, left bottom, color-stop(0%, rgba(78,105,162,1)), color-stop(100%, rgba(59,88,152,1)));
background: -webkit-linear-gradient(top, rgba(78,105,162,1) 0%, rgba(59,88,152,1) 100%);
background: -o-linear-gradient(top, rgba(78,105,162,1) 0%, rgba(59,88,152,1) 100%);
background: -ms-linear-gradient(top, rgba(78,105,162,1) 0%, rgba(59,88,152,1) 100%);
background: linear-gradient(to bottom, rgba(78,105,162,1) 0%, rgba(59,88,152,1) 100%);
border-bottom: 1px solid #3A4B7B;
height: 22px;
padding: 10px 0 10px 5px;
position: relative;
}
#nav > li {
float: left;
height: 22px;
padding-right: 6px;
position: relative;
text-align: left;
}
#nav > li > a {
border: 1px solid transparent;
color: #FFFFFF;
display: block;
font-size: 12px;
font-weight: bold;
height: 27px;
line-height: 27px;
margin: -3px 0 0 -1px;
padding: 0 1px 0 11px;
text-decoration: none;
text-shadow: 0 -1px rgba(0, 0, 0, 0.5);
}
#nav > li:hover > a, #nav > a:hover {
background-color: #425691;
border-radius: 2px 2px 2px 2px;
color: #FFFFFF;
margin-right: -8px;
padding: 0 9px 0 11px;
position: relative;
z-index: 1;
}
#nav > li.subs:hover > a {
background-color: #FFFFFF;
border: 1px solid rgba(100, 100, 100, 0.4);
border-bottom-width: 0;
border-radius: 2px 2px 0 0;
color: #000000;
text-shadow: 0 0 transparent;
z-index: 2;
}

У меню є блакитна градієнт смуга, всі елементи вирівняні згідно float:left (горизонтально поруч один з одним). Наступний елемент – це роздільник елементів меню:

/* роздільник верхніх елементів */
#nav > li:after {
background-color: #405791;
content: «»;
height: 17px;
left: 1px;
position: absolute;
top: 2px;
width: 1px;
}
#nav > li:first-child:after {
background-color: transparent;
}

І ще потрібно додати стилі підменю (випадаючого):

/* підменю */
#nav ul {
background-color: #FFFFFF;
border: 1px solid rgba(100, 100, 100, 0.4);
*border: 1px solid rgb(100, 100, 100);
border-radius: 0 0 3px 3px;
box-shadow: 0 3px 8px rgba(0, 0, 0, 0.25);
display: none;
left: -1px;
margin-top: 2px;
min-width: 200px;
padding: 6px 0;
position: absolute;
top: 100%;
z-index: 1;
}
#nav li:hover ul {
display: block;
}
#nav ul li a {
border-bottom: 1px solid transparent;
border-top: 1px solid transparent;
color: #232B37;
display: block;
font-size: 12px;
line-height: 20px;
padding: 0 22px;
text-decoration: none;
text-overflow: ellipsis;
white-space: nowrap;
}
#nav ul li a:hover {
background-color: #6D84B4;
border-bottom: 1px solid #3B5998;
border-top: 1px solid #3B5998;
color: #FFFFFF;
}

Ось так. Меню завершено, і ми готові розпочати додавання адаптивних стилів (з допомогою медиазапросов). Медиазапросы CSS3 застосовуються для визначення того, яким чином стилі будуть змінюватися в певних контрольних точках (і особливо розміри екрану пристрою ). Як ви пам’ятаєте, для першого демо-приклад ми підготували select, давайте тепер модифікуємо його стилі:

/* адаптивні правила */
@all media and (max-width : 980px) {
#nav {
display: none;
}
#nav_v2 {
background-color: rgb(78,105,162);
border: 1px solid #3A4B7B;
color: #FFFFFF;
cursor: pointer;
display: block;
margin-bottom: 30px;
padding: 6px;
width: 100%;
}
#nav_v2 select {
color: #FFFFFF;
cursor: pointer;
}
}

Перше меню, нарешті, готовий і отримало свої адаптивні стилі.

Версія 2 – Вертикальне меню

Для створення можливості керування меню з сенсорної панелі можна скористатися простим прийомом – застосувати псевдоэлемент :target. Спочатку потрібно модифікувати розмітку (додати кілька прихованих елементів span):

index2.html

Логіка дії клацання описана в наступних стилях:

/* інші елементи */
#nav span {
display: none;
}
/* адаптивні правила */
@all media and (max-width : 980px) {
/* елементи верхнього рівня */
#nav {
height: auto;
margin: 0;
overflow: hidden;
padding: 0;
width: 100%;
}
#nav li {
display: inline;
float: left;
height: auto;
line-height: 40px;
margin: 0;
padding: 0;
position: relative;
width: 100%;
}
#nav > li:after {
display: none;
}
#nav > li > a {
border-bottom: 1px solid #3B5998;
height: 40px;
line-height: 40px;
margin: 0;
}
#nav > li:hover > a, #nav > a:hover {
margin: 0;
border-width: 1px;
}
#nav > li.subs:hover > a {
border-radius: 0;
border-width: 1px;
}
/* підменю */
#nav ul {
border: 0;
left: 0;
margin: 0;
overflow: hidden;
padding: 0;
position: relative;
top: 0;
}
#nav li:hover ul {
display: none;
}
#nav ul li a {
height: 40px;
line-height: 40px;
}
#nav #s1:target + li > a,
#nav #s2:target + li > a{
background-color: #FFFFFF;
border: 0;
color: #000000;
text-shadow: 0 0 transparent;
}
#nav #s1:target + ul li,
#nav #s2:target + ul li {
display: block;
}
}

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

Висновок

Тільки що ми створили два різних (за логікою) адаптивних меню, які виглядають як меню в facebook’е (ті ж сині кольори і стилі). Я впевнений, що вам воно дуже знадобиться. Удачі і ласкаво просимо до нас!