Адаптивное меню для сайта


Сегодня сделаем адаптивное много-уровневое меню. Для мобильной версии добавим несколько строчек jаvascript кода. Для лучшего восприятия пунктов навигации, добавим для каждого иконки, воспользовавшись уже знакомым нам по предыдущим урокам — font-awesome.css — со шрифтами-иконками

HTML

Меню представляет из себя неупорядоченный список:

<nav>      <ul class="menu">          <li>              <a href="#"><i class="icon-home"></i>Главная</a>              <ul class="sub-menu">                  <li><a href="#">Подменю 1</a></li>                  <li><a href="#">Подменю 2</a></li>                  <li><a href="#">Подменю 3</a></li>              </ul>          </li>          <li>              <a  href="#"><i class="icon-user"></i>О нас</a>          </li>          <li>    .  

#">Подменю 5</a></li>                         <li><a href="#">Подменю 6</a></li>                     </ul>                 </li>             </ul>         </li>         <li>             <a  href="#"><i class="icon-bullhorn"></i>Блог</a>         </li>         <li>             <a  href="#"><i class="icon-envelope-alt"></i>Контакты</a>         </li>     </ul> </nav>

Для добавления иконок, нужно просто добавить соответствующий иконке класс к тегу i — например, icon-home, icon-camera и т.п.

CSS

Посмотрим на CSS для десктопного меню первого уровня:

.menu{      display:block;  }  .menu li{      display: inline-block;      position: relative;      z-index:100;  }  .menu li a {      font-weight:600;      text-decoration:none;      padding:11px;      display:block;      color:#ffffff;         -webkit-transition: all 0.2s ease-in-out 0s;      -moz-transition: all 0.2s ease-in-out 0s;      -o-transition: all 0.2s ease-in-out 0s;      -ms-transition: all 0.2s ease-in-out 0s;      transition: all 0.2s ease-in-out 0s;  }  .menu li a:hover,  .menu li:hover > a{      color:#ffffff;      background:#9CA3DA;  }  

Мы будем скрывать меню второго уровня и раскрывать его, когда пользователь наведет курсор на элемент меню первого уровня.

/* скрываем меню второго уровеня */  .menu ul {      display: none;      margin: 0;      padding: 0;      width: 150px;      position: absolute;      top: 43px;      left: 0px;      background: #ffffff;  }  /* показываем меню второго уровня при наведении */  .menu li:hover > ul{      display: block;  }  .menu ul li {      display:block;      float: none;      background:none;      margin:0;      padding:0;  }  .menu ul li a {      font-size:12px;      font-weight:normal;      display:block;      color:#797979;      border-left:3px solid #ffffff;      background:#ffffff;  }  .menu ul li a:hover,  .menu ul li:hover > a{      background:#f0f0f0;      border-left:3px solid #9CA3DA;      color:#797979;  }

Меню третьего уровня будет иметь такие же свойства, как и у меню второго уровня, за исключением позиционирования:

/* Изменение позиций для меню третьего уровня */  .menu ul ul {      left: 149px;      top: 0px;  }

Теперь добавим адаптивности, и рассмотрим из чего строится мобильная версия меню.
При уменьшении размера окна менее, чем 760px у нас меню заменится кнопкой-ссылкой, которая в десктопной версии скрыта.

<a id="touch-menu" class="mobile-menu" href="#">      <i class="icon-reorder"></i>      Меню  </a>  

Уникальный идентификатор touch-menu будем использовать в jаvascript коде, для обращения к меню.
Ниже css свойства для кнопки Меню:

.mobile-menu{      display:none;      width:100%;      padding:11px;      background:#3E4156;      color:#ffffff;      text-transform:uppercase;      font-weight:600;  }  .mobile-menu:hover{      background:#3E4156;      color:#ffffff;      text-decoration:none;  }

Ниже свойства CSS для мобильной версии меню.

@media (max-width: 760px) {         .menu{display:none;}         .mobile-menu{          display:block;          margin-top:100px;      }         nav{          margin:0;          background:none;      }         .menu li{          display:block;          margin:0;      }         .menu li a {          background:#ffffff;          color:#797979;          border-top:1px solid #e0e0e0;          border-left:3px solid #ffffff;      }         .menu li a:hover,      .menu li:hover > a{          background:#f0f0f0;          color:#797979;          border-left:3px solid #9CA3DA;      }         /*level 2 and 3 - make same width as all items*/      .menu ul {          display:block;          position:relative;          top:0;          left:0;          width:100%;      }         .menu ul ul {          left:0;      }     }/*end media queries*/  

JS

Подключаем jQuery и файл с кодом для мобильной версии:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/jаvascript" ></script>  <script src="js/menu.js" type="text/jаvascript"></script>  

Ниже приведено содержимое файла menu.js — код используемый в мобильной версии.

При нажатии на кнопку-ссылку Меню с эффектом slide появляется вся наша навигация вместе с выпадающими подпунктами.

$(document).ready(function(){         var touch = $('#touch-menu');      var menu = $('.menu');         $(touch).on('click', function(e) {          e.preventDefault();          menu.slideToggle();      });      $(window).resize(function(){          var w = $(window).width();          if(w > 760 && menu.is(':hidden')) {              menu.removeAttr('style');          }      });     });

Если размер окна браузера более 760px, то мы удаляем инлайновые свойства у .menu и внешний вид навигации вернется к десктопному варианту.

pcvector.net

CSS-Only Dark Menu от Джона Ербанка


Кроме дизайна этот сниппет задает адаптивное выпадающее меню. Панель навигации при стандартном окне занимает обычное горизонтальное положение.

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

Посмотреть демо

Full Responsive Portfolio от Celine

Этот полностью адаптивный макет портфолио включает в себя простую, но эффективную панель навигации. Когда окно просмотра уменьшается до определенной контрольной точки, пункты адаптивного меню для сайта скрываются, на экране остается только кнопка переключения меню. Пользователь может нажать на нее, чтобы развернуть или скрыть меню, которое разворачивается внизу под заголовком.

Посмотреть демо

Bootstrap Navbar от Bobby

Этот сниппет кода содержит несколько контрольных точек и устанавливается поверх Bootstrap.

При больших размерах окна просмотра ссылки навигации располагаются рядом с логотипом, а на меньших контрольных точках они смещаются вниз в собственную панель. Когда окно просмотра становится еще меньше, ссылки «прячутся» под переключатель меню. Это распространенный метод работает во всех браузерах.

Посмотреть демо

Clean Dropdown Toggle от Бойда Массье

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


Посмотреть демо

Animated Sliding Bar от Антуана Виниаля

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

На небольших экранах используется тот же эффект, но меню отображается вертикально, а не горизонтально. Обратите внимание на красивый эффект анимации, который управляется с помощью класса CSS .active.

Посмотреть демо

Basic Responsive Menu от Эша Нельсона

На первый взгляд это меню кажется стандартным: традиционные ссылки, гамбургер-переключатель меню и плоская цветовая гамма. Хотя оно лишено гламурного блеска, меню работает и работает удобно и просто. Весь его код написан на Haml и SASS.

Посмотреть демо

Sliding Drawer Hamburger Nav от Ханьлиня Чонга

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


По этой причине выдвижные меню следует использовать с осторожностью. В первую очередь, когда сайт имеет большое количество элементов навигации. И если вы ищете шаблон подобного типа меню, советую обратить внимание на данный сниппет. Он реализует структуру, с которой знакомы многие пользователи.

Посмотреть демо

Single-Page Mic Nav от Travis

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

Посмотреть демо

Morphing Circular Menu от Sergio

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

Данное решение вряд ли найдет широкое применение в коммерческой сфере. Но все равно это замечательный пример того, какое широкое поле для творчества предоставляет адаптивный дизайн.

Посмотреть демо

Pure CSS Flexbox Nav от Джо Уоткинса

Флексбокс CSS3 — это термин, используемый разработчиками, чтобы обозначить гибкую модель макетов CSS3. Мы уже публиковали полное руководство по Flexbox, с которым я советую вам ознакомиться.

Это меню построено на Flexbox, в котором ссылки распределяются в панели равномерно, независимо от размера экрана. Весь код написан на чистом HTML и CSS, реализована поддержка выпадающих меню для сайта.


Посмотреть демо

Animated Toggle от Джо Баггали

Если вы любите эффекты анимации, то можете воспользоваться этим решением. По умолчанию ссылки выравниваются рядом, поддерживаются выпадающие подменю.

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

Посмотреть демо

Flexible Nav Menu от gantit

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

Посмотреть демо

Pure CSS Tabs от Мартина Гайдичара

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

Посмотреть демо

Pure CSS Breadcrumbs от Оливера Ноблича

«Хлебные крошки» не слишком популярны среди дизайнеров и разработчиков, но их вполне можно использовать для интерфейса навигации. Эти хлебные крошки реализованы без эффектов анимации, зато написаны на чистом CSS.


Посмотреть демо

Batman Nav от Mighty Shaban

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

Система меню красиво скомпонована. Она может пригодиться при разработке любого одностраничного макета.

Посмотреть демо

Multilevel Dropdown от Стефани Уотер

Разработка многоуровневой навигации требует тщательного планирования. Этот сниппет является не только работоспособным, но и поддерживает адаптивные эффекты через CSS. Когда панель навигации уменьшается, пользователь может кликнуть по иконке, расположенной рядом с определенным пунктом меню и отобразить скрытое подменю. Эта техника позволяет поддерживать управляемость кода.

Посмотреть демо

Pure CSS eBook Webapp от Энди Фицсаймона

Интерфейс меню был разработан как имитация стандартного решения iOS с панелями навигации в верхней и нижней частях экрана. В этом сниппете был использован CSS-флексбокс, с помощью которого ссылки многоуровневого меню для сайта и элементы страницы пропорционально изменяют свой размер, чтобы соответствовать размеру окна браузера.

Посмотреть демо

Equal-Width Navigation от Дориана Коврана

Этот интерфейс содержит равные по ширине блоки ссылок панели навигации. Каждая ссылка занимает одинаковый процент экрана по горизонтали до тех пор, пока не будет достигнута определенная малая контрольная точка. После этого панель меню скрывается под иконкой переключателя. Компактный, красивый и функциональный код.


Посмотреть демо

Stylized Multilevel Navbox от Эндрю ДеБрю

В этом сниппете тот же эффект был воспроизведен в сочетании адаптивной функцией. Это меню удивительно гибкое и достаточно уникальное по сравнению с другими примерами адаптивных решений.

Посмотреть демо

Dynamic Sliding Menu Bar от Филиппа Ферча

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

Ссылки на больших экранах располагаются горизонтально и изменяют расположение на вертикальное при просмотре на небольших экранах. Меню работает очень плавно и естественно. Возможно, это немного сложная анимация, но она обязательно обратит на себя внимание пользователей.

Посмотреть демо

Заключение

Удивительное разнообразие форм и элементов, доступных в адаптивном дизайне, способно привести в волнение даже самого искушенного разработчика. Система навигации часто является одной из самых сложных областей адаптивного веб-дизайна, но эти сниппеты станут для вас отправной точкой, отталкиваясь от которой вы сможете генерировать собственные идеи.

Перевод статьи «20 Useful CSS Snippets for Responsive Menus» был подготовлен дружной командой проекта Сайтостроение от А до Я.

www.internet-technologies.ru

Адаптивное меню для сайта

Хабр, привет!

На Сodepen появляется много хороших решений от разных специалистов, и я считаю, что лучшие из них нужно собирать в одном месте. Поэтому 2 года назад начал сохранять у себя на компьютере интересные скрипты по разным тематикам.

Раньше я их выкладывал в группе продукта облачной IDE mr. Gefest, это были сборки из 5-8 решений. Но теперь у меня стало скапливаться по 15-30 скриптов в разных тематиках (кнопки, меню, подсказки и так далее).

Такие большие наборы следует показывать большему числу специалистов. Поэтому выкладываю их на Хабр. Надеюсь они будут Вам полезны.

В этом обзоре мы рассмотрим многоуровневые меню.

Flat Horizontal Navigation

Адаптивное меню для сайта

Красивая навигационная панель с плавно появляющимся подменю. Код хорошо структурирован, используется js. Судя по использованным возможностям, работает в ie8+.
http://codepen.io/andytran/pen/kmAEy

Material Nav Header w/ Aligned Dropdowns

Адаптивное меню для сайта

Адаптивная панель ссылок с двухколонным подменю. Все сделано на css и html. Применены css3 селекторы, которые не поддерживаются в ie8.
http://codepen.io/colewaldrip/pen/KpRwgQ
 
Smooth Accordion Dropdown Menu

Адаптивное меню для сайта

Стильное вертикальное меню с плавно раскрывающимися элементами. Используется transition, transform js-код.
http://codepen.io/fainder/pen/AydHJ
 
Pure CSS Dark Inline Navigation Menu

Адаптивное меню для сайта

Темная вертикальная навигационная панель с иконками из ionicons. Применяется javascript. В ie8 скорее всего будет работать без анимации.
http://codepen.io/3lv3n_snip3r/pen/XbddOO
 
Pure CSS3 Mega Dropdown Menu With Animation

Адаптивное меню для сайта

Адаптивное меню для сайта

Стильное меню с двумя форматами вывода: горизонтальным и вертикальным. Используются иконки и css3-анимация. В ie8 точно будет ужасно выглядеть, но зато в других браузерах все круто.
Ссылка на вертикальную: http://codepen.io/rizky_k_r/full/sqcAn/
Ссылка на горизонтальную: http://codepen.io/rizky_k_r/pen/xFjqs
 
CSS3 Dropdown Menu

Адаптивное меню для сайта

Горизонтальное меню с большими элементами и выпадающим списком ссылок. Чистый и минималистичный код без js.
http://codepen.io/ojbravo/pen/tIacg
 
Simple Pure CSS Dropdown Menu

Адаптивное меню для сайта

Простое, но стильное горизонтальное меню. Используется font-awesome. Все работает на css и html, без js. В ie8 будет работать.
http://codepen.io/Responsive/pen/raNrEW
 
Bootstrap 3 mega-dropdown menu

Адаптивное меню для сайта

Отличное решение для интернет-магазинов. Отображает несколько уровней категорий и большие изображения (например, товар по акции). В его основе лежит boostrap 3.
http://codepen.io/organizedchaos/full/rwlhd/
 
Flat Navigation

Адаптивное меню для сайта

Стильная навигационная панель с плавным подменю. В старых браузерах отобразится с проблемами.
http://codepen.io/andytran/pen/YPvQQN
 
3D nested navigation

Адаптивное меню для сайта

Горизонтальное меню с очень крутой анимацией без js!
http://codepen.io/devilishalchemist/pen/wBGVor
 
Responsive Mega Menu — Navigation

Адаптивное меню для сайта

Горизонтальное адаптивное меню.  Выглядит неплохо, но мобильная версия немного "хромает". Используется css, html и js.
http://codepen.io/samiralley/pen/xvFdc
 
Pure Css3 Menu

Адаптивное меню для сайта

Оригинальное меню. С простым и чистым кодом без js. Применяйте для "вау" эффектов.
http://codepen.io/Sonick/pen/xJagi
 
Full CSS3 Dropdown Menu

Адаптивное меню для сайта

Красочное выпадающее меню с одним уровнем вложенности. Используются иконки из font-awesome, html и css.
http://codepen.io/daniesy/pen/pfxFi
 
Css3 only dropdown menu

Адаптивное меню для сайта

Достаточно неплохое горизонтальное меню с тремя уровнями вложенности. Работает без js.
http://codepen.io/riogrande/pen/ahBrb
 
Dropdown Menus

Адаптивное меню для сайта

Минималистичное меню с оригинальным эффектом появления вложенного списка элементов. Радует, что это решение тоже без javascript.
http://codepen.io/kkrueger/pen/qfoLa
 
Pure CSS DropDown Menu

Адаптивное меню для сайта

Примитивное, но эффективное решение. Только css и html.
http://codepen.io/andornagy/pen/xhiJH
 
Pull Menu — Menu Interaction Concept

Адаптивное меню для сайта

Интересный концепт меню для мобильного телефона. Я такого ещё не видел. Используется html, css и javascript.
http://codepen.io/fbrz/pen/bNdMwZ
 
Make Simple Dropdown Menu

Адаптивное меню для сайта

Чистый и простой код, без js. В ie8 точно работать будет.
http://codepen.io/nyekrip/pen/pJoYgb
 
Pure CSS dropdown [work for mobile touch screen]

Адаптивное меню для сайта

Решение неплохое, но слишком уж много используется классов. Радует, что нет js.
http://codepen.io/jonathlee/pen/mJMzgR
 
Dropdown Menu

Адаптивное меню для сайта

Симпатичное вертикальное меню с минимальным javascript-кодом. JQuery не используется!
http://codepen.io/MeredithU/pen/GAinq
 
CSS 3 Dropdown Menu

Адаптивное меню для сайта

Горизонтальное меню с дополнительными подписями может хорошо украсить Ваш сайт. Код простой и понятный. Javascript не применяется.
http://codepen.io/ibeeback/pen/qdEZjR
 
KVdKQJ (автор очень долго думал над названием)

Адаптивное меню для сайта

Красивое решение с большим количеством кода (html, css и js). Придумано 3 формата подменю. Для интернет-магазинов решение хорошо подходит.
http://codepen.io/martinridgway/pen/KVdKQJ
 
CSS3 Menu Dropdowns (особенное решение)!

Адаптивное меню для сайта

Темное горизонтальное меню с тринадцатью (13) вариантами анимации! Обязательно советую ознакомиться, пригодится в быту.
http://codepen.io/cmcg/pen/ofFiz
 
П.С.
Надеюсь, Вам понравилась сборка из 23 решений. Если хотите и дальше их читать, то пройдите снизу опрос.
Всем приятной работы.

habr.com

Основное правило современного веб-дизайна заключается в том, что сайт и его контент должны правильно отображаться на различных устройствах, в том числе и мобильных. Одним из главных аспектов в интерфейсе сайта является качественная навигация. В данной статье показан пример как сделать простое адаптивное меню с кнопкой закрыть, используя только CSS, реализуя функционал без применения javaScript. Все что нам понадобится — изображение иконки «бургег» для открытия меню и крестика, для его закрытия соответственно, которые я приготовил заранее.

  Отзывчивость меню работает следующим образом: на большом мониторе меню имеет классический вид — все блоки выстроены в одну горизонтальную линию; на планшете — блоки меню разделены на две равнораспределенные по экрану колонки; а на экранах мобильных устройств показана небольшая кнопка с иконкой-«бутерброд», при клике по которой открываются разделы меню, а иконка меню меняется на кнопку закрытия в виде крестика. Клик по крестику закрывает меню и возвращает его в первоначальное положение.
  Проверить меню на адаптивность и проделать все манипуляции самостоятельно можно на странице примера, изменяя размеры окна браузера или зайдя с мобильного устройства.

ПРИМЕР
  Для всего этого чуда понадобился вот такой спрайт с иконками «бургера» и крестика:

  Код меню самый обычный, какой большинство использует для создания навигации по сайту:

  Основной CSS включает в себя и сброс стилей для блоков, псевдоклассов и псевдоэлементов, используемых в коде, при ненадобности его можно удалить.
  Теперь осталось задать правила адаптивности, а именно свойства отображения меню для различных размеров экрана и прописать функционал открытия и закрытия меню.
  Работа меню реализована с помощью псевдокласса :focus, для этого к тегу контейнера <nav> добавлен атрибут tabindex чтобы блок смог получить фокус и меню стало видимым. Кнопки открытия и закрытия можно сместить изменив соответствующие свойства в коде CSS для элементов кнопок.
  С помощью псевдокласса :hover решена проблема со скликаванием. Пока курсор находится на меню, оно остается видимым и кликабельным.
  При желании менюшку можно симпатично оформить и добавить немного анимации, все также используя только свойства CSS, исключив JS-скрипты.

©http://magentawave.com

www.magentawave.com

Разметка HTML

Сначала добавим тег meta viewport в разделе head. Данный тег требуется для нашей страницы, чтобы корректно масштабироваться на экране любого размера, особенно на мобильных устройствах.

…а затем добавляем следующий код для навигации в тег body.

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

 

Стили

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

Тег nav который определяет навигацию, будет иметь ширину 100% окна браузера, а тег ul, который содержит основные ссылки меню, имеет ширину 600px.

Затем смещаем ссылки меню влево, так что они будут выводиться в один ряд.

Если вы посмотрите на разметку HTML, то увидите, что clearfix добавлен в атрибуте class для обеих тегов nav и ul для сбрасывания обтекания текста вокруг меню.

Так как у нас есть шесть ссылок меню, контейнер имеет ширину 600px, то каждая ссылка будет шириной 100px.

Ссылки меню разделены рамкой справа шириной 1px, кроме последнего пункта. Нужно изменить модель расчета границ прямоугольника box-sizing на border-box, чтобы сохранить размер меню 100px.

Теперь меню будет иметь более светлый цвет в состояниях :hover и :active.

…а внешние ссылки будут скрыты (для экранов настольных систем).

На данном этапе мы создали стили для меню. Но при изменении экрана браузера ничего происходить не будет. Пора переходить к следующему этапу.

Внешний вид меню

 

Медиа запросы

Медиа запросы используются для определения того, как будут измениться стили в определенных точках при изменении размеров экрана.

Размеры экранов

Так  как наша навигация изначально имеет ширину 600px, то сначала определим стили для экранов шириной 600px или меньше, так что данная точка будет первой точкой перелома.

На данных размерах экранах, каждая пара ссылок будет выводиться рядом, а так как ширина списка ul равна 100% от ширины экрана, то ссылка будет шириной 50%.

Меню изменяет вид

Также мы определим, как навигация будет выводиться на экранах размера 480px или меньше (то есть во второй точке излома).

На данном размере экрана дополнительная ссылка становится видимой, и ей также придается иконка “меню” с правой стороны с помощью псевдо-элемента :after, а основные ссылки будут скрываться для сохранения вертикального пространства на экране.

Вид меню на маленьких экранах

Когда экран становится меньше 320px меню будет показываться вертикально сверху вниз.

Теперь можно изменять размер экрана. Меню будет изменяться вместе с изменением размером экран.

 

Выводим меню

На данном этапе меню будет скрыто и будет показываться при нажатии на ссылку «Меню». Для данного эффекта используется функция jQuery slideToggle().

Однако при изменении размера окна браузера сразу после того, как меню было открыто и закрыто на маленьком экране, то меню останется невидимым, так как свойство  display: none, генерируемое jQuery, еще будет присоединено к элементу.

Итак, нужно удалить данный стиль при изменении размера окна:

Наше меню завершено, смотрите демонстрационную страницу, изменяйте размер окна браузера.

ruseller.com

HTML разметка

Задача понятная, внутри тега section будет находится шапка сайта header, внутри которой блок div с логотипом и навигационная панель nav. Она будет использоваться, как контейнер для меню из маркированных списков ul с пунктами меню-ссылками a.

<section>
   <header>
    <div class="logo">
      <a href="#"><img src="logo.jpg"></a>
    </div>
    <nav>
    <ul>
      <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>
    </nav>
  </header>
</section>

Как обычно HTML структура смотрится очень просто — чистый код и ничего лишнего, приятно посмотреть. Однако, если посмотреть на результат в браузере, то возникает желание побыстрее открыть файл стилей и начинать наводить красоту.

Этим мы с вами сейчас и займемся.

Стилизация секции — section

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

section {
    background: url(bg.jpg);
}

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

background-size: cover;
height: 100vh;

При просмотре на больших мониторах, при недостаточных размерах фотографии, она начнет размножаться. Запретим повтор фона.

background-repeat: no-repeat;

На мобильных телефонах, без выравнивания фона по центру, он может срезаться.

background-position: center center;

Секция подготовлена, в ней мы пропишем стили для шапки.

Стилизация шапки сайта — header

Немного забежим вперёд и посмотрим из каких блоков будет состоять шапка — это блок div с логотипом и блок навигации nav.

Как поставить два блока в ряд, ведь в естественном виде блоки стоят друг под другом? Flexbox метод отлично справляется с этой задачей — ставит в ряд и выравнивает относительно контейнера header так, как нам надо.

header {
    display: flex;
    justify-content: space-between;
    align-items: center;
}

Свойство box-shadow рисует нижнюю тень под шапкой, таким образом мы визуально отделяем шапку сайта от контента. Высоту шапки height предпочтительно задавать не в пикселях, а в относительных единицах, например в процентах, тогда на любых экранах будут сохранятся пропорции элементов сайта.

height: 18%;
box-shadow: 0 5px 15px rgba(0,0,0,.2);

Результат работы flexbox-а и появившуюся тень, мы видим ниже.

Работа с логотипом

Сейчас логотип прижат к левому краю окна браузера, сдвинем его немного вправо.

.logo img {
    margin-left: 2.3em;
}

Следующий код делает логотип адаптивным.

max-width: 100%;

Стилизация меню — ul

Убираем маркеры у пунктов меню.

ul {
    list-style-type: none;
}

Превращаем вертикальное меню в горизонтальное, выравнивая все по центру, применяя flexbox метод. Свойство transition обеспечивает плавную работу hover эффекта, об этом позже.

ul {
    display: flex;
    flex-flow: nowrap;
    flex-direction: row;
    justify-content: center;
    align-items: center;
    transition: .5s;
}

Пункты меню li стоят очень плотно друг к другу и надо поработать со шрифтом и ссылками.

Зададим поля вокруг пунктов меню.

ul li a {
    padding: 10px 20px;
}

Текст сделаем заглавными буквами и уберем подчеркивание ссылок.

text-transform: uppercase;
text-decoration: none;

Выбираем шрифт потемнее для контраста и делаем его жирным (меня бесит, когда цвет текста сливается с фоновым цветом сайта).

color: #262625;
font-weight: bold;

Создаем простой эффект при наведении и не забываем про плавный переход.

ul li a:hover {
    background: #000;
    color: #fff;
    transition: .5s
}

На следующем уроке мы сделаем наше меню адаптивным, делая медиа-запросы. Смотрите весь код на jsfiddle.

myrusakov.ru

Урок посвящён созданию адаптивного выпадающего меню шириной во всю ширину страницы или блока навигации, на чистом CSS. Мега меню обычно используется на сайтах интернет-магазинов и любых других сайтах электронной коммерции, так как оно является оптимальным способом для организации и отображения содержимого.

Общий принцип создания мега меню не отличается от создания обычного горизонтального выпадающего меню. Разница заключается лишь в том, что относительное позиционирование получает не каждый элемент списка, в который вкладывается выпадающее меню, а меню верхнего уровня или любой другой блок-контейнер. В этом случае мы можем задать для выпадающего меню ширину 100%, которая будет равна ширине меню верхнего уровня, а не ширине элемента списка. Для выпадающего меню обычного размера нужно приписать класс и задать для него относительное позиционирование.

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

Адаптивное меню для сайта
Рис. 1. Контейнер для колонок мега меню
Адаптивное меню для сайта
Рис. 2. Вложенное меню

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

Необходимые файлы раздела head

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">  <script src="https://code.jquery.com/jquery-2.2.3.min.js"></script>  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.matchHeight/0.7.0/jquery.matchHeight-min.js"></script>

HTML разметка

<nav class="container">   <ul class="top-menu">   <li><a href="">Главная</a></li>   <li class="dropdown-standart"><a href="" class="dropdown">Страницы</a>   <ul class="submenu-standart">   <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>   </li>   <li><a href="" class="dropdown">Магазин</a>   <ul class="submenu">   <li><h3>Колонка 1</h3>   <ul>   <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>   </li>   <li><h3>Колонка 2</h3>   <ul>   <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>   </li>   <li>   <ul>   <li>   <a href="" class="link-image">   <img src="https://html5book.ru/wp-content/uploads/2017/01/white-lady.jpg">   </a>   </li>   <li><h3 class="image-header">Заголовок</h3></li>   </ul>   </li>   </ul>   </li>   <li><a href="">Портфолио</a></li>   <li><a href="">Блог</a></li>   </ul>  </nav>

CSS стили

@import url('https://fonts.googleapis.com/css?family=Playfair+Display|Roboto');  *{box-sizing: border-box;}  body {   font-family: 'Roboto', sans-serif;   font-size: 14px;   margin: 0;  }  ul {   list-style: none;   margin: 0;   padding: 0;  }  a {text-decoration: none;}  .top-menu {   background: white;   position: relative;  }  .top-menu:after,   .submenu:after {   content: "";   display: table;   clear: both;  }  .top-menu > li {   display: inline-block;   float: left;  }  .top-menu > li > a {   display: block;   padding: 18px;   font-size: 11px;   text-transform: uppercase;   letter-spacing: 1px;   color: #000;   transition: .2s linear;  }  .top-menu > li > a:hover {color: #B03062;}  .dropdown:after {   content: "f107";   font-family: FontAwesome;   margin-left: 4px;   vertical-align: top;  }  .submenu,   .submenu-standart {   border-top: 1px solid #e5e5e5;   box-shadow: 0 3px 5px 0 rgba(0,0,0,.07);   background: white;   padding: 25px 0;   position: absolute;   top: 100%;   left: 0;   z-index: 5;   opacity: 0;   visibility: hidden;   transform: translate3d(0,30px,0);   transition: .5s ease-out;   transform-origin: 0% 0%;  }  .submenu {width: 100%;}  .submenu-standart {   min-width: 200px;   padding: 10px 0;  }  .dropdown-standart {position: relative;}  .top-menu > li:hover .submenu,   .top-menu > li:hover .submenu-standart {   opacity: 1;   visibility: visible;   transform: translate3d(0,0,0);  }  .submenu > li {   float: left;   width: calc(100% / 3);   padding: 0 18px;   border-right: 1px solid #e5e5e5;  }  .submenu-standart li {padding: 0 18px;}  .submenu > li:last-child {border-right: none;}  .submenu img {   display: block;   width: 100%;  }  .submenu li a,   .submenu-standart li a {   display: block;   padding: 5px 0;   color: #666;   font-size: 13px;  }  .submenu li .link-image {padding: 0;}  .submenu li a:hover {color: #B03062;}  .submenu h3 {   font-family: 'Playfair Display', serif;   font-size: 20px;   font-weight: 400;   margin: 10px 0;  }  .container {   max-width: 960px;   margin: 0 auto;  }  .content {   margin: 20px auto;   padding: 0 20px;  }

Добавим адаптивность для мобильных устройств

@media(max-width:768px) {   .top-menu li {   width: 100%;   height: auto!important;   }   .top-menu > li {border-bottom: 1px solid #e5e5e5;}   .top-menu > li > a {padding: 18px}   .submenu,   .submenu-standart {   position: relative;   display: none;   box-shadow: none;   padding: 0;   background: rgba(0,0,0,.02);   }   .submenu-standart {padding: 10px 0;}   .submenu > li {   border-right: none;   border-bottom: 1px solid #e5e5e5;   padding: 18px;   }   .submenu h3 {margin: 0 0 10px}   .submenu .image-header {margin: 10px 0}   .submenu li:last-of-type {border-bottom: none}   .top-menu > li:hover .submenu,   .top-menu > li:hover .submenu-standart {display: block;}  }

Активация плагина matchHeight

jQuery(document).ready(function($) {   $('.submenu > li').matchHeight();  });

See the Pen apGgYv by Elena (@html5book) on CodePen.

Эффекты для появления мега меню

В приведённом примере меню появляется, скользя снизу-вверх. Чтобы разнообразить свои проекты, можно воспользоваться одним из следующих эффектов:

1. Поворот из глубины экрана

.submenu {   border-top: 1px solid #e5e5e5;   box-shadow: 0 5px 5px 0 rgba(0,0,0,.05);   background: white;   padding: 30px 0;   position: absolute;   top: 100%;   left: 0;   width: 100%;   z-index: 5;   opacity: 0;   visibility: hidden;   transform: perspective(600px) rotateX(-90deg);   transform-origin: 0% 0%;   transition: .4s ease-in;  }  .top-menu > li:hover .submenu {   opacity: 1;   visibility: visible;   transform: perspective(600px) rotateX(0);  }

2. Скольжение сверху-вниз

.submenu {   border-top: 1px solid #e5e5e5;   box-shadow: 0 5px 5px 0 rgba(0,0,0,.05);   background: white;   padding: 30px 0;   position: absolute;   left: 0;   width: 100%;   top: -60px;   opacity: 0;   z-index: -1;   transition: .4s cubic-bezier(.6, .04, .98, .335);  }  .top-menu > li:hover .submenu {   top: 100%;   opacity: 1;   z-index: 5;  }

3. Скольжение слева-направо

.submenu {   border-top: 1px solid #e5e5e5;   box-shadow: 0 5px 5px 0 rgba(0,0,0,.05);   background: white;   padding: 30px 0;   position: absolute;   width: 100%;   top: 100%;   left: -60px;   opacity: 0;   visibility: hidden;   z-index: 5;   transition: .4s cubic-bezier(.455, .03, .515, .955);  }  .top-menu > li:hover .submenu {   left: 0;   opacity: 1;   visibility: visible;  }

html5book.ru

Как сделать адаптивное меню для сайта

Google подтвердил, что с середины апреля одним из факторов ранжирования станет адаптивность сайта под мобильные устройства. В связи с этим все материалы о том, как сделать ваш landing page адаптивным — как никогда актуальны. Я не буду сегодня городить что-то сложное, а наоборот, расскажу, как сделать очень простое адаптивное меню с минимумом затрат времени.

В основном это будет html + css, но понадобится совсем маленький скрипт, для обработки клика. Итак…

Адаптивное горизонтальное меню

Начнем с html. Прежде всего подключим библиотеку jquery. Наверняка, вы давно ей пользуетесь, поэтому убедитесь, что не подключаете ее второй раз:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>

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

  <nav class="topMenu">   <div class="iconMenu"><img src="img/iconmenu.png" alt="Иконка меню" /></div>   <div class="itemsMenu">   <li><a href="#"><img src="img/pdf.png" alt="Скачать прайс"/>Скачать прайс</a></li>   <li><a href="#"><img src="img/contact.png" alt="Контакты"/>Контакты</a></li>   <li><a href="#"><img src="img/otzivy.png" alt="Отзывы"/>Отзывы</a></li>   </div>  </nav>  

Я добавил ссылкам иконки, чтобы смотрелось симпатичнее. В варианте для больших дисплеев будет выглядеть так:
Адаптивное меню для саита

Как видите — ничего сложного, думаю, по мере необходимости вы сами сможете усовершенствовать его.
Теперь давайте добавим стили:

  #menu {   background: #2ba9c0;   width: 100%;   padding: 10px 0;   text-align: center;  }    #menu a {   color: #fff;   text-decoration: none;   padding: 12px 12px;  }    #menu a:hover {   border-bottom: 4px solid #fff;   background: #078ecb;  }    .itemsMenu li {   display:inline;   padding-right: 35px;   width:100%;   margin: 0 auto;  }   .itemsMenu li img{   vertical-align: middle;   margin-right: 10px;   }    .iconMenu {   color: #fff;   cursor: pointer;   display: none;  }  .showitems {   display:block !important;  }    @media screen and (max-width: 600px) {   #menu a{   padding-bottom: 13px;   }   #menu a:hover {   border-bottom: none;   }   .iconMenu {   display:block;   }   .itemsMenu {   display:none;   }   .itemsMenu li {   display:block;   padding:10px 0;   }  }  

Теперь, при уменьшении окна браузера вы увидите следующую картину:

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

Мне бы очень не хотелось описывать каждую строчку, ведь блог не о верстке как таковой. Давайте я просто попытаюсь объяснить.

Сначала элементам li задаем свойство display:inline, чтобы сделать их расположение горизонтально друг за дружкой. Можно было бы использовать float:left, но решил таким образом сделать. И скрываем иконку меню свойством display:none. Когда разрешение экрана меньше 600 пикселей, убираем inline, у элементов li, и скрываем их, а показываем иконку. В двух словах — так.

Теперь нам нужен простенький скрипт, который бы обрабатывал клик по иконке меню и показывал бы его элементы:

  $(function() {   $('.iconMenu').click(function() {   if($('.itemsMenu').is(':visible')) {   $('.itemsMenu').removeClass('showitems');   }   else {   $('.itemsMenu').addClass('showitems');   }  });  });    

Вот так. Я его вынес в отдельный файл и подключил перед закрывающимся тегом body.
адаптивное меню на css3

Вот и все. Таким образом можно быстро сверстать простое адаптивное меню для landing page.

Конечно, есть недостатки. Отступы заданы в пикселях, но можно задать все расстояния и в процентном соотношении. Просто в этом не было необходимости. Если бы это был полноценный сайт, то и иконки бы я использовал в svg или шрифтовые, а не png и отступы бы пересчитал в процентах. А так, это был небольшой экспромт 🙂 Надеюсь все понятно? Пока.

Скачать исходник

smartlanding.biz


You May Also Like

About the Author: admind

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.