Меню как в Facebook’е (адаптивное)

Меню как в Facebook’е (адаптивное)

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

К сегодняшнему уроку мы приготовили две демонстрации (разные адаптивные результаты). Первое меню превращается в select, второе – в вертикальное меню (для открытия подменю можно пользоваться сенсорным экраном):

скачать исходникидемодемо

Шаг 1. HTML

Основа меню обычная, на базе UL-LI:

Практический курс по верстке адаптивного лендинга с нуля!

Научитесь с нуля верстать адаптивные лендинги на HTML5 и CSS3 за ближайшие 6 дней

Узнать подробнее

index.html

<ul id="nav">
 <li><a href="#">Home</a></li>
 <li class="subs"><a href="#s1">Menu 1</a>
 <ul>
 <li><a href="#">Submenu A</a></li>
 <li><a href="#">Submenu B</a></li>
 <li><a href="#">Submenu C</a></li>
 <li><a href="#">Submenu D</a></li>
 </ul>
 </li>
 <li class="subs"><a href="#s2">Menu 2</a>
 <ul>
 <li><a href="#">Submenu E</a></li>
 <li><a href="#">Submenu F</a></li>
 <li><a href="#">Submenu G</a></li>
 <li><a href="#">Submenu H</a></li>
 </ul>
 </li>
 <li><a href="#">Menu 3</a></li>
 <li><a href="#">Menu 4</a></li>
 <li><a href="#">Menu 5</a></li>
 <li><a href="http://www.script-tutorials.com/facebook-like-menu-responsive/">Back to Responsive menu tutorial</a></li>
</ul>

На этом этапе все должно быть понятно. Для создания первой версии (с применением select) нам нужно добавить этот элемент (под меню):

<select id="nav_v2" onchange="window.location.href = this.options[this.selectedIndex].value">
 <option selected="selected" value="">Choise Page...</option>
 <option value="#">Submenu 1</option>
 <option value="#">Submenu A</option>
 <option value="#">Submenu B</option>
 <option value="#">Submenu C</option>
 <option value="#">Submenu D</option>
 <option value="#">Submenu 2</option>
 <option value="#">Submenu E</option>
 <option value="#">Submenu F</option>
 <option value="#">Submenu G</option>
 <option value="#">Submenu H</option>
 <option value="#">Submenu 3</option>
 <option value="#">Submenu 4</option>
 <option value="#">Submenu 5</option>
 <option value="http://www.script-tutorials.com/facebook-like-menu-responsive/">Back to Responsive menu tutorial</option>
</select>

По умолчанию этот селектор скрыт. Он виден только на маленьких устройствах (из-за своих адаптивных правил)

Шаг 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, давайте теперь модифицируем его стили:

/* адаптивные правила */
@media all 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. Сначала нужно модифицировать разметку HTML (добавить несколько скрытых элементов span):

index2.html

<ul id="nav">
 <li><a href="#">Home</a></li>
 <span id="s1"></span>
 <li class="subs"><a href="#s1">Menu 1</a>
 <ul>
 <li><a href="#">Submenu A</a></li>
 <li><a href="#">Submenu B</a></li>
 <li><a href="#">Submenu C</a></li>
 <li><a href="#">Submenu D</a></li>
 <li><a href="#">Submenu E</a></li>
 <li><a href="#">Submenu F</a></li>
 </ul>
 </li>
 <span id="s2"></span>
 <li class="subs"><a href="#s2">Menu 2</a>
 <ul>
 <li><a href="#">Submenu G</a></li>
 <li><a href="#">Submenu H</a></li>
 <li><a href="#">Submenu I</a></li>
 <li><a href="#">Submenu J</a></li>
 <li><a href="#">Submenu K</a></li>
 <li><a href="#">Submenu L</a></li>
 </ul>
 </li>
 <li><a href="#">Menu 3</a></li>
 <li><a href="#">Menu 4</a></li>
 <li><a href="#">Menu 5</a></li>
 <li><a href="http://www.script-tutorials.com/facebook-like-menu-responsive/">Back to Responsive menu tutorial</a></li>
</ul>

Логика действия щелчка описана в следующих стилях:

/* прочие элементы */
#nav span {
 display: none;
}

/* адаптивные правила */
@media all 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 + li ul,
 #nav #s2:target + li ul {
 display: block;
 }
}

Это означает, что при достаточно малом экране меню конвертируется в вертикальное, с возможностью открывать подменю, щелкая на его родительские элементы. Второе меню тоже, наконец, готово.

Заключение

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

Автор: Andrew

Источник: http://www.script-tutorials.com/

Редакция: Команда webformyself.

Практический курс по верстке адаптивного лендинга с нуля!

Научитесь с нуля верстать адаптивные лендинги на HTML5 и CSS3 за ближайшие 6 дней

Узнать подробнее
Самые свежие новости IT и веб-разработки на нашем Telegram-канале

Практика HTML5 и CSS3 с нуля до результата!

Получите бесплатный пошаговый видеокурс по основам адаптивной верстки с полного нуля на HTML5 и CSS3

Получить

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Комментарии (1)

  1. Pocherk

    На мой взгляд, 2-ой вариант поинтересней и полезней

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree