и создания меню.
Синтаксис
HTML
|
|
HTML5
|
|
Атрибуты
Устанавливает видимую метку для меню.
Задает тип меню.
Закрывающий тег
Обязателен.
Валидация
Использование этого тега осуждается спецификацией HTML4, валидный код получается только при использовании переходного
. В HTML5 применение тега
- Главная
- Новости
- Продукция
- Услуги
- Партнеры
- Контакты
Теперь отдельно создадим файл стилей под названием main.css
. Его листинг приведен полностью ниже.
Ul {
margin:0; /*обнуляем отступы*/
padding:0; /*обнуляем отступы*/
float:left; /*выравниваем список по левому краю*/
width:auto;/*задаем ширину авто исходя из типа и содержимого списка*/
background-image: url(bg.gif); /*устанавливаем фоновое изображение*/
background-repeat:repeat-x; /*повторяем наше изображение по горизонтали*/
list-style:none; /*удаляем маркеры списка*/
background-color:#4778c3; /*задаем цвет фона под изображение*/
font-size:13px; /*задаем размер шрифта*/
font-family:Arial, Helvetica, sans-serif; /*устанавливаем шрифт*/
}
ul li {
float:left; /*выравниваем элементы списка по левому краю*/
}
ul a {
display:block; /*представляем ссылки меню как блочные элементы*/
width:100px; /*задаем размер блока*/
height:30px; /*и высоту блока*/
text-align:center; /*надпись по центру*/
line-height: 2.1em; /*межстрочный интервал*/
text-decoration:none; /*убираем подчеркивание у ссылок*/
color:#fff; /*цвет текста ссылок - белый*/
border-right:#fff solid 1px; /*бордюр правой стороны блока (белая линия в 1px)*/
}
ul a:hover {
color:#ccc; /*ссылка меняет цвет при наведении указателя*/
}
Думаю, что по содержимому файла main.css
вопросов возникнуть не должно, подсказки в комментариях я написал достаточно подробно и ясно, поэтому повторяться не буду. Не забываем его подключить к нашей странице menu.html
с помощью
Подведем итог. В результате мы получили полностью кросбраузерное горизонтальное меню, которое выглядит одинаково не только во всех современных браузерах, но и в таких раритетах, как IE 5.5 и IE 6.0. Все элементы меню представлены как блочные элементы и имеют одинаковые размеры по ширине 100 px и высоте 30px. В качестве разделителя пунктов меню используется оформление блокового элемента с помощью правого бордера белого цвета толщиной в 1px. Это практически самый простой способ реализации горизонтального меню. Разумеется, при желании его можно модифицировать, сделать более красивым и функциональным используя фантазию, свойства css и дополнительные графические элементы. Ну а наше горизонтальное меню
выглядит примерно так:
Плюсы этого решения:
Простота выполнения
Простой код
Нет никаких таблиц и javascript
Кроссбраузерность: меню во всех браузерах выглядит одинаково
Используются всего один рисунок
Минимум кода на странице menu.html
Минимум кода для реализации стилей в main.css
Файлы, используемые в данном примере, можно скачать в архиве
Хабр, привет!
На Сodepen появляется много хороших решений от разных специалистов, и я считаю, что лучшие из них нужно собирать в одном месте. Поэтому 2 года назад начал сохранять у себя на компьютере интересные скрипты по разным тематикам.
Раньше я их выкладывал в группе продукта облачной IDE mr. Gefest , это были сборки из 5-8 решений. Но теперь у меня стало скапливаться по 15-30 скриптов в разных тематиках (кнопки, меню, подсказки и так далее).
Такие большие наборы следует показывать большему числу специалистов. Поэтому выкладываю их на Хабр. Надеюсь они будут Вам полезны.
В этом обзоре мы рассмотрим многоуровневые меню.
Flat Horizontal Navigation
![](https://i1.wp.com/habrastorage.org/files/5cf/a68/cca/5cfa68ccaafa44a78194bbe70013e480.jpg)
Красивая навигационная панель с плавно появляющимся подменю. Код хорошо структурирован, используется js. Судя по использованным возможностям, работает в ie8+.
http://codepen.io/andytran/pen/kmAEy
Material Nav Header w/ Aligned Dropdowns
![](https://i2.wp.com/habrastorage.org/files/a59/d12/7e8/a59d127e87fd48eda88fe70c83e28c55.jpg)
Адаптивная панель ссылок с двухколонным подменю. Все сделано на css и html. Применены css3 селекторы, которые не поддерживаются в ie8.
http://codepen.io/colewaldrip/pen/KpRwgQ
Smooth Accordion Dropdown Menu
![](https://i2.wp.com/habrastorage.org/files/9e8/5a3/799/9e85a3799ebd410d82eb7da14e25f605.jpg)
Стильное вертикальное меню с плавно раскрывающимися элементами. Используется transition, transform js-код.
http://codepen.io/fainder/pen/AydHJ
Pure CSS Dark Inline Navigation Menu
![](https://i1.wp.com/habrastorage.org/files/1e6/9cf/c52/1e69cfc520b74510ac0453670774fb23.jpg)
Темная вертикальная навигационная панель с иконками из ionicons. Применяется javascript. В ie8 скорее всего будет работать без анимации.
http://codepen.io/3lv3n_snip3r/pen/XbddOO
Pure CSS3 Mega Dropdown Menu With Animation
![](https://i1.wp.com/habrastorage.org/files/804/da7/2e6/804da72e6e1c4c3abd16e78aa074826e.jpg)
![](https://i1.wp.com/habrastorage.org/files/91e/9c4/58d/91e9c458df2f4971a509600772780a94.jpg)
Стильное меню с двумя форматами вывода: горизонтальным и вертикальным. Используются иконки и css3-анимация. В ie8 точно будет ужасно выглядеть, но зато в других браузерах все круто.
Ссылка на вертикальную: http://codepen.io/rizky_k_r/full/sqcAn/
Ссылка на горизонтальную: http://codepen.io/rizky_k_r/pen/xFjqs
CSS3 Dropdown Menu
![](https://i1.wp.com/habrastorage.org/files/cdc/e5f/33d/cdce5f33d3c141a7a95a494794e716fb.jpg)
Горизонтальное меню с большими элементами и выпадающим списком ссылок. Чистый и минималистичный код без js.
http://codepen.io/ojbravo/pen/tIacg
Simple Pure CSS Dropdown Menu
![](https://i0.wp.com/habrastorage.org/files/d4c/9d7/7ea/d4c9d77ea72b42d7a997cbdff10a6bfb.jpg)
Простое, но стильное горизонтальное меню. Используется font-awesome. Все работает на css и html, без js. В ie8 будет работать.
http://codepen.io/Responsive/pen/raNrEW
Bootstrap 3 mega-dropdown menu
![](https://i1.wp.com/habrastorage.org/files/17b/767/904/17b767904cd34d13a233dc0231d09164.jpg)
Отличное решение для интернет-магазинов. Отображает несколько уровней категорий и большие изображения (например, товар по акции). В его основе лежит boostrap 3.
http://codepen.io/organizedchaos/full/rwlhd/
Flat Navigation
![](https://i1.wp.com/habrastorage.org/files/f7a/8c8/417/f7a8c8417bd44d98b33da97ef1038b09.jpg)
Стильная навигационная панель с плавным подменю. В старых браузерах отобразится с проблемами.
http://codepen.io/andytran/pen/YPvQQN
3D nested navigation
![](https://i1.wp.com/habrastorage.org/files/82e/df9/576/82edf95765d9413a840560c0c5d44ae1.jpg)
Горизонтальное меню с очень крутой анимацией без js!
http://codepen.io/devilishalchemist/pen/wBGVor
Responsive Mega Menu - Navigation
![](https://i1.wp.com/habrastorage.org/files/200/ff6/9c2/200ff69c215847db945d0c1510316ff6.jpg)
Горизонтальное адаптивное меню. Выглядит неплохо, но мобильная версия немного "хромает". Используется css, html и js.
http://codepen.io/samiralley/pen/xvFdc
Pure Css3 Menu
![](https://i2.wp.com/habrastorage.org/files/69a/ba5/d2f/69aba5d2f86b4100a49ea71dfafb190e.jpg)
Оригинальное меню. С простым и чистым кодом без js. Применяйте для "вау" эффектов.
http://codepen.io/Sonick/pen/xJagi
Full CSS3 Dropdown Menu
![](https://i2.wp.com/habrastorage.org/files/66c/4a2/c6a/66c4a2c6a99b4263af74087797f764fe.jpg)
Красочное выпадающее меню с одним уровнем вложенности. Используются иконки из font-awesome, html и css.
http://codepen.io/daniesy/pen/pfxFi
Css3 only dropdown menu
![](https://i0.wp.com/habrastorage.org/files/4ed/68f/84a/4ed68f84af0c4658a6088e3b2ce7ffaf.jpg)
Достаточно неплохое горизонтальное меню с тремя уровнями вложенности. Работает без js.
http://codepen.io/riogrande/pen/ahBrb
Dropdown Menus
![](https://i0.wp.com/habrastorage.org/files/89a/27b/d33/89a27bd331d4477fb06fbbd695063eb2.jpg)
Минималистичное меню с оригинальным эффектом появления вложенного списка элементов. Радует, что это решение тоже без javascript.
http://codepen.io/kkrueger/pen/qfoLa
Pure CSS DropDown Menu
![](https://i0.wp.com/habrastorage.org/files/98d/141/0a3/98d1410a3ae840e7b1f68a309451d705.jpg)
Примитивное, но эффективное решение. Только css и html.
http://codepen.io/andornagy/pen/xhiJH
Pull Menu - Menu Interaction Concept
![](https://i0.wp.com/habrastorage.org/files/bef/efa/c10/befefac10a224b84a5d95d2a70d9b4e4.jpg)
Интересный концепт меню для мобильного телефона. Я такого ещё не видел. Используется html, css и javascript.
http://codepen.io/fbrz/pen/bNdMwZ
Make Simple Dropdown Menu
![](https://i2.wp.com/habrastorage.org/files/b7e/f34/91e/b7ef3491e44d44988aafe009b0b9a6cb.jpg)
Чистый и простой код, без js. В ie8 точно работать будет.
http://codepen.io/nyekrip/pen/pJoYgb
Pure CSS dropdown
![](https://i0.wp.com/habrastorage.org/files/0ad/d90/6c5/0add906c566945cfb79c50c4886255f4.jpg)
Решение неплохое, но слишком уж много используется классов. Радует, что нет js.
http://codepen.io/jonathlee/pen/mJMzgR
Dropdown Menu
![](https://i0.wp.com/habrastorage.org/files/a8d/237/c43/a8d237c431d74750837a0f0980c49c8d.jpg)
Симпатичное вертикальное меню с минимальным javascript-кодом. JQuery не используется!
http://codepen.io/MeredithU/pen/GAinq
CSS 3 Dropdown Menu
![](https://i2.wp.com/habrastorage.org/files/f0d/5c8/9e8/f0d5c89e88994270842402fd42749cca.jpg)
Горизонтальное меню с дополнительными подписями может хорошо украсить Ваш сайт. Код простой и понятный. Javascript не применяется.
http://codepen.io/ibeeback/pen/qdEZjR
![](https://i0.wp.com/habrastorage.org/files/524/98b/7e3/52498b7e35af4638a20f18b514f2d02a.jpg)
Красивое решение с большим количеством кода (html, css и js). Придумано 3 формата подменю. Для интернет-магазинов решение хорошо подходит.
http://codepen.io/martinridgway/pen/KVdKQJ
CSS3 Menu Dropdowns (особенное решение)!
![](https://i2.wp.com/habrastorage.org/files/015/3c9/88e/0153c988e9ae444ba1ebed71d82795fd.jpg)
Темное горизонтальное меню с тринадцатью (13) вариантами анимации! Обязательно советую ознакомиться, пригодится в быту.
http://codepen.io/cmcg/pen/ofFiz
П.С.
Надеюсь, Вам понравилась сборка из 23 решений. Если хотите и дальше их читать, то пройдите снизу опрос.
Всем приятной работы.
Здравствуйте уважаемые посетители моего блога! Сегодня речь пойдет о главном горизонтальном меню сайта, а именно как выровнять горизонтальное меню по центру. Да, на первый взгляд, что тут сложного — задал нужные отступы, подогнал и все. Но тут есть свои нюансы. Сайт, в первую очередь, это динамика, т.е. на сайте постоянно появляется новый контент, появляются какие то новые блоки с информацией и т.п. Так могут и появляться/исчезать некоторые пункты в главном меню. С учетом этого всего нужно добиться того, что при добавлении или удалении пункта меню, меню у нас остается все также по центру. Конечно, не всегда обязательно его центрировать, все зависит от дизайна. Но если все же у вас подразумевается ставить горизонтальное меню по центру, то применив несколько несложных трюков в css мы можем добиться нужного результата.
Структура статьи
Горизонтальное меню по центру без выпадающих пунктов
Сначала разберем на примере горизонтального меню, которое не имеет выпадающих пунктов.
Html-код
- Пункт 1
- Пункт 2
- Пункт 3
- Пункт 4
- Пункт 5
Css-код
*,
*::after,
*::before {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-o-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
margin: 0;
padding: 0;
}
#mainmenu {
background: #444;
position: relative;
overflow: hidden;
height: 40px;
margin: 30px 0
}
#mainmenu ul {
list-style: none;
margin: 0;
padding: 0;
position: relative;
left: 50%;
float: left;
font: 14px Arial, Helvetica, sans-serif;
height: 40px
}
#mainmenu ul li {
position: relative;
left: -50%;
float: left;
margin: 0 10px;
height: 40px
}
#mainmenu ul li a {
color: #fff;
display: block;
text-decoration: none;
padding: 0 15px;
line-height: 40px;
}
#mainmenu ul li a:hover {
background-color: #666;
}
Разберем все по порядку, здесь все просто. Мы создаем контейнер «mainmenu», куда помещаем наше меню в виде неупорядоченного списка.
Теперь дело идет за стилями css. Сначала мы сбрасываем на ноль все поля и отступы для всех браузеров. Далее при помощи свойства «float:left» мы смещаем наш неупорядоченный список влево и далее относительным позиционированием смещаем его на 50% вправо. Ширина списка «ul» будет равна сумме длин всех пунктов «li», которые находятся внутри него. Таким образом, если мы мысленно поделим окно браузера пополам, то наше меню уйдет вправо от линии разделения. Чтобы выровнять мы применим к пунктам «li» также относительное позиционирование и сместим их влево на 50%, указав свойство «left:-50%». Да и еще, чуть не забыл, нашему контейнеру «mainmenu» нужно обязательно указать свойство «overflow:hidden»
, иначе мы получим горизонтальную полосу прокрутки.
Вот и все, теперь наше меню выровнялось по центру. Теперь можете добавлять, хоть убавлять пункты, на позиционирование это не повлияет. Вы также можете использовать это меню на своих сайтах, просто изменив стили под ваш дизайн.
Горизонтальное меню по центру с выпадающими пунктами
Теперь разберем с выпадающими подпунктами. Здесь ситуация несколько иначе и несколько сложнее, т.к. в первом случае у нас подпункты выпадать не будут, потому что мы указали блоку «mainmenu» свойство — «overflow:hidden». Это говорит, что элементы за пределами данного блока показываться не будут. Но выход есть.
Итак, я изменил предыдущий код и удалил из него свойство «overflow:hidden».
Html-код
- Пункт 1
- подпункт 1.1
- подпункт 1.1.1
- подпункт 1.1.2
- подпункт 1.1.3
- подпункт 1.2
- подпункт 1.2.1
- подпункт 1.2.2
- подпункт 1.2.3
- подпункт 1.3
- подпункт 1.4
- подпункт 1.5
- Пункт 2
- подпункт 2.1
- подпункт 2.2
- подпункт 2.3
- подпункт 2.3.1
- подпункт 2.3.2
- подпункт 2.3.3
- подпункт 2.4
- Длинный подпункт, длинный подпункт
- Длинный пункт меню 3
- подпункт 3.1
- подпункт 3.2
- подпункт 3.3
- подпункт 3.4
- подпункт 3.5
- Пункт 4
- подпункт 4.1
- подпункт 4.2
- подпункт 4.3
- подпункт 4.4
- подпункт 4.5
- Пункт 5
- подпункт 5.1
- подпункт 5.2
- подпункт 5.3
- подпункт 5.4
- подпункт 5.5
CSS-код
*, *::after, *::before {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-o-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
margin: 0;
padding: 0;
}
#mainmenu {
position: relative;
background: #444444;
height: 40px;
margin: 30px 0;
padding: 0;
float: left;
width: 100%;
z-index: 10
}
#mainmenu ul {
clear: left;
position: relative;
right: 50%;
height: 40px;
float: right;
text-align: center;
font: 15px Arial, Helvetica, sans-serif;
list-style: none;
padding: 0;
margin: 0
}
/** Основные пункты **/
#mainmenu > ul > li {
position: relative;
left: 50%;
float: left;
height: 40px;
padding: 0;
margin: 0
}
#mainmenu > ul > li > a {
border-left: 1px solid #666;
display: block;
color: #fff;
text-decoration: none;
padding: 0 20px;
line-height: 40px;
}
#mainmenu > ul > li:first-child > a {
border: none
}
#mainmenu > ul > li:hover > a, #mainmenu > ul > li.hover > a, #mainmenu > ul > li.active > a {
color: #fff
}
#mainmenu > ul > li:hover, #mainmenu > ul > li.hover, #mainmenu > ul > li.active {
background: #666
}
/* Выпадающие подпункты */
#mainmenu ul li ul {
position: absolute;
left: 0;
top: 40px;
display: none;
list-style: none;
visibility: hidden;
padding: 0;
margin: 0;
width: 200px
}
#mainmenu > ul > li ul li {
background-color: #666;
position: relative;
left: 0;
display: list-item;
float: none;
height: auto;
margin: 0;
text-align: left;
}
#mainmenu ul li ul li a {
border-bottom: 1px solid #999;
display: block;
color: #fff;
padding: 10px 15px;
text-decoration: none;
}
#mainmenu ul li ul li.parent a {
position: relative;
}
#mainmenu ul li ul > li.parent > a::before {
border-top: 1px solid #fff;
border-right: 1px solid #fff;
content: "";
display: block;
position: absolute;
right: 15px;
top: 50%;
transform: translateY(-50%) rotate(45deg);
height: 6px;
width: 6px;
}
#mainmenu ul li ul li:hover, #mainmenu ul li ul li.hover {
background-color: #444
}
#mainmenu ul li:hover ul, #mainmenu ul li.hover ul {
display: block
}
/* Выпадающие пункты второго уровня */
#mainmenu ul li:hover > ul {
opacity: 1;
visibility: visible;
margin: 0;
}
#mainmenu ul li ul li ul {
top: 0;
left: 200px;
margin: 0 0 0 20px;
width: 180px
}
Теперь у нас меню выставлено по центру и при наведении выпадают подпункты.
Выравнивание меню по центру с помощью flexbox
Выровнять меню по центру
можно также, применив новое правило в css - flexbox. Вообще трюкам с flexbox я хочу посвятить отдельный пост, оно того стоит, очень упрощает жизнь верстальщику. В общем, здесь не будем углубляться… Я приведу здесь только код css для меню с выпадающими пунктами. HTML код тот же, что и выше.
Код CSS
*, *::after, *::before {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-o-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
margin: 0;
padding: 0;
}
#mainmenu {
position: relative;
background: #444444;
height: 40px;
margin: 30px 0;
padding: 0;
width: 100%;
z-index: 10
}
#mainmenu ul {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-webkit-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
height: 40px;
text-align: center;
font: 15px Arial, Helvetica, sans-serif;
list-style: none;
padding: 0;
margin: 0;
-webkit-box-pack: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
}
/** Основные пункты **/
#mainmenu > ul > li {
position: relative;
height: 40px;
padding: 0;
margin: 0
}
#mainmenu > ul > li > a {
border-left: 1px solid #666;
display: block;
color: #fff;
text-decoration: none;
padding: 0 20px;
line-height: 40px;
}
#mainmenu > ul > li:first-child > a {
border: none
}
#mainmenu > ul > li:hover > a, #mainmenu > ul > li.hover > a, #mainmenu > ul > li.active > a {
color: #fff
}
#mainmenu > ul > li:hover, #mainmenu > ul > li.hover, #mainmenu > ul > li.active {
background: #666
}
/* Выпадающие подпункты */
#mainmenu ul li ul {
position: absolute;
left: 0;
top: 40px;
display: none;
list-style: none;
visibility: hidden;
padding: 0;
margin: 0;
width: 200px
}
#mainmenu > ul > li ul li {
background-color: #666;
position: relative;
left: 0;
display: list-item;
float: none;
height: auto;
margin: 0;
text-align: left;
}
#mainmenu ul li ul li a {
border-bottom: 1px solid #999;
display: block;
color: #fff;
padding: 10px 15px;
text-decoration: none;
}
#mainmenu ul li ul li.parent a {
position: relative;
}
#mainmenu ul li ul > li.parent > a::before {
border-top: 1px solid #fff;
border-right: 1px solid #fff;
content: "";
display: block;
position: absolute;
right: 15px;
top: 50%;
transform: translateY(-50%) rotate(45deg);
height: 6px;
width: 6px;
}
#mainmenu ul li ul li:hover, #mainmenu ul li ul li.hover {
background-color: #444
}
#mainmenu ul li:hover ul, #mainmenu ul li.hover ul {
display: block
}
/* Выпадающие пункты второго уровня */
#mainmenu ul li:hover > ul {
opacity: 1;
visibility: visible;
margin: 0;
}
#mainmenu ul li ul li ul {
top: 0;
left: 200px;
margin: 0 0 0 20px;
width: 180px
}
Как видим, изменились правила только для родительского списка - #mainmenu ul. Единственное, пришлось добавить префиксы для предыдущих версий браузеров. Отмечу, что правило flexbox корректно понимают только современные браузеры. Если вы ориентируетесь на более старые браузеры, то вариант с flex’ом придется отложить. Какие именно браузеры хорошо понимают flexbox можете посмотреть