Создание выпадающего мега меню на CSS3


Создание выпадающего мега меню на CSS3

Создание выпадающего мега меню на CSS3

HTML разметка

Создаем неупорядоченный (маркированный) список с классом nav, при этом для каждого пунктаменю добавим новый элемент списка (li) с тегом (a) внутри. Если вы хотите, чтобы для пункта меню открывалось мега подменю, просто добавьте div внутри li. (как, например, это сделано для пунктов меню 1 и 3 в коде ниже)


<ul>
<li>
<a href="#">Первый пункт меню</a>
<div>
Здесь содержимое мега меню...
</div>
</li>
<li><a href="#">Второй пункт меню</a></li>
<li>
<a href="#">Третий пункт меню</a>
<div>
Здесь содержимое еще одного мега меню...
</div>
</li>
<li><a href="#">Четвертый пункт меню</a></li>
<li><a href="#">Пятый пункт меню</a></li>
<li><a href="#">Шестой пункт меню</a></li>
<li>
<form action="#">
<input type="text" placeholder="Поиск...">
<input type="submit" value="">
</form>
</li>
</ul>

Reset стили (сброс, обнуление) и основные стили контейнеров

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


.nav,
.nav a,
.nav ul,
.nav li,
.nav div,
.nav form,
.nav input {
margin: 0;
padding: 0;
border: none;
outline: none;
}
.nav a { text-decoration: none; }
.nav li { list-style: none; }

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


.nav {
display: inline-block;
position: relative;
cursor: default;
z-index: 500;
}

.nav > li {
display: block;
float: left;
}

Стилизация пунктов меню (ссылок)

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

Чтобы создать плавный переход фона для ссылок, добавим свойство CSS3 transition. Обратите внимание, что свойство это мы задаем пять раз, поскольку в полном объёме оно ещё не реализовано во всех браузерах. Именно поэтому мы используем префикс.


.nav > li > a {
position: relative;
display: block;
z-index: 510;
height: 54px;
padding: 0 20px;
line-height: 54px;

font-family: Helvetica, Arial, sans-serif;
font-weight: bold;
font-size: 13px;
color: #fcfcfc;
text-shadow: 0 0 1px rgba(0,0,0,.35);

background: #372f2b;
border-left: 1px solid #4b4441;
border-right: 1px solid #312a27;

-webkit-transition: all .3s ease;
-moz-transition: all .3s ease;
-o-transition: all .3s ease;
-ms-transition: all .3s ease;
transition: all .3s ease;
}

Для состояния при наведении мы будем менять только цвет фона. Для завершения оформления ссылок добавим закругление углов для первой ссылки с помощью псевдо-селектора :first-child, при этом обнулив левую границу.


.nav > li:hover > a { background: #4b4441; }

.nav > li:first-child > a {
border-radius: 3px 0 0 3px;
border-left: none;
}

Стилизация формы поиска

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


.nav > li.nav-search > form {
position: relative;
width: inherit;
height: 54px;
z-index: 510;
border-left: 1px solid #4b4441;
}

Теперь зададим стили вводимого текста, обтекание слева, высоту, отступы и т.д. Чтобы изначально скрыть поле для ввода текста, зададим ширину в 1рх и обнулим левый и правый отступы, для состояний же :hover и :focus мы вновь добавим ширину и боковые отступы


.nav > li.nav-search input[type="text"] {
display: block;
float: left;
width: 1px;
height: 24px;
padding: 15px 0;
line-height: 24px;

font-family: Helvetica, Arial, sans-serif;
font-weight: bold;
font-size: 13px;
color: #999999;
text-shadow: 0 0 1px rgba(0,0,0,.35);

background: #372f2b;

-webkit-transition: all .3s ease 1s;
-moz-transition: all .3s ease 1s;
-o-transition: all .3s ease 1s;
-ms-transition: all .3s ease 1s;
transition: all .3s ease 1s;
}

.nav > li.nav-search input[type="text"]:focus { color: #fcfcfc; }

.nav > li.nav-search input[type="text"]:focus,
.nav > li.nav-search:hover input[type="text"] {
width: 110px;
padding: 15px 20px;

-webkit-transition: all .3s ease .1s;
-moz-transition: all .3s ease .1s;
-o-transition: all .3s ease .1s;
-ms-transition: all .3s ease .1s;
transition: all .3s ease .1s;
}

Стили для инпута submit похожи на стили для вводимого текста, только мы еще установим фиксированную ширину и высоту, добавим фоновую иконку и закругление углов с помощью свойства border-radius.

Для обоих инпутов также применяется свойство CSS3 transition, чтобы получить плавную анимацию.


.nav > li.nav-search input[type="submit"] {
display: block;
float: left;
width: 20px;
height: 54px;
padding: 0 25px;
cursor: pointer;

background: #372f2b url(../img/search-icon.png) no-repeat center center;

border-radius: 0 3px 3px 0;

-webkit-transition: all .3s ease;
-moz-transition: all .3s ease;
-o-transition: all .3s ease;
-ms-transition: all .3s ease;
transition: all .3s ease;
}

.nav > li.nav-search input[type="submit"]:hover { background-color: #4b4441; }

 

Выпадающее мега меню

Это самая важная часть. Установим абсолютное позиционирование, ширину в 100%, верхнее и левое значения и зададим свойство display: block.
По умолчанию, изначально для мега меню задаем opacity: 0; visibility: hidden;(скрываем отображение мега меню), overflow: hidden;(скрываем переполнение).

После чего добавим цвет фона, закругление углов и некоторые переходы. Мы используем эти три свойства для скрытия меню изначально, а не display: none; потому, что иначе переходы не будут работать.


.nav > li > div {
position: absolute;
display: block;
width: 100%;
top: 50px;
left: 0;

opacity: 0;
visibility: hidden;
overflow: hidden;

background: #ffffff;
border-radius: 0 0 3px 3px;

-webkit-transition: all .3s ease .15s;
-moz-transition: all .3s ease .15s;
-o-transition: all .3s ease .15s;
-ms-transition: all .3s ease .15s;
transition: all .3s ease .15s;
}

Для отображения мега меню при наведении на соответствующий пункт меню, мы должны установить прозрачность до 1, а для свойств visibility (видимость) и overflow(переполнение) установить значение visible.


.nav > li:hover > div {
opacity: 1;
visibility: visible;
overflow: visible;
}

Немного о содержимом

Теперь это мега меню может содержать в себе любой контент, будь то HTML, PHP, JS, и т.д. В этом примере мы создадим списки ссылок внутри мега меню на основе HTML-макета. Добавьте следующий HTML-код внутри мега меню (div).


<div>
<h3>Пункт меню</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>
</div>

<div>
<h3>Пункт меню</h3>
<ul>
<li><a href="#">Пункт мега меню</a></li>
<li><a href="#">Пункт мега меню</a></li>
<li><a href="#">Пункт мега меню</a></li>
</ul>

<h3>Пункт меню</h3>
<ul>
<li><a href="#">Пункт мега меню</a></li>
<li><a href="#">Пункт мега меню</a></li>
<li><a href="#">Пункт мега меню</a></li>
</ul>
</div>

<div>
<h3>Пунт меню</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>
</div>

<div>
<h3>Пункт меню</h3>
<ul>
<li><a href="#">Пункт мега меню</a></li>
<li><a href="#">Пункт мега меню</a></li>
<li><a href="#">Пункт мега меню</a></li>
</ul>

<h3>Пункт меню</h3>
<ul>
<li><a href="#">Пункт мега меню</a></li>
<li><a href="#">Пункт мега меню</a></li>
</ul>
</div>

Затем мы добавим немного стилей для этого содержимого мега меню. Установим ширину каждого столбца в 20%, отступы в 2,5% и обтекание слева. Чтобы закончить, добавим некоторую типографику для заголовков и ссылок.


.nav .nav-column {
float: left;
width: 20%;
padding: 2.5%;
}

.nav .nav-column h3 {
margin: 20px 0 10px 0;
line-height: 18px;

font-family: Helvetica, Arial, sans-serif;
font-weight: bold;
font-size: 14px;
color: #372f2b;
text-transform: uppercase;
}

.nav .nav-column h3.orange { color: #ff722b; }

.nav .nav-column li a {
display: block;
line-height: 26px;

font-family: Helvetica, Arial, sans-serif;
font-weight: bold;
font-size: 13px;
color: #888888;
}

.nav .nav-column li a:hover { color: #666666; }
Previous Хаки wordpress. Топ 10(Часть 2)
Next Красочное анимированное меню навигации на CSS3

Suggested Posts

Самые распространенные СЕО ошибки

Используем карты Google для увеличения посещаемости

Работа с модулем «Яндекс.YML»

Selectric — пользовательский select

Что такое API Уведомления и как их использовать

35 популярных брендов и сайтов которые используют WordPress