Тег | htmlbook.ru
Internet Explorer | Chrome | Opera | Safari | Firefox | Android | iOS | |
HTML4 | 3.0+ | 1.0+ | 3.5+ | 1.0+ | 1.0+ | 1.1+ | 1.0+ |
HTML5 |
Спецификация
HTML: | 3.2 | 4.01 | 5.0 | XHTML: | 1.0 | 1.1 |
Описание
Тег <menu> предназначен для отображения списка пунктов меню. Аналогично тегам <ol> и <ul> внутри контейнера <menu> список формируется с помощью тегов <li>.
В HTML4 тег <menu> вышел из употребления, вместо него рекомендуется использовать тег <ul>. В HTML5 тег <menu> вновь включен, но уже в другом качестве. Теперь он выступает контейнером для тега <command> и создания меню.
Синтаксис
HTML |
|
HTML5 |
|
Атрибуты
- label
- Устанавливает видимую метку для меню.
- type
- Задает тип меню.
Закрывающий тег
Обязателен.
Валидация
Использование этого тега осуждается спецификацией HTML4, валидный код получается только при использовании переходного <!DOCTYPE>. В HTML5 применение тега <menu> корректно.
Пример 1
HTML 4.01IECrOpSaFx
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Тег MENU</title> </head> <body> <p><strong>В этом выпуске:</strong></p> <menu> <li>Русская кухня. Уха бурлацкая</li> <li>Украинская кухня. Вареники</li> <li>Молдавская кухня. Паприкаш</li> <li>Кавказская кухня. Суп-харчо</li> <li>Прибалтийская кухня. Вертиняй</li> </menu> </body> </html>
Результат данного примера показан на рис. 1.
Рис. 1. Вид списка, созданного с помощью тега <menu>
Пример 2
HTML5IECrOpSaFx
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Тег MENU</title>
</head>
<body>
<menu type="toolbar">
<li>
<menu label="Файл">
<button type="button">Новый...</button>
<button type="button">Открыть...</button>
<button type="button">Сохранить</button>
</menu>
</li>
<li>
<menu label="Правка">
<button type="button">Копировать</button>
<button type="button">Вырезать</button>
<button type="button">Вставить</button>
</menu>
</li>
</menu>
</body>
</html>
Горизонтальное меню для сайта на HTML+CSS готовые шаблоны | Как создать красивое горизонтальное выпадающее меню с примером
Доброго времени суток, дорогие читатели. Сегодня мы разберем тему «как сделать горизонтальное меню используя HTML и CSS». Меню, как правило, находится в шапке сайта и является перечнем ссылок на самые важные страницы, его также называют главным меню. Данные ссылки пользователи будут постоянно нажимать. То, как вы их расположите и какой дизайн вы зададите меню будет влиять на поведение пользователей, конверсию, их общее впечатление от вашего сайта и, конечно, на seo-продвижение.
HTML-код для горизонтального меню
Когда-то давно главное меню для сайта делали на картинках, таблицах, флэше и возможно на чем-то еще, но в наше время существует самый популярный и он же правильный метод создания меню используя теги «списка».
Для создания меню используют теги <ul>, <li> и <a>.
Если вам не совсем понятно, что такое эти html-теги, css, таблицы, то почитайте об основных технологиях для создания сайта.
Пример использования html тегов для создания меню в коде ниже:
<ul> <li><a href="#">Главная</a></li> <li><a href="#">Услуги</a></li> <li><a href="#">Цены</a></li> <li><a href="#">Контакты</a></li> </ul>
Стандартные CSS стили для горизонтального меню
ul { list-style: none; /*убираем маркеры списка*/ margin: 0; /*убираем отступы*/ padding-left: 0; /*убираем отступы*/ } a { text-decoration: none; /*убираем подчеркивание текста ссылок*/ } li { float:left; /*Размещаем список горизонтально для реализации меню*/ margin-right:5px; /*Добавляем отступ у пунктов меню*/ }
Мы получаем готовое верхнее меню в шапку, без каких-либо особых стилей и наворотов это можно назвать каркасом вашего будущего красивого меню. Если вы скопируете и поставите у себя данный html и css это будет выглядеть следующим образом.
Пример каркаса (шаблона) вашего будущего меню
Получилось все достаточно простенько, вы ,конечно же, хотите сразу красивое главное меню, но без понимания основ у вас просто не получится создать хорошее меню без ошибок в html и css.
Существует так же несколько других CSS методов используемых для того чтобы сделать меню горизонтальным помимо float:left;, например, display:inline-block; или display:flex;, но рекомендуется использовать способ описанный выше.
Давайте же наполним наш шаблон меню различными стилями и сделаем его красивым.
Примеры красивого горизонтального меню для сайта
Сейчас я приведу несколько готовых примеров с готовым дизайном горизонтального меню.
Все «красивости» вы можете создать для своего сайта сами, а не искать в интернете. Проще всего это сделать взяв за основу один из примеров ниже
Простое меню синего цвета с раздельными пунктами
CSS стили «верхнего» меню
Ниже расположены стили данного меню. HTML остается тем же, что и в «каркасе» меню.
ul { list-style: none; /*убираем маркеры списка*/ margin: 0; /*убираем отступы*/ padding-left: 0; /*убираем отступы*/ margin-top:25px; /*делаем отступ сверху*/ } a { text-decoration: none; /*убираем подчеркивание текста ссылок*/ background:#30A8E6; /*добавляем фон к пункту меню*/ color:#fff; /*меняем цвет ссылок*/ padding:10px; /*добавляем отступ*/ font-family: arial; /*меняем шрифт*/ border-radius:4px; /*добавляем скругление*/ -moz-transition: all 0.3s 0.01s ease; /*делаем плавный переход*/ -o-transition: all 0.3s 0.01s ease; -webkit-transition: all 0.3s 0.01s ease; } a:hover { background:#1C85BB;/*добавляем эффект при наведении*/ } li { float:left; /*Размещаем список горизонтально для реализации меню*/ margin-right:5px; /*Добавляем отступ у пунктов меню*/ }
Главное меню, расположенное на цветной линии с красным фоном
CSS стили меню на цветной линии
ul { list-style: none; /*убираем маркеры списка*/ margin: 0; /*убираем отступы*/ padding-left: 0; /*убираем отступы*/ margin-top:25px; /*делаем отступ сверху*/ background:#FF4444; /*добавляем фон всему меню (заменив этот параметр, вы поменяете цвет всего меню)*/ height: 50px; /*задаем высоту*/ } a { text-decoration: none; /*убираем подчеркивание текста ссылок*/ background:#FF4444; /*добавляем фон к пункту меню (заменив этот параметр, вы поменяете цвет всех пунктов меню)*/ color:#fff; /*меняем цвет ссылок*/ padding:0px 15px; /*добавляем отступ*/ font-family: arial; /*меняем шрифт*/ line-height:50px; /*ровняем меню по вертикали*/ display: block; border-right: 1px solid #F36262; /*добавляем бордюр справа*/ -moz-transition: all 0.3s 0.01s ease; /*делаем плавный переход*/ -o-transition: all 0.3s 0.01s ease; -webkit-transition: all 0.3s 0.01s ease; } a:hover { background:#D43737;/*добавляем эффект при наведении*/ } li { float:left; /*Размещаем список горизонтально для реализации меню*/ }
Выпадающее меню на HTML+CSS
Для реализации дополнительного выпадающего (раскрывающегося) меню на сайте у какого-либо пункта меню нам необходимо добавить дополнительный перечень пунктов в HTML-код для какой-либо ссылки из горизонтального меню и изменить стили CSS. В стилях мы будем применять простой трюк — изменение отображения раскрывающегося меню по средствам наведения на нужный нам пункт в верхнем меню. Для примера возьмем пункт «услуги».
Пример создания простого выпадающего меню
HTML код выпадающего меню
<ul> <li><a href="#">Главная</a></li> <li><a href="#">Услуги</a> <ul> <li><a href="#">Услуга 1</a></li> <li><a href="#">Длинная услуга 2</a></li> <li><a href="#">Услуга 3</a></li> </ul> </li> <li><a href="#">Цены</a></li> <li><a href="#">Контакты</a></li> </ul>
Стили CSS выпадающего меню
ul { list-style: none; /*убираем маркеры списка*/ margin: 0; /*убираем отступы*/ padding-left: 0; /*убираем отступы*/ margin-top:25px; /*делаем отступ сверху*/ background:#819A32; /*добавляем фон всему меню*/ height: 50px; /*задаем высоту*/ } a { text-decoration: none; /*убираем подчеркивание текста ссылок*/ background:#819A32; /*добавляем фон к пункту меню*/ color:#fff; /*меняем цвет ссылок*/ padding:0px 15px; /*добавляем отступ*/ font-family: arial; /*меняем шрифт*/ line-height:50px; /*ровняем меню по вертикали*/ display: block; border-right: 1px solid #677B27; /*добавляем бордюр справа*/ -moz-transition: all 0.3s 0.01s ease; /*делаем плавный переход*/ -o-transition: all 0.3s 0.01s ease; -webkit-transition: all 0.3s 0.01s ease; } a:hover { background:#D43737;/*добавляем эффект при наведении*/ } li { float:left; /*Размещаем список горизонтально для реализации меню*/ position:relative; /*задаем позицию для позиционирования*/ } /*Стили для скрытого выпадающего меню*/ li > ul { position:absolute; top:25px; display:none; } /*Делаем скрытую часть видимой*/ li:hover > ul { display:block; width:250px; /*Задаем ширину выпадающего меню*/ } li:hover > ul > li { float:none; /*Убираем горизонтальное позиционирование*/ }
А чтобы понять, какие именно у вас должны быть услуги и категории рекомендую ознакомиться с материалом: составление структуры и семантического ядра.
Я постарался максимально кратко рассказать вам о том как создать главное горизонтальное меню, сделать несколько шаблонов, как добавить к нему простые стили и сделать его симпатичнее, как сделать выпадающее меню для вашего сайта. Для удобства я собрал все меню, представленные выше, в одном html-файле, который вы можете скачать ниже. Выглядит это как на скриншоте:
Поделитесь в одной из социальных сетей и скачивание сразу же будет доступно.
Благодарю за внимание.
Создание выпадающего (drop-down) меню, используя только HTML и CSS, без jQuery
Сразу говорю, здесь мы не будем рассматривать меню с различными эффектами на jQuery (типо выпадания, выдвижения и прочее).
Только CSS и HTML, невероятно, но этого вполне достаточно для создания весьма неплохих менюшек.
HTML
Обычно менюшки создаются при помощи <ul>-списков. Кстати говоря, если на WordPress меню будет сгенерировано функцией wp_list_categories или функцией wp_nav_menu(), то тоже всё будет отлично работать. Главное не напутать с классами и айдишниками элементов списка. Это предельно важно.
Пока что я покажу вам только как сделать менюшку с одним уровнем вложенности, в данном случае главное — уловить саму суть.
<ul> <li><a href="#">WordPress</a> <ul> <li><a href="#">плагины</a></li> <li><a href="#">темы</a></li> <li><a href="#">хаки</li> </ul> </li> <li><a href="#">Joomla</a> <ul> <li><a href="#">компоненты</a></li> <li><a href="#">модули</a></li> </ul> </li> <li><a href="#">Drupal</a></li> </ul>
Пунктов может быть сколько угодно, выпадающих списков тоже, просто создаёте их по шаблону, подставляя лишь вместо символов #
свои ссылки.
CSS
Здесь тоже всё довольно просто, к тому же часть кода ниже я использовал чисто для оформления, свой цвет фона, цвет ссылок и прочее (важное отмечено /* (!) */).
#my-drop-down-menu ul, ul#my-drop-down-menu{ list-style:none; } #my-drop-down-menu{ position:relative; /* (!) */ z-index:3; width:300px; height:20px; margin:0 auto; } #my-drop-down-menu li.list{ float:left; /* (!) */ display:block; /* (!) */ margin:0 5px; } #my-drop-down-menu a{ color: #61ADB0; text-decoration:none; } #my-drop-down-menu ul.child{ background: #463935; padding:5px; position:absolute; /* (!) */ top:29px; /* (!) */ left:-9999px; /* (!) */ z-index:3; border-top: 1px solid #3A2E2B; -moz-box-shadow: 0px 3px 7px #251d1b; -webkit-box-shadow: 0px 3px 7px #251d1b; box-shadow: 0px 3px 7px #251d1b; } #my-drop-down-menu li:hover ul.child{ left:auto; /* (!) */ } #my-drop-down-menu li a.link{ display:block; padding:5px; } #my-drop-down-menu li:hover a.link{ background: #463935; }
Аналогично можно добавлять ещё больше уровней вложенности, вставляя <ul> в <li>
Повторяюсь, зеленым цветом я отметил стили, которые необходимы для того, чтобы меню нормально работало (выпадало).
Миша
Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школах Epic Skills и LoftSchool.
Если вам нужна помощь с сайтом или разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда будем рады вам помочь!
Создание простого меню для сайта на HTML и CSS
И снова всех приветствую на нашем проекте! Сегодня у нас будет рассмотрен урок на тему создание простого меню для сайта. Тема очень распространенная, но надеюсь Вы сможете для себя, как новичок, получить полезные знания и возможно просто разобраться, как это реализуется.
Данный урок был записан по просьбе одного из наших постоянных читателей, поэтому другие темы и не рассматривались. После чего я, вместе со своим напарником по разработке, Евгением Кузьменко, подготовил для Вас выпадающее меню для сайта. С данным уроком Вы можете ознакомиться, как на сайте прочитав статью, так и по видео уроку, чтобы более детально понять основные принципы реализации выпадающего меню. Кстати, по поводу создания меню, также рассказывали и в других уроках, например таких как: Создание меню в Битрикс, Делаем меню как в nexus или например, как Адаптивное меню SlickNav, поэтому можете рассмотреть и их, вдруг что-то окажется полезным и пригодится!
Первый шаг. HTML.
И так, переходим к первому шагу данного урока и сначала нам нужно подключить файл demo.css, который лежит у нас в папочке css, а затем уже подключаем шрифт Open Sans. Ребята, я рассказываю все по демо, поэтому Вы можете все делать по своему усмотрению.
<link rel="stylesheet" href="css/demo.css"> <link href="http://allfont.ru/allfont.css?fonts=open-sans" rel="stylesheet" type="text/css" />
Далее нам нужно создать обычный маркированный список ul li, а также задать первому ul идентификатор nav, чтобы мы могли работать через него, обращаясь к стилям css. Делается это очень просто, не знаю, что тут можно описать, поэтому скидываю сразу структуру, как в демо.
<ul> <li> <a href="">Ссылка</a> <ul> <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> <ul> <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> <ul> <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> <ul> <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> <ul> <li><a href="">Ссылка</a></li> <li><a href="">Ссылка</a></li> <li><a href="">Ссылка</a></li> <li><a href="">Ссылка</a></li> </ul> </li> </ul>
Второй шаг. CSS.
Переходим к стилям CSS и первым делом, мы должны установить тот шрифт, который прописали вначале данного урока, а именно Open Sans. После того, как наш шрифт успешно прописан, переходим уже к самому каркасу нашего маркированного списка, которому зададим определенные свойства, а также расположение и позиционирование элементов. Заметим, что мы создаем горизонтальное меню, поэтому применяем свойство float left.
#nav{ font-family: 'Open Sans', arial; } #nav li{ float:left; /* все ссылки идут слева на право */ position:relative; list-style:none; /* убираем точки */ background:#ff3131; width:190px; }
Убираем у каждой ссылки нашего меню нижнее подчеркивание, а также придаем белый цвет. Далее, чтобы при наведении на выпадающее меню основная ссылка была выделена, задаем идентификатор active, а также не забываем про сам цвет при наведении всех элементов данного меню. Так как у нас имеется выпадающее меню, нам соответственно нужно его будет скрыть. Для этого прописываем свойство visible и указываем ему параметр hidden, а также не забываем про абсолютное позиционирование данного элемента.
#nav a{ text-decoration:none; display:block; /* делаем блочным элементов тег "a" */ padding:35px 65px; color:#ffffff; } #active a, #nav li:hover > a{ background:#b32424; } #nav ul { visibility:hidden; /* скрываем выпадающее меню */ padding:0; position:absolute; }
Теперь после того, как наше меню успешно скрыто, нам нужно сделать выпадающее меню. Это реализовать достаточно просто, нужно задать элементу меню с идентификатором nav свойство visible. Тем самым мы получим результат выпадающего меню. Далее все по стандарту, изменяем выпадающее меню на наше усмотрение, задаем ему отступы и цвет. Не забываем указать свойство left 0 при ховере, ведь без него все выпадающее меню поедет и соответственно будет не очень красиво. (пункт 1)
#nav li:hover > ul{ visibility:visible; /* показываем выпадающее меню при наведении */ position: relative; } #nav ul a{ padding:18.5px 65px; /* делаем отступы выпадающего меню меньше от основного */ } #nav ul li:hover{ background:#d92a2a; } #nav li:first-child:hover > ul{ left: 0px; /* при наведении на первый элемент чтобы не съежало выпадающее меню */ }
Так как Евгений, подготовил макет данного меню, то все моменты связанные с его дизайном, мы реализовали с Вами в соответствии. Теперь, нам нужно реализовать border меню, так как он имеют некую функциональную особенность. Давайте ее рассмотрим. Для начала нам потребуется сделать border справа для основного меню, затем чтобы border не было слева нам нужно указать основному меню задать свойство none.
#nav > li{ border-right: 2px solid #d92a2a; /* добавляем рамку к основному меню справа */ } #nav > li:last-child{ border-right: none; /* убираем рамку справа основного меню */ }
Теперь, пора перейти к выпадающему меню, где функциональные свойства намного покажутся сложнее основного меню, ведь нам придется задавать определенные свойства элементам. Для начала укажем border для двух сторон выпадающего меню, а именно для правой стороны и левой. И напоследок нам будет необходимо скрыть с помощью свойства border none правую и левую сторону меню.
#nav > li ul li{ border-left: 2px solid #d92a2a; /* добавляем рамку к выпадающему меню слева */ border-right:2px solid #d92a2a; /* добавляем рамку к выпадающему меню справа */ } #nav li:first-child ul li,#nav li:first-child ul{ border-left:none; /* убираем рамку у выпадающего меню слева */ } #nav li:last-child ul li,#nav li:last-child ul{ border-right:none; /* убираем рамку у выпадающего меню справа */ }
Проверяем все на сайте и видим, что все отлично работает, кроме одной детали, а именно наше выпадающее меню при наведении на вторую ссылку и последующую сдвигается немного вправо. Для этого, чтобы устранить данную проблему, мы задаем элементу меню с идентификатором nav свойство left и в качестве параметра даем ему минус два. (см. пункт 1)
#nav li:hover > ul{ left: -2px; /* смещаем выпадающее меню слева от размера рамки*/ }
Проверяем все на сайте и видим, что мы теперь действительно все сделали верно и можем заканчивать данный урок.
Я благодарю Вас за ваше внимание, за ваши комментарии, а также за то, что Вы ознакомились с данным уроком и надеюсь, смогли для себя что-то выделить и подчеркнуть. А я с Вами прощаюсь и в следующем уроке мы рассмотрим тему меню сопровождением звуковой анимацией. Всем удачи!)
Роман Краутер
Адаптивное меню на CSS flexbox
Всем привет! На начало 2018 года, по данным сайта Can I Use, верстка на flexbox-ах, поддерживается браузерами на 97.8%. Это отличные показатели для этой уже далеко не новой технологии по верстки сайтов. Теперь уже нет причин, почему не пользоваться этим удобным способом верстки. Чем мы сейчас и займемся.
Сверстав несколько макетов на CSS flexbox-ах, уже не хочется возвращаться к устаревшим float-ам и даже к такому любимому среди верстальщиков фреймворку, как Bootstrap. Хотя, Bootstrap ещё рано списывать со счетов, ведь используя его знаменитую сетку, можно «не париться» по поводу медиа запросов.
На этом уроке мы сверстаем шапку сайта с типичным адаптивным меню с применением flexbox CSS метода.
Шапка состоит из трех логичных блоков:
- Блок с логотипом
- Блок с меню, сделанное на списках
- Блок с иконкой и номером телефона
Эти три блока будут помещены в общий внешний блок-обертку header, который внутри себя будет делать display: flex; для трех блоков.
Внутри блока nav, еще раз пропишем display: flex; для пунктов меню. Таким образом мы добьёмся гибкости, при уменьшении размеров экрана, пункты меню могут выстраиваться друг под другом.
Для наглядной демонстрации сделаем всю HTML разметку для шапки сайта.
<body>
<header>
<div>
<a href="#"><img src="img/logo.png" alt=""></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>
</ul>
</nav>
<div>
<i aria-hidden="true"></i>
+380973457685
</div>
</header>
</body>
Так будет выглядеть шапка без применения стилей, так и должно быть.
А сейчас внимание! Достаточно указать двум блокам display: flex; и всё содержимое шапки вытянется в строчку.
.header {
display: flex;
}.header .menu ul {
display: flex;
}
Вот так работает flexbox.
Добавим стили и шапка готова. Дальше нам нужно будет её адаптировать под разные размеры экранов. Обратите внимание, как мало написано кода.
*{
margin: 0;
padding: 0;
}body {
background-color: #fff;
font-family: "Open Sans", sans serif;
line-height: 1.5;
}
.header {
border: 2px solid #ccc;
display: flex;
flex-wrap: wrap; /*перенос строки */
justify-content: space-between; /*прижимает содержимое к краям */
align-items: center; /*выравнивает элементы по центру на вертикальной */
}
.header .logo {
padding-left: 30px;
}
.header .menu ul {
display: flex;
list-style: none;
}
.header .menu ul li {
margin: 20px 10px;
}
.header .menu ul a {
text-transform: uppercase;
text-decoration: none;
font-weight: bold;
color: #06a327;
}
.phone {
font-size: 110%;
color: #333;
padding-right: 40px;
}
Работаем над адаптивностью шапки
Суть процесса по адаптивности сайта заключается в поиске контрольных точек, при которых элементы сайта будут не видны или выглядеть небрежно. Наша задача при сжатии браузера по ширине, увидеть проблему и исправить, дописав соответствующий код (медиа запрос) в файл стилей.
Например, на ширине экрана 900 пикселей, блок с телефон прижался к левому краю шапки.
Решение проблемы, вы видите ниже. Выравниваем блок .phone по центру.
@media screen and (max-width: 900px) {
.phone {
margin: auto;
}
}
На ширине экрана 500 пикселей начинает срезаться меню, так как не помещается в строчку.
Легким движением руки для ul, прописываем свойство flex-direction: column; которое возвращает списки в естественное блочное состояние.
@media screen and (max-width: 500px) {
.header {
flex-direction: column;
}
.header .menu ul {
flex-direction: column;
align-self: center;
}
.header .menu ul li {
margin: 5px;
}
}
Разобраться с адаптивной версткой на flexbox-ах, Вам поможет этот видеокурс «Вёрстка сайта с нуля»
- Создано 08.03.2018 10:18:00
- Михаил Русаков
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Большой обзор красивых многоуровневых меню с codepen / Блог компании mr. Gefest / Хабр
Хабр, привет!
На С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 решений. Если хотите и дальше их читать, то пройдите снизу опрос.
Всем приятной работы.
Создание меню html / css
Основы верстки
Чаще всего меню создается на основе не упорядоченных списков ul
. В каждый пункт li
вкладывается гиперссылка a
.
Можно создавать меню и на основе блоков div
, таблиц table
или списков определений dl
.
Но традиционной является конструкция ul
.
Код простейшего меню будет выглядеть так:
<ul> <li><a href="#/">пункт 1</a></li> <li><a href="#/">пункт 2</a></li> <li><a href="#/">пункт 3</a></li> <li><a href="#/">пункт 4</a></li> <li><a href="#/">пункт 5</a></li> </ul>×
Примечание
В процессе разработки удобно указывать адрес гиперссылки — #/
. Во-первых, она никуда не ведет, а во-вторых — не происходит перехода к началу страницы.
Целью гиперссылки будет соответствующая страница вашего сайта или внешняя ссылка. Адрес внутренней страницы может быть как абсолютным, так и относительным. Внешней ссылки — только абсолютный. (Если забыли — смотрите Абсобютные и относительные ссылки).
Хорошим тоном считается все стили сайта оформлять одним сжатым файлом. Но на время разработки гораздо удобнее иметь отдельные файлы для определенных элементов страницы, в данном случае для навигационного меню.
Поэтому предварительно нужно создать файл, например my-menu.css, и подключить его.
<!-- Подключение таблицы стилей --> <!DOCTYPE html> <html> <head> ... <title>Создание меню</title> <link rel="stylesheet" href="css/MAIN.css" type="text/css" /> <link rel="stylesheet" href="css/my-menu.css" type="text/css" /> ... </head> <body> ... </body> </html>
Позже код можно будет перенести в общий файл, а этот удалить (или отключить).
Как прописываются стилевые правила для меню
Необходимо создать классы, и прописывать стили уже для них. Потому что если задавать стили непосредственно для тегов, например:
/* Не желательно! */ ul li a {color: #f00;}
то это правило будет распространяться и на все ссылки, включенные в списки за пределами меню! Кроме того, на сайте может быть несколько меню различного оформления.
Вторая причина, по которой желательно работать с классами, а не с тегами напрямую — возможность разбить стили по группам. За каждую тематическую группу стилей будет отвечать свой класс.
Например, можно создать класс .menu_color
, который будет отвечать за цветовое оформление. В дальнейшем это значительно упростит работу по изменению цветового оформления меню.
Каким тегам нужно присваивать классы
Хороший вопрос. Для начала, неплохо создать дополнительный контейнер-обертку и присвоить класс ему.
Да, это дополнительная разметка, но оформлять меню будет гораздо удобнее. Кроме того, если в качестве контейнера использовать не div
, а nav
, то верстка будет более семантической (осмысленной) и удобной для поисковых систем (ПС), что является несомненным плюсом. Второй класс присваиваем тегу ul
.
<nav> <ul> <li><a href="#/">пункт 1</a></li> <li><a href="#/">пункт 2</a></li> <li><a href="#/">пункт 3</a></li> <li><a href="#/">пункт 4</a></li> <li><a href="#/">пункт 5</a></li> </ul> </nav>
Почему именно так?
Присвоение класса .menu_color
тегу nav
дает больше возможности для оформления, чем присовение его тегу ul
, а класс .my_menu
отвечает только за разметку меню и никакого отношения к содержащему контейнеру иметь не должен.
При этом всегда надо держать в уме, что навигационный блок находится в определенном внешнем блоке сайта и его местоположение и некоторые свойства, например связанные с внешними отступами или направлением выпадения подменю (подробнее об этом в материале «Выпадающее меню») зависят от внешних классов глобальной разметки сайта.
Какие имена должны быть у классов
Осмысленные. В идеале, любое имя класса должно давать представление об объекте и назначении. В приведенном выше примере используются классы nav.menu_color
и ul.my_menu
.
Первый отвечает за цветовое оформление всех элементов и, в тоже время, дает понять что относится к меню.
Второй идентифицирует список как собственно меню.
Внимание!
Старайтесь выбирать имена для классов не только внятные, но и уникальные. В противном случае они могут конфликтовать с уже существующими классами.
Имеено по-этому я выбрал класс .my_menu
, так как на сайте уже есть класс .menu
со своими стилями.
Это то, чем никогда не озадачиваются начинающие верстальщики, а опытные часто пренебрегают … А потом, когда нужно внести изменения в уже созданное меню чтобы адаптировать его для другого сайта, или вывести в другой позиции — долго и нудно переделывают.
На самом деле, все очень просто. Изначально, на этапе создания нужно группировать стили тематически и включать их в соответствующие классы.
Например, за цветовое оформление у нас отвечает класс .menu_color
/* === Группа цветового оформления === */ /* Цвет фона менд */ .menu_color { background: gray; } /* Оформление пункта меню */ .menu_color > ul > li > a { background: transparent; color: #f5f5f5; } ... /* === Группа разметки основного меню === */ /* Сброс и установка стилей по умолчанию */ .my_menu { list-style: none; margin: 0; padding: 0; } /* Разметка для пункта меню */ .my_menu li a { display: block; margin: 0; padding: 12px 20px; text-decoration: none; }
Т.е. все стили, определяющие цветовое оформление того или иного элемента меню, должны быть привязаны к классу .menu_color
, а стили отвечающие за разметку — соответственно .my_menu
.
При необходимости, для тега nav
также можно добавить дополнительный класс, чтобы не залезать на территорию «цветового оформления» …
Обычно выводится в одной из боковых колонок сайта. Чаще выполняет функции дополнительной навигации, реже — главное меню сайта.
Простое вертикальное меню
Исходный html-код меню будет выглядеть так:
<nav> <ul> <li><a href="#/">пункт 1</a></li> <li><a href="#/">пунтк 2</a></li> <li><a href="#/">пункт 3</a></li> <li><a href="#/">пункт 4</a></li> <li><a href="#/">пункт 5</a></li> </ul> </nav>
Кроме основных классов, рассмотренных в предыдущем материале, добавлен класс li.active
для активного пункта (ссылка на текущую страницу).
Сброс и установка стилей по умолчанию
Файл my-menu.css
/* Убираем маркеры и отступы */ .my_menu { list-style:none; margin:0; padding:0; } .my_menu li { margin:0; padding:0; position:relative; } /* Общие правила для пунктов меню */ .my_menu li a { display:block; margin:0; padding:12px 20px; text-decoration: none; } /*Наведение на активный пункт меню - курсор обычный */ .my_menu li.active > a:hover { cursor: default; }
Цветовое оформление
×Примечание
На практике не обязательно применять все стили, достаточно лишь некоторые. Например при наведении иногда достаточно изменение только цвета ссылки или добавить подчеркивание.
/* === Цветовое оформление menu_color === */ .menu_color { background:#555; } /* Оформление пункта */ .menu_color > ul > li > a { color:#999; background: rgba(0, 0, 0, 0); } /* Подсветка пункта при наведении */ .menu_color > ul > li > a:hover { color: #bbb; background: rgba(0, 0, 0, 0.1); } /* Активный пункт */ .menu_color > ul > li.active > a, .menu_color > ul > li.active > a:hover { color:#fff; background:rgba(0, 0, 0, 0.4); }
Пояснения:
- Если возникнет необходимость к определенным пунктам меню добавить подпункты, т.е. сделать меню многоуровневым, то конструкция
.menu_color > ul > li > a
позволит ограничить применение стилей только к пунктам меню первого уровня. Для подменю можно будет прописать другие стили оформления. - Использование прозрачности при задании цвета фона —
background: rgba(0, 0, 0, 0.1)
. Это универсальное режение для любого темного бэкграунда. Если вы решите изменить цвет фона меню, фон активного пункта и подсветка пунктов при наведении изменятся автоматически. Впрочем, ничто не мешает вам задать понравившиеся цвета явно.
Замечание
Цвет фона меню задавать не обязательно, если он наследуется от родительского блока.
Разделители пунктов
/* Разделитель пунктов меню */ .menu_color > ul > li + li > a { border-top: 1px solid rgba(255, 255, 255, 0.1); box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.15); }
Повторяем тот же трюк с использованием rgba. Цвета для верхней границы и тени заданы полупрозрачными — черный 15% прозрачности и белый 10% соответственно.
Это универсальное режение для любого темного бэкграунда. Если вы решите изменить цвет фона, то цвет рамки и тени изменится автоматически!
До этого момента рассматривалось простое одноуровневое меню. Как показывает практика, очень часто, через какое-то время возникает необходимость к одному или нескольким основным пунктам добавить подпункты. Поэтому:
Изначально любое меню нужно создавать как многоуровневое!
В последние годы реально-многоуровневые меню уходят в прошлое. Двух уровней, обычно, вполне достаточно, остальные — оформляются отдельным дополнительным меню.
HTML-код 2-х уровневого меню:
<nav> <ul> <li><a href="#/">пункт 1</a></li> <li><a href="#/">родительский пункт 2</a> <ul> <li><a href="#/">дочерний подпункт 1</a></li> <li><a href="#/">дочерний подпункт 2</a></li> </ul> </li> <li><a href="#/">пункт 3</a></li> <li><a href="#/">пункт 4</a></li> <li><a href="#/">пункт 5</a></li> </ul> </nav>
Добавлены классы li.parent
— родительский тег, содержащий подменю, и ul.sub-menu
— вложенный список выпадающего меню.
Цветовое оформление
/* Оформление sub-menu */ .menu_color .sub-menu { background: #f5f5f5; border: 1px solid #f5f5f5; } /* Офррмление подпунктов */ .menu_color .sub-menu li a{ color: #555; background: rgba(0, 0, 0, 0); } /* Офррмление подпунктов при наведении */ .menu_color .sub-menu li a:hover{ color: #fff; background: #555; } /* Разделитель для пунктов sub-menu */ .menu_color .sub-menu > li + li > a { border-top: 1px solid #fff; box-shadow: 0 -1px 0 #ddd; padding-left: 40px /* Добавляем отступ для подпунктов */ }
Чтобы не усложнять код, размеры и отступы оставлены те же, что и в основном меню.
Позиционирование и скрытие
Позиционирование осуществляется относительно родительского li.parent
. (Именно для этого при сбросе и установке для него было задано position: relative;
)
/*Общие*/ .my_menu .sub-menu { display: none; position: absolute; top: 0; min-width: 200px; z-index: 9999; }
Вывод
В зависимости от расположения основного меню (левая/правая боковая колонка), подменю может выпадать как вправо, так и влево. Поэтому для определения стилевых правил используем класс родительского блока .sidebar_left
(В исходном html-коде класс не указан, т.к. к коду меню отношения не имеет).
/* Вывод */ .my_menu .parent:hover .sub-menu { display: block; top: 4px; } /* со смещением вправо */ .sidebar_left .my_menu .parent:hover .sub-menu { left: 100%; margin-left: -10px; }×
Информация
Если у родительского блока нет класса, или он применяется как к правой так и к левой колонкам — нужно этот класс добавить к тегу nav.menu_color.sidebar_left
.
Если навигационное меню расположено в правой колонке, то будет логично если подменю выпадает слева. В противном случаее оно может оказаться за пределами экрана.
/* Смещение влево */ .sidebar_right .my_menu .parent:hover .sub-menu { right: 100%; left: auto; margin-right: -5px; }
Простая анимация
Что мы будем анимировать. В данном случае, эффекты довольно простые:
Переопределение существующих стилей:
/* Оформление пункта */ .menu_color > ul > li > a { color: #999; background: rgba(0, 0, 0, 0); /* добавляем код */ -webkit-transition: all .3s; -moz-transition: all .3s; -o-transition: all .3s; transition: all .3s; } /* Офррмление подпунктов */ .menu_color .sub-menu li a{ color: #555; background: rgba(0, 0, 0, 0); /* добавляем код */ -webkit-transition: all .3s; -moz-transition: all .3s; -o-transition: all .3s; transition: all .3s; }
А вот с плавным появленем подменю проблема …
Дело в том, что использовать display: none;
для того чтобы скрыть подменю нельзя — анимация работать не будет. Поэтому рассмотрим другой способ.
Скрытие подменю. Вариант 2
Альтернативным способом является смещение меню в исходном состоянии за пределы экрана + полная прозрачность.
/* Переопределение sub-menu*/ .my_menu .sub-menu { display: block; /* переопределено */ position: absolute; top: 0; width: 200px; z-index: 9999; /* Добавить */ opacity: 0; -webkit-transition: opacity .5s, top .7s; -moz-transition: opacity .5s, top .7s; -o-transition: opacity .5s, top .7s; transition: opacity .5s, top .7s; } /* Смещение за экран */ .my_menu .sub-menu { left: -3000px; } /* Переопределяем эффект отображения при наведении*/ .my_menu .parent:hover > .sub-menu { display: block; top: 4px; /* Добавить */ opacity: 1; }
Раздвижное меню-аккордеон
×Несколько слов вступления
В данном примере рассмотрена технология создания аккордеон-меню, раскрывающегося по hover
.
Я бы не рекомендовал без необходимости использовать такое меню на сайте. Элементы страницы не должны жить своей жизнью (хлопающие как простыни на ветру подменю, раскрывающиеся аккордеоны, если его не аккуратно задеть мышкой …
Аккордеон должен раскрываться по click
, а это уже JS. А рассмотрение javascript выходит за рамки раздела HTML/CSS…
Попробуем создать аккордеон-меню из простого выпадающего меню, внеся минимальные изменения в код разметки и стили.
Добавлен класс my_accordion
к классу родительского контейнера, а класс .sub-menu
заменен на .sub-accordion-menu
. Можно было бы не заменять, а просто переопределить, но это усложнит пример для понимания.
<nav> <ul> <li><a href="#/">пункт 1</a></li> <li><a href="#/">родительский пункт 2</a> <ul#/">дочерний подпункт 1</a></li> <li><a href="#/">дочерний подпункт 2</a></li> </ul> </li> <li><a href="#/">пункт 3</a></li> <li><a href="#/">пункт 4</a></li> <li><a href="#/">пункт 5</a></li> </ul> </nav>
/* === Группировка классов === */ /* Убираем маркеры и отступы */ .my_menu, .sub-menu, .sub-accordion-menu { list-style:none; margin:0; padding:0; } /* Подсветка пункта при наведении */ .menu_color > ul > li > a:hover, .my_menu .parent .sub-accordion-menu li a:hover { color: #bbb; background: rgba(0, 0, 0, 0.1); } /* Разделитель пунктов меню */ .menu_color > ul > li + li > a, .menu_color .sub-accordion-menu li > a { border-top: 1px solid rgba(255, 255, 255, 0.1); box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.15); }
После этого добавим стили, для закрытого и раскрытого аккордеона:
/* === Закрытый ===*/ .sub-accordion-menu { display: block; position: static; width: auto; overflow: hidden; border: none; margin: 0!important; max-height: 0; /* Скрываем выпадающее подменю */ transition: max-height 1s; /* Задержка раскрытия */ } /* === Открытый ===*/ .sub-accordion-menu { max-height: 1000px; } .sub-accordion-menu > li > a { padding-left: 40px; /* Добавляем отступ для подпунктов */ }
Примечание.
Почему было использовано свойство max-height
, а не height
? Потому что мы не знаем высоту раскрывающегося подменю, а при использовании значения height: auto
— анимация не срабатывает.
Горизонтальное меню
По структуре горизонтальное меню ни чем не отличается от вертикального, html-код одинаковый. Теоретически, получить горизонтальное меню из вертикального можно заменой/добавлением класса содержащего контейнера.
Чтобы не усложнять разметку и оформление, последовательно создадим горизонтальное выпадающее меню с нуля, со своими классами.
В итоге наше меню будет выглядеть так:
За основу возьмем код вертикального выпадающего меню и заменим классы:
<nav> <ul> <li><a href="#/">punkt 1</a></li> <li><a href="#/">dropdown</a> <div> <ul> <li><a href="#/">sub punkt 1</a></li> <li><a href="#/">sub punkt 2</a></li> </ul> <div> </li> <li><a href="#/">punkt 3</a></li> <li><a href="#/">active</a></li> <li><a href="#/">punkt 5</a></li> </ul> </nav>
Разметка
/* === Разметка основного меню === */ .hz-bar ul { list-style: none; margin:0; padding:0; } .hz_menu > li { float: left; margin:0; padding:0; position:relative; } .hz_menu li a { display:block; margin:0; padding:15px 20px; text-decoration: none; }
Что было сделано:
- Сброс стилей по умолчанию для тега
ul
- Создание горизонтального меню, путем присвоения тегам
li
, содержащим пунткы основного меню, свойстваfloat: left
- Установка отступов для пунктов меню
Пояснения:
Конструкция .hz_menu > li
распространяется только на пункты основного меню и не затрагивает выпадающее, в то время как .hz_menu li a
задается для всех пунктов. Некоторые свойства, специфичные для подменю, будут переопределены в дальнейшем.
Разметка выпадающего меню
/* === Разметка выпадающего подменю === */ .dropdown_menu { display: block; position: absolute; left: -3000px; top: 100%; } .dropdown_menu > ul { border: 1px solid; margin-top: 10px; /* отступ от основного меню */ padding: 10px 1px; min-width: 140px; opacity: 0; transition: opacity .5s; /* анимация прозрачности */ } .dropdown_menu li a { white-space: nowrap; /* если не очень длинные заголовки */ z-index: 9999; padding: 10px 20px; } .parent_dropdown:hover .dropdown_menu { left: 0px; } .parent_dropdown:hover .dropdown_menu ul { opacity: 1; }
Рассмотрим некоторые особенности:
- Как было видно из html-кода, выпадающее меню обернуто в дополнительный контейнер
div.dropdown_menu
. Для чего? В принципе, можно вполне обойтись и без него, но эта обертка дает некоторые дополнительные возможности оформления. В частности, возможность задать отступ от основного меню.
Если задать отступ непосредственно для тегаul
без обертки, при перемещении курсора от основного пункта к подпункту hover-эффект прервется и подменю пропадет … Дополнительный контейнер обеспечивает, в данном случае, отсутствие разрыва. - Для подпункт определено правило
white-space: nowrap
. Дело в том что абсолютно позиционированное подменю имеет максимальную ширину родительского пункта, и, соответственно, текст подпунктов будет переноситься на новую строку. Это не очень удобно при коротких названиях основных пунктов.
Данное правило предотвращает перенос. Как альтернатива (дополнение), минимальная ширина подменю была задана явно.
Оформление
Перед тем как заняться цветовым оформлением, необходимо добавить еще несколько стилевых правил разметки. Я специально перенес их в офомление, чтобы был понятнее смысл.
Если основному контейнеру назанчить цвет фона, то мы его не увидим по одной простой причине:
Теги li
, которым присвоено float: left
, выпадают из основного потока, их для основного контейнера как-бы не существует, поэтому он «схлопывается» и имеет высоту 0. Соответственно, никакого цветового оформления мы не увидим.
Решение
/* Предотвращаем схлопывание */ .hz-bar:after { content: ''; display: table; clear: both; }
Теперь контейнер будет вести себя более дружелюбно и можно его оформлять
/* === Оформление меню === */ .menu_bordo { background: #7D0000; } .menu_bordo .hz_menu > li > a { color: #DBE6B7; } .menu_bordo .hz_menu > li > a:hover { color: #fff; } .menu_bordo .hz_menu .active a{ box-shadow: inset 0 15px 15px rgba(0, 0, 0, 0.2); color: #fff; cursor: default; }
Здесь все достаточно очевидно. Единственное, cursor: default
, следовало бы перенести в разметку, чтобы не привязывать к классу цветового оформления.
Для выделения активного пункта меню была применена тень.
/* === Оформление выпадающего подменю === */ .menu_bordo .dropdown_menu > ul { background: #fff; border-color: #ddd; } .menu_bordo .dropdown_menu > ul > li > a { color: #555; } .menu_bordo .dropdown_menu > ul > li > a:hover { background: #7D0000; color: #fff; }
На этом цветовое оформление можно считать завершенным. Теперь с легкостью можно подкорректировать цветовую гамму, или создать несколько классов для разных вариантов оформления.
Дополнительно
Необязательные стилиевые правила. Первое задает вертикальные разделители между пунктами (аналогично вертикальному меню), второе — дополнительный маркер для родительского пункта.
/* Дополнительно. Разделители пунктов + маркер */ .hz_menu > li + li > a { border-left: 1px solid rgba(255, 255, 255, 0.1); box-shadow: -1px 0 0 rgba(0, 0, 0, 0.15); } .parent_dropdown > a:after { display: inline-block; padding: 1px 0 0 3px; content: "\25BC "; font-size: 10px; vertical-align: top; }
Здесь вы можете скачать Код примера горизонтального меню
CSS Вертикальная панель навигации
Вертикальная панель навигации
Чтобы создать вертикальную панель навигации, вы можете стилизовать элементы внутри списка, помимо кода с предыдущей страницы:
Объяснение примера:
-
дисплей: блок;
— Отображение ссылок как блочных элементов составляет целое область ссылки кликабельна (не только текст), и это позволяет нам указать ширину (и отступы, поля, высота и т. д., если хотите) -
ширина: 60 пикселей;
— Элементы блока занимают всю ширину, доступную по умолчанию.Мы хотим указать ширину 60 пикселей
Вы также можете установить ширину
- и удалить ширину ,
поскольку они будут занимать всю ширину, доступную при отображении в виде блочных элементов.
Результат будет тот же, что и в предыдущем примере:.
- или для центрирования ссылок.
Добавьте свойство
border
в- , чтобы добавить границу вокруг панели навигации. Если ты тоже хочешь
границ внутри панели навигации, добавьте
- , кроме
последний:
Пример
ul {
border: 1px solid # 555;
}li {
выравнивание текста: по центру;
нижняя граница: твердое тело 1px # 555;
}li: последний ребенок {
Попробуй сам »
нижняя граница: нет;
}Полноростовая фиксированная вертикальная панель навигации
Создать полноразмерную «липкую» боковую панель навигации:
Пример
ul {
Попробуй сам »
list-style-type: none;
маржа: 0;
отступ: 0;
ширина: 25%;
цвет фона: # f1f1f1;
высота: 100%; / * Полная высота * / Позиция
: фиксированная; / * Заставить прилипнуть, даже при прокрутке * /
перелив: авто; / * Включить прокрутку, если в боковой навигации слишком много контента * /
}Примечание: Этот пример может некорректно работать на мобильных устройствах.
CSS Горизонтальная панель навигации
Горизонтальная панель навигации
Есть два способа создать горизонтальную панель навигации. Используя встроенный или плавающий элементов списка.
Элементы встроенного списка
Одним из способов создания горизонтальной панели навигации является указание элементов
- как встроенный, в дополнение к «стандартному» коду с предыдущей страницы:
Объяснение примера:
-
дисплей: встроенный;
— По умолчанию элементы - являются блочными.Мы тут удалить разрывы строк до и после каждого элемента списка, чтобы отобразить их в одной строке
Элементы плавающего списка
Еще один способ создания горизонтальной панели навигации — разместить
-
- элементов и укажите макет для ссылок навигации:
Пример
Ли {
плыть налево;
}а {
Попробуй сам »
дисплей: блок;
отступ: 8 пикселей;
цвет фона: #dddddd;
}Объяснение примера:
-
поплавок: левый;
— Используйте float, чтобы получить элементы блока плавают рядом друг с другом -
дисплей: блок;
— Позволяет указать отступы (и высота, ширина, поля и т. д.если хотите) -
отступ: 8 пикселей;
— Укажите отступы между каждым элементом , чтобы сделать они хорошо выглядят -
цвет фона: #dddddd;
— Добавить серый цвет фона для каждого элемент
Совет: Добавьте цвет фона в
-
border-bottom
ко всем элементам - , кроме
последний:
Пример
ул. {тип-стиль-список: нет;
маржа: 0;
отступ: 0;
ширина: 60 пикселей;
}
ли
а
{
дисплей: блок;
}
Примеры вертикальной панели навигации
Создайте базовую вертикальную панель навигации с серым цветом фона и изменить цвет фона ссылок, когда пользователь наводит указатель мыши на их:
Пример
ul {list-style-type: none;
маржа: 0;
отступ: 0;
ширина: 200 пикселей;
цвет фона: # f1f1f1;
}
li a {
дисплей:
блокировать;
цвет: # 000;
отступ: 8 пикселей 16 пикселей;
текст-оформление: нет;
}
/ *
Изменить цвет ссылки при наведении * /
li a: hover {
цвет фона: # 555;
цвет: белый;
}
Активная / текущая ссылка для навигации
Добавьте «активный» класс к текущей ссылке, чтобы пользователь знал, на какой странице он находится:
Центральные ссылки и добавить границы
Добавьте text-align: center
к