Горизонтальное выпадающее меню

Установка и настройка плагина выпадающего меню WordPress

Итак, для создания выпадающего меню WordPress нам для начала нужно установить плагин Mega Main Menu из репозитория.

  1. 1.Заходим в админку WordPress и переходим в раздел «Плагины» => «Добавить новый».
  2. 2.В строку поиска вставляем название, ждем, пока пройдет поиск, в результатах поиска выбираем нужный нам плагин и жмем на кнопку «Установить», а затем «Активировать».

  3. 3.Далее, нам нужно перейти в раздел «Внешний вид» => «Меню» и здесь создать новое, или выбрать уже существующее меню, которое мы хотим сделать выпадающим. Для наглядности и экономии времени я заранее сделала заготовку, которое имеет в разделе «Каталог» два уровня вложенности.

  4. 4.Для начала работы с плагином нам нужно включить его в левой панели управления, в разделе «Настройка Max Mega Menu»

  5. 5.Здесь же мы можем в графе «Событие» выбрать, при каких действиях пользователя будет открываться пункты меню.

    Доступно для выбора три варианта:

    Hover intent – тоже самое, что и «Наведение мышки»

    Наведение мышки — открывается при наведении указателя мышки на пункте

    Клик мышки – открывается при клике указателем мышки по пункту

  6. 6.В графе «Эффект» мы можем выбрать эффект при открытии выпадающего меню WordPress

    И скорость, с которой оно будет открываться:

  7. 7.Далее, при наведении указателя мышки на пункт меню, возле его названия появляется синяя кнопка «Мега Меню», нажав на которую мы откроем окно настроек для данного пункта.

  8. 8.Во вкладке открывшегося окна «Мега Меню» мы можем:

    • В разделе «Режим отображения» выбрать способ расположения элементов. Если мы выберем пункт «Выпадающее меню», то в результате мы получим стандартное выпадающее меню WordPress, где пункты будут открываться при наведении на них указателя мышки, либо клике по ним.

      Если же мы выберем пункт «Мега Меню» то в раскрывающейся области подпункты будут располагаться в столбик:

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

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

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

  10. 10. На следующей вкладке мы можем задать иконку для пункта меню.

    В бесплатной версии плагина доступны для использования только стандартные иконки. Иконки Font Awesome, Genericons и возможность добавления своих иконок доступна только для Pro-версии.

  11. 11.Далее нам нужно перейти в раздел «Мега Меню» на главной странице WordPress. Здесь нам нужны две вкладки: «Темы меню» и «Локации меню»

  12. 12. На вкладке «Темы меню» нам нужно задать тему цветового оформления для нашего выпадающего меню WordPress, так как в этом плагине нет стандартных заготовок.

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

Строим каркас

Для начала следует сделать html-разметку. Меню проще всего делать маркированным списком с помощью тега <ul>. Тег парный, поэтому требует закрытия в конце списка </ul>. К нему лучше сразу добавить класс для последующей стилизации. К тегу добавляют парные элементы <li> по количеству пунктов с включенными ссылками.

Пример:

<ul class=»menu»>

<li><a href=»#html»>Строим каркас</a></li>

<li><a href=»#menu»>Горизонтальное меню</a></li>

<li><a href=»#sub-menu»>Выпадающее меню</a></li>

<li><a href=»#fixed»>Фиксированное меню</a></li>

</ul>

Так получается основа, которая затем оформляется в CSS в горизонтальное меню, фиксированное или выпадающее.

CSS

Заходим в админке блога в style.css и добавляем вот это:

#dropdown_nav {

font-weight:bold;
 width:1100px;
 padding-left:5px;
 display:inline-block;
 list-style:none;
 border-radius:5px;
 border-bottom:0px solid #777;
 -moz-border-radius:5px;
 -webkit-border-radius:5px;
 background: #DCDCDC url(menu.png);
 -moz-box-shadow: 0 0 5px #888;
-webkit-box-shadow: 0 0 5px#888;
box-shadow: 0 0 5px #888;
}

 #dropdown_nav li {

padding:12px 0px 12px 0px;
 float:left;
 position:relative;
 display:inline-block;

}

 #dropdown_nav li a {

 font-style:italic;
 font-size:15px;
 color:#cd5252;
 padding:10px 15px 10px 15px;
 border-right:1px solid #e3dec0;
 -moz-transition: background-color 0.3s 0.01s ease;
 -o-transition: background-color 0.3s 0.01s ease;
 -webkit-transition: background-color 0.3s 0.01s ease;
 }

#dropdown_nav li a:hover {

 background: #81ae7c;
 text-decoration:none;
 color:#fff;
 }

#dropdown_nav li a:active {
 background:#e2e2e2;

 }

 #dropdown_nav li a.first {
 -moz-border-radius:5px 0px 0px 5px;
 -webkit-border-radius:5px 0px 0px 5px;
 }
 /*#dropdown_nav li a.last {
 -moz-border-radius:0px 5px 5px 0px;
 -webkit-border-radius:0px 5px 5px 0px;
 }*/

#dropdown_nav ul li ul {

width:161px;

position:absolute;

top:41px;

left:-1px;
 border-top:2px solid #FF6766;
 background: #e3e1cf url(pinstriped_suit.png);
 -moz-box-shadow: 0 0 10px #333;
 -webkit-box-shadow: 0 0 10px #333;
 box-shadow: 0 0 10px #333;
 }

 #dropdown_nav ul li ul li {
 padding:0px;
 width:160px;

 }

 #dropdown_nav ul li ul li a {
 font-weight: normal;
 font-size:13px;
 display:block;
 border-bottom:1px solid #444;

 }
 #dropdown_nav ul li ul li a:hover {
 background:none;
 text-decoration: underline;
 color:#963c3c;

 }
 #dropdown_nav ul li ul li a:active {
 background:#333;

 }

Блочное горизонтальное меню (display)

Сделаем еще одно блочное меню, но немного другим способом.

Пример HTML и CSS: блочное горизонтальное меню с display

Описание примера

  1. Для выстраивания пунктов меню в горизонтальную строку снова применяем display:inline. Это впоследствии позволяет нам выровнять элементы списка по центру.
  2. Ну а ссылки и тег с class=»current» преобразуем во встроенные блоки, чтобы у них можно было явно указывать и изменять ширину (CSS width) и высоту (CSS height), если потребуется.
  3. Задаем всем элементам необходимое оформление в виде рамок, цвета текста, фона и т.д.

И все бы хорошо, но IE6 и IE7 нам как всегда доставляют проблемы, так как не понимают значение inline-block для тегов <LI>. Поэтому будем их лечить с помощью условных комментариев и expression.

  1. Да, старички IE не признают inline-block для блочных и подобных им элементов, но зато они прекрасно понимают это значение для встроенных тегов, к которым, например, относится тег <SPAN>. Поэтому интегрируем внутрь элемента с <li class=»current»> один такой тег, которому и задаем нужные стили. Но перед этим обнуляем все стили у самого «current», чтобы не было дублирования. Обнуление делаем до значений, которые используются по умолчанию либо просто нейтрализуем их (например, делаем нулевой размер рамки). То есть получается, что мы от «current» перенесли все стили в <SPAN>.
  2. Немного о том, как работает этот expression. Он интегрирует внутрь заданного HTML-элемента любой код или текст, при этом часть, которая указывается после первого innerHTML, добавляется сразу после открывающего тега, а часть после второго innerHTML — в самый конец элемента. Вот и получается, что в нашем случае, мы добавили тег <SPAN> таким образом, что внутри него оказался текст «Ссылка 2».

Прокрутка до якоря с фиксированным меню

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

Данная ситуация чаще всего возникает в лендингах. На скриншоте проблема заметна более наглядно:

На StackOverflow найдено два решения задачи, которые отличаются лишь CSS.

Чтобы создать якорь с отступом первым делом добавим ему определенный стиль, например, anchor:

<h1><a class="anchor" name="linktext">Some text</a></h1>

Далее для него в стилях прописываете:

.anchor{
   displayblock;
   height55px; 
   margin-top-55px; 
   visibilityhidden;
}

Здесь 55 пикселей — высота меню + отступ, которые нужны чтобы текст контента был виден. Указывайте значения, подходящие вашему сайту. В работе я применял именно этот вариант.

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

.anchor { padding-top 90px; }

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

Создание горизонтального выпадающего меню:

Сперва на HTML и CSS сделаем выпадающее меню которое будет проявляться при наведении мышки, вот его HTML.

XHTML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

<header>

<nav>

<ul>

<li><a href=»#»>Главная</a></li>

<li>Галерея

<ul>

<li><a href=»#»>Машины</a></li>

<li><a href=»#»>Горы</a></li>

<li><a href=»#»>Компьютеры</a></li>

</ul>

</li>

<li>О себе

<ul>

<li><a href=»#»>Имя</a></li>

<li><a href=»#»>Аватарка</a></li>

</ul>

</li>

</ul>

</nav>

</header>

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

Теперь перейдём к CSS, но сначала мы не будем делать прям выпадающие меню, оно просто при наведении мыши, будет просто появляться, вот и всё.

CSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

html, body {

margin;

padding;

}
 

nav > ul {

displayflex;

margin;

width100%;

background-colorgreen;

}
 

nav > ul > li {

margin-right20px;

}
 

li {

colorwhite;

list-stylenone;

font-size20px;

}
 

li a {

colorwhite;

text-decorationnone;

}
 

li > ul{

displaynone;

positionabsolute;

background-colortomato;

padding;

}
 

li:hover > ul{

displayblock;

}

В самом начале, мы убираем отступы со всего документа, чтобы, меню было чётко прибито ко краям страницы.

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

Последнее важное изменение, это при наведении мышкой на , внутри которого есть , он появлялся, вот что получилось

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

Примечание:

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

CSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

nav > ul {

displayflex;

margin;

width100%;

height25px;

background-colorgreen;

}
 

li > ul{

positionabsolute;

top40px;

visibilityhidden;

opacity;

background-colortomato;

padding;

transition400ms;

}
 

li:hover > ul{

visibilityvisible;

top25px;

opacity1;

}

В последнем селекторе который мы изменяем, который ещё отвечает за наведение мышки, убираем и добавляем , для показа элемента, равный 25 пикселям и , для полной не прозрачности.

Также появилось свойство , для плавных переходов, мы задаём ему время перехода 400 миллисекунды.

Размеры текстовой области

Если атрибуты cols или rows указаны, то их значение должно быть положительным целым числом. Значение атрибута cols (ширина) по умолчанию 20 символов, а rows (высота) 2 символа .

Обращаю Ваше внимание, что вы можете задавать значение ширины и высоты текстовой области не только в символах, но и с использованием CSS свойств width (ширина) и height (высота), в этом случае браузер будет игнорировать значение атрибутов cols и rows если они указаны. Давайте рассмотрим пример:

Давайте рассмотрим пример:

<!DOCTYPE html>
<html>
	<head>
		<title>Использование атрибута cols HTML тега <textarea></title>
	</head>
	<body>
		<form>
			<textarea cols = "10">Текстовое поле шириной 10 символов.</textarea>
			<textarea cols = "10" style = "width:200px">Текстовое поле шириной 10 символов и 200 пикселей.</textarea><br>
			<input type = "submit" cols = "submitInfo" value = "отправить">
		</form>
	</body>
</html>

В этом примере мы создали две текстовые области (элемент <textarea>), для первой и второй области атрибутом cols мы задали видимую ширину текстовой области 10 символов. Для второй текстовой области мы задали ширину элемента 200 пикселей с использованием встроенного CSS (свойство width). Как вы можете заметить, при этом браузер начинает игнорировать значение атрибута cols.

Кроме того, мы разместили внутри формы кнопку, которая служит для отправки формы (элемент <input> с типом кнопки «отправка формы»: type = «submit»).

Результат нашего примера:

Рис. 40а Использование атрибута cols HTML тега <textarea> (ширина элемента в символах и пикселях).

Фиксированное меню на CSS + HTML

В общем случае при создании простого горизонтального фиксированного меню для сайта вам нужно использовать CSS свойства position:fixed и top:0. Также основному блоку контента придется задать верхний отступ margin-top.

Итак, возьмем простую структуру HTML страницы:

<div class="menu">
  <a href="#main">Главная</a>
  <a href="#about">О нас</a>
  <a href="#contacts">Контакты</a>
</div>
 
<div class="main">
  <p>Какой-то текст для примера.</p>
</div>

В файл стилей CSS добавляете:

.menu {
    overflow hidden;
    background-color #999;
    position fixed; 
    top ; 
    width 100%; 
}
 
.menu a {
    float left;
    display block;
    color #000;
    padding 15px 15px;
    text-decoration none;
}
 
.content {
    font-style italic;
    width 40%;
    margin-top 60px; 
    margin-left 10px;
}

В результате получится такая картинка:

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

Основные детали кода выше, как я уже говорил, это  position:fixed, top:0 и margin-top: 60px. Верхний отступ может быть другим, если высота меню у вас меньше/больше.

Кстати, если требуется зафиксировать меню внизу страницы, заменяете код на:

. menu {
    position fixed; 
    bottom ; 
    width 100%; 
}

Все то же самое, только вместо top указывается bottom:0. Единственное, нужно будет погуглить как правильно сделать отступ контенту снизу чтобы он тот скрывался за плашкой меню. Решение с margin-bottom:30px; почему-то не сработало.

CSS:

.side-menu {
display: none;
}
@media screen and (min-width: 768px) {
.side-menu * {
box-sizing: border-box;
}
.side-menu {
position: fixed;
display: block;
top: 200px;
right: 0;
z-index: 9999999;
}
.side-menu-buttons {
position: absolute;
top: 0;
right: -2px;
border: 2px solid #BFE2FF;
border-top-left-radius: 10px;
border-bottom-left-radius: 10px;
box-shadow: 0 4px 4px rgba(0,0,0,0.2), 0 10px 18px rgba(0,0,0,0.2);
}
.side-menu-item:first-child {
border-top-left-radius: 10px;
}
.side-menu-item:last-child {
border-bottom-left-radius: 10px;
}
.side-menu-item {
display: flex;
align-items: center;
justify-content: center;
margin: 0px;
width: 74px;
height: 74px;
position: relative;
background-color: #fff;
}
.side-menu-item:not(:last-child) {
border-bottom: 2px solid #BFE2FF;
}
.side-menu-item i,
.side-menu-item span {
font-size: 40px;
color: #000;
transition: color 0.3s;
}
.side-menu-item img {
height: 40px;
}
.side-menu-item svg {
stroke: #000;
height: 40px;
stroke-miterlimit: 10;
stroke-dasharray: 400;
stroke-width: 2;
stroke-linecap: round;
stroke-linejoin: round;
fill: none;
transition: stroke 0.3s;
}
.side-menu-item:hover i,
.side-menu-item:hover span {
color: #337AB7;
}
.side-menu-item:hover svg {
stroke: #337AB7;
}
.side-menu-item.svg-icon-anim:hover svg {
stroke: #337AB7;
animation: strok 1s reverse;
}
@keyframes strok {
100% {
stroke-dashoffset: 400;
}
}
.side-menu-hover {
position: absolute;
background-color: #337AB7;
color: #FFF;
border: 2px solid #BFE2FF;
padding: 0 30px;
transform: translateX(0);
left: 0;
top: 0;
bottom: 0;
opacity: 0;
transition: all 0.2s;
z-index: -100;
font-size: 16px;
border-top-left-radius: 10px;
border-bottom-left-radius: 10px;
white-space: nowrap;
display: flex;
align-items: center;
justify-content: center;
}
.side-menu-item:hover .side-menu-hover {
opacity: 1;
transform: translateX(-100%);
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104

.side-menu {

displaynone;

}

@media screen and (min-width: 768px) {

.side-menu *    {

box-sizingborder-box;

}

.side-menu     {

positionfixed;

displayblock;

top200px;

right;

z-index9999999;

}

.side-menu-buttons {

positionabsolute;

top;

right-2px;

border2pxsolid#BFE2FF;

border-top-left-radius10px;

border-bottom-left-radius10px;

box-shadow4px4pxrgba(0,0,0,0.2),10px18pxrgba(0,0,0,0.2);

}

.side-menu-item:first-child {

border-top-left-radius10px;

}

.side-menu-item:last-child {

border-bottom-left-radius10px;

}

.side-menu-item {

displayflex;

align-itemscenter;

justify-contentcenter;

margin0px;

width74px;

height74px;

positionrelative;

background-color#fff;

}

.side-menu-item:not(:last-child) {

border-bottom2pxsolid#BFE2FF;

}

.side-menu-item i,

    .side-menu-item span {

font-size40px;

color#000;

transitioncolor0.3s;

}

.side-menu-item img {

height40px;

}

.side-menu-item svg {

stroke#000;

height40px;

stroke-miterlimit10;

stroke-dasharray400;

stroke-width2;

stroke-linecapround;

stroke-linejoinround;

fillnone;

transitionstroke0.3s;

}

.side-menu-item:hover i,

    .side-menu-item:hover span {

color#337AB7;

}

.side-menu-item:hover svg {

stroke#337AB7;

}

.side-menu-item.svg-icon-anim:hover svg {

stroke#337AB7;

animationstrok1sreverse;

}

@keyframes strok {

100% {

stroke-dashoffset400;

}

}

.side-menu-hover {

positionabsolute;

background-color#337AB7;

color#FFF;

border2pxsolid#BFE2FF;

padding30px;

transformtranslateX();

left;

top;

bottom;

opacity;

transitionall0.2s;

z-index-100;

font-size16px;

border-top-left-radius10px;

border-bottom-left-radius10px;

white-spacenowrap;

displayflex;

align-itemscenter;

justify-contentcenter;

}

.side-menu-item:hover .side-menu-hover {

opacity1;

transformtranslateX(-100%);

}

}

Создать меню с горизонтальной прокруткой

Шаг 1) Добавить HTML:

Пример

<div class=»scrollmenu»>  <a href=»#home»>Главная</a>  <a href=»#news»>Новости</a>  <a href=»#contact»>Контакт</a>  <a href=»#about»>О Нас</a>  …</div>

Шаг 2) Добавить CSS:

Трюк, чтобы сделать навигационную панель прокручиваемой с помощью и :

Пример

div.scrollmenu {  background-color: #333;  overflow: auto;  white-space: nowrap;}div.scrollmenu a {  display: inline-block;  color: white;  text-align: center;  padding: 14px;  text-decoration: none;} div.scrollmenu a:hover {  background-color: #777;}

Совет: Зайдите на наш учебник CSS Навигации, чтобы узнать больше о навигационных панелях.

CSS

В файл styles.css добавим несколько стилей для всех элементов:

* {
   margin: 0;
   padding: 0;
   box-sizing: border-box;
   font-family: sans-serif;
}

Затем примените эти стили к header.

header {
   height: 70px;
   background-color: #22292F;
   padding: 10px 0;
}

Теперь темная панель навигации растягивается на всю ширину окна просмотра.

Добавьте приведенные ниже стили к классу menu-wrap:

.menu-wrap {
   display: flex;
   justify-content: space-between;
   padding: 0 15px;
}

Мы используем display:flex, чтобы все дочерние элементы занимали свободное пространство, доступное горизонтально. Свойству justify-content установлено значение space-between, чтобы расположить эти элементы как можно дальше друг от друга.

Стилизуем каждый из этих дочерних элементов один за другим.

.logo-img {
   height: 50px;
}
.menu-icon {
   font-size: 2.4em;
   color: #ffffff;
   line-height: 50px;
}

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

nav {
   position: absolute;
   background-color: #3D4852;
   top:70px;
   left:0;
   width: 100%;
}

Теперь добавьте стили списка и ссылок:

nav ul {
   list-style-type: none;
}
nav ul li {
   padding: 0 15px;
}
nav ul li a {
   display: inline-block;
   padding: 12px;
   /* Добавьте ниже свои пользовательские стили, чтобы изменить отображение ссылок */
   color: #DAE1E7;
   text-decoration: none;
   letter-spacing: 0.05em;
}

Также добавьте для ссылок стили при наведении и фокуса:

nav ul li a:hover, nav ul li a:focus {
   color: #eb6f4a;
}

Теперь в браузере отображается следующее:

Меню должно быть сначала скрыто и отображаться при нажатии на иконку. Для этого добавьте к элементу nav ul дополнительные стили max-height, overflow, а также transition:

nav ul li a:hover, nav ul li a:focus {
   color: #eb6f4a;
}

Этот код скроет все меню, потому что для свойства max-height задано значение 0, а для свойства overflow:hidden. Мы не используем для скрытия меню display:none, потому что нам нужен эффект анимации скольжения меню вниз. Он может быть достигнут только с помощью свойства max-height.

HTML

<!-- Начало #dropdown_nav -->
 <ul id="dropdown_nav">
 <li><a class="first" href="#">Главная</a></li>
 <li><a href="#">Шаблоны</a>
 <ul class="sub_nav">
 <li><a href="#">Подменю #1</a></li>
 <li><a href="#">Подменю #2</a></li>
 <li><a href="#">Подменю #3</a></li>
 <li><a href="#">Подменю #4</a></li>
 </ul>
 </li>
 <li><a href="#">Интересное</a>
 <ul class="sub_nav">
 <li><a href="#">Подменю #1</a></li>
 <li><a href="#">Подменю #2</a></li>
 <li><a href="#">Подменю #3</a></li>
 <li><a href="#">Подменю #4</a></li>
 </ul>
 </li>
 <li><a href="#">Дизайн сайта</a></li>
 <li><a href="#">JavaScript и JQuery</a></li>
 <li><a href="#">Новичкам</a></li>
 <li><a href="#">WordPress</a></li>

<li><a class="last" href="#">Новости</a>
 <ul class="sub_nav">
 <li><a href="#">Подменю #1</a></li>
 <li><a href="#">Подменю #2</a></li>
 <li><a href="#">Подменю #3</a></li>
 <li><a href="#">Подменю #4</a></li>
 </ul>
 </li>
 </ul>
 <!-- конец #dropdown_nav -->

У нас есть два тега <ul>, один тег с классом dropdown_nav(основное меню), а второй тег с классом sub_nav (второстепенное, выпадающее меню). Данные классы мы будем задавать далее в стилях CSS.

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

Написание CSS кода меню

1. Зададим стили для , и :

.nav-scroller {
  overflow-y: hidden;
  background-color: #fff;
  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
}
.nav-scroller__items {
  display: flex;
  flex-wrap: nowrap;
  overflow-x: auto;
  white-space: nowrap;
}
.nav-scroller__item {
  color: #424242;
  display: flex;
  padding: 0.5rem 1.25rem;
  text-decoration: none;
}

Список используемых свойств:

  • — скрываем контент, который будет выходить за нижнюю границу элемента ;
  • — устанавливаем цвета фона ;
  • — добавляем тень к ;
  • — делаем элемент flex-контейнером;
  • — разрешаем прокрутку по горизонтали, она будет доступна при необходимости;
  • — запрещаем переносить текст на новую строку, даже если он не помещается в ней;

На этом этапе меню будет иметь следующий вид:

2. Добавим правую границу ко всем элементам кроме последнего:

.nav-scroller__item:not(:last-child) {
  border-right: 1px solid #eee;
}

3. Выделим другим цветом фона активный пункт меню:

.nav-scroller__item_active {
  background-color: #fff59d;
}

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

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

/* для всех пунктов кроме активного */
.nav-scroller__item:not(.nav-scroller__item_active):hover {
  background-color: #f5f5f5;
}
/* для активного пункта */
.nav-scroller__item_active:hover {
  background-color: #fff176;
}

Вот так довольно просто можно создать меню с горизонтальной прокруткой.

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

Плагин Page scroll to id

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

  • вертикальным и горизонтальным скроллингом;
  • разными настройками анимации;
  • поддержкой переходов по ссылкам на другие страницы;
  • подсветкой ссылок, заданием отступов, длительности перехода и т.п.;

Вот как выглядит пример меню:

Думаю, Page scroll to id будет полезен, если вам надо сделать навигацию на одностраничном лендинге, а базовый шаблон не обладает подобной опцией (либо она ограничена в настройках).

Настройка

Создайте пустой HTML-документ и назовите его index.html. Добавьте в него базовый HTML-код.

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
</head>
<body>
   
</body>
</html>

Я использовала шрифт Font Awesome для иконки меню. Поэтому добавьте приведенную далее строку кода ниже тега <title>.

<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.0-2/css/all.min.css" rel="stylesheet">

Создайте файл styles.css и подключите его в HTML-документе:

<link rel="stylesheet" href="styles.css">

Я использовал в качестве логотипа приведенное ниже изображение. Вы можете добавить свое собственное изображение.

Второй способ

Второй способ реализации горизонтального меню заключается в превращении нашего списка в таблицу. Да да, мы не будет использовать теги table и иже с ними. Почему? Как писал выше – исторически сложившийся факт, HTML таблица не используется для построения меню, связано это, в первую очередь, с неудобством прикручивания такого меню к движку. А уж если попытаться сделать и выпадающие вкладки в пунктах, то вы получите такого «монстра», что нагнете всю дальнейшую структуру страницы в самом её начале.

Так вот, для реализации нам нужны стандартные свойства таблицы, поэтому мы воспользуемся нехитрыми манипуляциями с CSS стилями: элементу ul задаем свойство display со значением table а тегам li display — table-cell и, вуаля, перед нами уже горизонтальное меню в виде таблицы со всеми вытекающими свойствами.

Смотрим на пример с id=menu_3.

CSS, опять же, стандартный, отличаются только эти строки:

Как и в первом способе, пункты меню не будут растянуты на всю ширину нашего оберточного дива. Чтобы их растянуть следует дописать свойства table-layout — fixed и width — 100% к элементу ul. В этом случае ul растянутся на всю ширину, а элементы li станут одной ширины (смотрим пример с id=menu_4).

Как сделать горизонтальное меню:

Теперь перейдём к самому интересном, это то как сделать горизонтальное меню в HTML и CSS,  суть примерно такая же, как и с первым случаем, но тут буду уже использовать FlexBox.

Сначала надо внести изменения в HTML, мы просто перетащим навигацию в header.

XHTML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

<header>

<h3>Header</h3>

<nav>

<ul class=»menu»>

<li><a href=»#»>Главная</a></li>

<li><a href=»#»>Новости</a></li>

<li><a href=»#»>Игры</a></li>

<li><a href=»#»>Продукты</a></li>

</ul>

</nav>

</header>
<main>

<div class=»content»>

<h1>Content</h1>

</div>

</main>

Просто перенесли всё навигацию на верх, теперь изменим CSS.

CSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

header {

borderblack2pxsolid;

}
 

header nav {

width600px;

borderblack2pxsolid;

margin-right10px;

padding10px20px;

}
 

header nav ul {

displayflex;

justify-contentspace-around;

padding;

}
 

header nav ul li {

list-style-typenone;

}
 

main .content {

borderblack2pxsolid;

}

Тут самое важное, это то, что для работы с FlexBox, нужно сделать значение свойства , «flex», что и сделали для тега. Дальше, после этого идёт свойство , которое нужно для определения пространства между дочерними блоками, в нашем случае принимает значение «space-around», что означает равномерное распределение пространства, вот результат

Дальше, после этого идёт свойство , которое нужно для определения пространства между дочерними блоками, в нашем случае принимает значение «space-around», что означает равномерное распределение пространства, вот результат.

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

Изображения

СлайдшоуГалерея слайдшоуМодальные изображенияЛайтбоксАдаптивная сетка изображенияСетка изображенияГалерея изображений с вкладкамиНаложение при наведении курсора на изображениеСлайд наложенного изображенияZoom наложенного изображенияTitle наложенного изображенияИконка наложенного изображенияЭффекты изображенияЧерное и белое изображениеПозиция текста над изображениемТекстовые блоки над изображениемИзображение с прозрачным текстомФоновое изображение на всю страницуФорма на изображенииИмидж герояРазмытое фоновое изображение на всю страницуИзменение фона при прокруткеИзображения друг за другомОкруглые изображенияИзображения аватарыАдаптивные изображенияЦентрирование изображенийЭскизы изображенийПредставление команды на страницеЛипкое изображениеОтразить изображениеВстряхнуть изображениеГалерея портфолиоПортфолио с фильтрациейZoom изображенияУвеличительное стекло на изображенииСлайдер сравнения изображений

ФОРМЫ

Форма входаФорма регистрацииФорма оформления заказаКонтактная формаФорма входа в соц сетиРегистрацияФорма с иконкамиРассылка по почтеСложенная формаАдаптивная формаФорма всплывающаяФорма линейнаяОчистить поле вводаКопирование текста в буфер обменаАнимированный поискКнопка поискаПолноэкранный поискПоле ввода в менюФорма входа в менюПользовательский флажок/радиоПользовательский выборТумблер перключательУстановить флажокОпределить Caps LockКнопка запуска на EnterПроверка пароляПереключение видимости пароляМногоступенчатая формаФункция автозаполнения

Выпадающее меню со списком элементов на HTML

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

Конечно, подобную проблему можно решить многими способами, но я бы рекомендовал обходиться без дополнительного JS-кода (и jQuery).

Я считаю так — если задачу теоретически можно решить средствами HTML и CSS без применения джейквери, нужно делать это на практике. Если вы не знаете, что писать и куда нажимать — это отдельная проблема и она не должна вас останавливать. Нужно гуглить, учиться, расти, повышать свою квалификацию как верстальщика и фронтенд-разработчика — никогда не знаешь, где эти навыки пригодятся.

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

<ul class=»mmenuu»>
    <li><a href=#>Меню №1<a>
        <ul class=»ssubmenuu»>
            <li><a href=#>Субменю №1 первого меню<a><li>
        <ul>
    <li>
    <li><a href=#>Меню №2<a>
        <ul class=»ssubmenuu»>
            <li><a href=#>Субменю №2 второго меню<a><li>
            <li><a href=#>Субменю №2 второго меню<a><li>
        <ul>
    <li>
    <li><a href=#>Меню №3<a>
        <ul class=»ssubmenuu»>
            <li><a href=#>Субменю №3 третьего меню<a><li>
            <li><a href=#>Субменю №3 третьего меню<a><li>
            <li><a href=#>Субменю №3 третьего меню<a><li>
        <ul>
    <li><ul>

Первый шаг к нашему выпадающему списку в меню сделан и вот что получилось. Результат:

Мда. Пока не очень, да? Обычный список какой-то (похож на этот), ведь классы menu и submenu я использовал, а стили не написал.

Добавлю немного CSS-магии. Пропишу прямо в html-файле — в <head><style></style></head>. CSS-код:

body {
    /* Убираю отступы. */
    margin0px;
    /* Убираю еще отступы. */
    padding0px;
    /* Задаю шрифт. */
    font 14px ‘Verdana’;}
ul {
    /* Убираю маркеры у списка*/
    list-style none;
    /* Делаю элементы блочными. */
    display block;
    /* Убираю отступы. */
    margin0px;
    /* Убираю еще отступы! */
    padding0px;}
ulafter {
    /* Делаю элементы блочными. */
    display block;
    /* Убираю выравнивание. */
    float none;
    content ‘ ‘;
    clear both;}
ul.mmenuu > li {
    /* Задаю выравнивание и позиционирование. */
    float left;
    /* Считаем координаты относительно исходного места*/
    position relative;}
ul.mmenuu > li > a {
    /* Делаю элементы блочными: */
    display block;
    /* Задаю белый цвет. */
    color #fff;
    /* Задаю отступ 10px. */
    padding 10px;
    /* Убираю форматирование*/
    text-decoration none;
    /* Задаю цвет. */
    background-color #da570f;}
ul.mmenuu > li > ahover {
    /* Задаю цвет при наведении. */
    background-color #eb9316;}
ul.ssubmenuu {
    position absolute;
    width 240px;
    top 37px;
    left0px;
    /* Делаю субменю скрытыми. */
    display none;
    /* Цвет — белый. */
    background-color white;}
ul.ssubmenuu > li {
    /* Блочное расположение элементов*/
    display block;}
ul.ssubmenuu > li > a {
    /* Делаю элементы блочными. */
    display block;
    /* Убираю форматирование*/
    text-decoration none;
    /* Задаю отступ. */
    padding 10px;
    /* Задаю цвет. */
    color #ffffff;
    /* Еще цвет. */
    background-color #da570f;}
ul.ssubmenuu > li > ahover {
    /* Цвет бэкграунда при наведении. */
    background-color #eb9316;
    /* Задаю подчеркивание*/
    text-decoration underline;}
ul.mmenuu > lihover > ul.ssubmenuu {
    /* Делаю элементы блочными. */
    display block;}

Результат:

Ого! В жизни не видел ничего прекраснее этого минималистичного выпадающего списка. Без JavaScript и обращения к фрилансерам!

Простое горизонтальное меню

Самое простое горизонтальное меню без каких-либо изысков.

Пример HTML и CSS: простое горизонтальное меню

Описание примера

  1. Создаем маркированный список (тег <UL>), в который помещаем HTML-ссылки (тег <A>). Убираем у этого списка и у его пунктов маркеры (CSS list-style), а также внешние поля (CSS margin) и внутренние отступы (CSS padding).
  2. Чтобы теги <LI> выстроились по горизонтали — делаем их встроенными (inline) с помощью свойства CSS display:inline.
  3. Так как элементы списка у нас теперь уровня строки, то мы легко их можем выравнивать по левому или правому краю блока, используя CSS text-align.

Расположить элементы меню в одну строку и выровнять их можно и другим способом — заменив последние два пункта описания на свойство CSS float со значением left или right. Но здесь надо понимать, что при значении left элементы примут правильный порядок, а вот при right (как надо в нашем примере) они примут обратный порядок и придется менять местами ссылки.

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

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

Adblock
detector