- UA
- RU
Навигационное меню – это самая важная часть сайта. Удобное навигационное меню помогает пользователю быстро понять, где и что находится, на что нажать или на что навести курсор, чтобы увидеть вложенные элементы.
Випадающее навигационное меню уместно, когда у нас есть подпункты одного или нескольких пунктов меню и мы хотим, чтобы пользователь мог увидеть их быстрее.
То есть наводим на первый уровень → видим вложенные пункты → нажимаем и переходим на страницу второго уровня (подпункт). Фактически одно нажатие.
Если мы не даем возможность сразу перейти на подпункт, то пользователю нужно будет сначала посетить родительский раздел, а затем только вложенный в него пункт меню. Это не удобно с точки зрения юзабилиты — у нас есть лишнее нажатие и переход, то есть два нажатия.
При наличии каталога. В большинстве случаев каталог имеет категории и подкатегории.
К примеру вложенность:
— Магазин (уровень 1)
— Категория 1 (уровень 2)
— Категория 2 (уровень 2)
— Категория 3 (уровень 2)
В других случаях, когда есть раздел «О нас», например
— О нас (уровень 1)
— Наша история (уровень 2)
— Наша команда (уровень 2)
— Отзывы (уровень 2)
Условия
По коду дополнительно можно посмотреть здесь — «Стандартные HTML элементы и структура сайта«, там же можно загрузить HTML шаблон.
Почему именно так
Написание кода для навигационного меню можно разделить на две части – делаем первый уровень и после добавляем второй рвиен. Это пример, поэтому я использовал цвет и размеры по своему усмотрению. Начинаем с написания кода для первого уровня навигационного меню.
<ul class="menu">
<li><a href="#">Home</a></li>
<li><a href="#">Shop</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">About Us</a></li>
<li><a href="#">Contact Us</a></li>
</ul>
Тег <a> не оставляем пустым. Если нам неизвестна ссылка, то ставим ‘#‘. Это обязательно.
Тег <li> это блочный элемент, чтобы сделать его линейным (пункты рядом друг с другом), нам необходимо использовать css свойство display чтобы изменить поведение элемента.
Нам нужно использовать значение, которое будет делать пункты меню в одну линию, но оставит все остальные значения, как у блочного элемента.
Допустимо использовать одно из трех значений:
.menu {
display: flex; /* задаем flex на родительский контейнер чтобы сделать вложенные элементы в одну строчку */
background: #4d6719; /* добавляю фон на родительский контейнер */
}
.menu li {
font-size: 16px; /* размер шрифта */
font-family: Arial, Helvetica; /* добавляем через запятую шрифты */
border-left: 1px solid #7ba428; /* визуальный элемент – полоска между пунктами */
position: relative; /* это необходимо, чтобы позиционировать второй уровень относительно первого */
}
.menu>li:last-child {
border-right: 1px solid #7ba428; /* мы добавили полоску слева, но у последнего пункта полоски не будет справа, поэтому добавляем ее отдельно только на последний пункт */
}
.menu li a {
display: block; /* делаем тэг блоковым, чтобы можно было применить отступы */
padding: 0 25px; /* добавляю отступы слева и справа – чтобы было пространство между полосками */
line-height: 40px; /* такой высоты у нас будет контейнер, мы его центрируем по вертикали. */
color: #9acd32;
text-decoration: none;
}
.menu li a:hover,
.menu li.active>a {
color: #fff;
background: #9acd32;
/* изменяем при наведении цвет фона пункта меню, цвет текста, через который прописываем значение для активного пункта */
}
По «.menu li a»:
Визуально меню будет выглядеть так:
<ul class="menu">
<li><a href="#">Home</a></li>
<li class="active">
<a href="#">Shop</a>
<ul>
<li><a href="#">Category 1</a></li>
<li class="active"><a href="#">Category 2</a></li>
<li><a href="#">Category 3</a></li>
</ul>
</li>
<li><a href="#">Blog</a></li>
<li><a href="#">About Us</a></li>
<li><a href="#">Contact Us</a></li>
</ul>
/* sublevel */
.menu li ul {
position: absolute; /* позиционируем абсолютно, чтобы этот элемент был в пределах первого уровня "shop" - я добавлял на него relative */
top: 40px; /* указываем отступ сверху, который равен нашему line-height первого уровня */
left: 0; /* позиционирование слева */
width: 200px; /* задаем размер контейнера, иначе ширина будет равна ширине пункта меню второго уровня */
border: 1px solid #5c7b1e; /* зададим обводку */
border-top: none; /* уберем обводку сверху – она у нас будет добавлена на li сверху */
display: none; /* после того, как все стили оформлены, скрываем второй уровень меню */
}
.menu li ul li {
border: none; /* обнуляем стили первого уровня */
border-top: 1px solid #5c7b1e;
}
.menu li ul li a {
line-height: 23px; /* обнуляем межстрочный интервал с первого уровня */
background: #c2e184;
color: #3d5214;
padding: 10px 15px; /* задаем отступы */
}
.menu li ul li a:hover,
.menu li ul li.active a {
background: #6b9023;
color: #fff;
}
/* mouse over */
.menu li:hover ul {
display: block; /* показываем меню при наведении на первый уровень меню */
}
<ul class="menu">
<li><a href="#">Home</a></li>
<li class="active">
<a href="#">Shop</a>
<ul>
<li><a href="#">Category 1</a></li>
<li class="active"><a href="#">Category 2</a></li>
<li><a href="#">Category 3</a></li>
</ul>
</li>
<li><a href="#">Blog</a></li>
<li><a href="#">About Us</a></li>
<li><a href="#">Contact Us</a></li>
</ul>
.menu {
display: flex; /* задаем flex на родительский контейнер чтобы сделать вложенные элементы в одну строчку */
background: #4d6719; /* добавляю фон на родительский контейнер */
}
.menu li {
font-size: 16px; /* размер шрифта */
font-family: Arial, Helvetica; /* добавляем через запятую шрифты */
border-left: 1px solid #7ba428; /* визуальный элемент – полоска между пунктами */
position: relative; /* это необходимо, чтобы позиционировать второй уровень относительно первого */
}
.menu>li:last-child {
border-right: 1px solid #7ba428; /* мы добавили полоску слева, но у последнего пункта полоски не будет справа, поэтому добавляем ее отдельно только на последний пункт */
}
.menu li a {
display: block; /* делаем тэг блоковым, чтобы можно было применить отступы */
padding: 0 25px; /* добавляю отступы слева и справа – чтобы было пространство между полосками */
line-height: 40px; /* такой высоты у нас будет контейнер, мы его центрируем по вертикали. */
color: #9acd32;
text-decoration: none;
}
.menu li a:hover,
.menu li.active>a {
color: #fff;
background: #9acd32;
/* изменяем при наведении цвет фона пункта меню, цвет текста, через который прописываем значение для активного пункта */
}
/* sublevel */
.menu li ul {
position: absolute; /* позиционируем абсолютно, чтобы этот элемент был в пределах первого уровня "shop" - я добавлял на него relative */
top: 40px; /* указываем отступ сверху, который равен нашему line-height первого уровня */
left: 0; /* позиционирование слева */
width: 200px; /* задаем размер контейнера, иначе ширина будет равна ширине пункта меню второго уровня */
border: 1px solid #5c7b1e; /* зададим обводку */
border-top: none; /* уберем обводку сверху – она у нас будет добавлена на li сверху */
display: none; /* после того, как все стили оформлены, скрываем второй уровень меню */
}
.menu li ul li {
border: none; /* обнуляем стили первого уровня */
border-top: 1px solid #5c7b1e;
}
.menu li ul li a {
line-height: 23px; /* обнуляем межстрочный интервал с первого уровня */
background: #c2e184;
color: #3d5214;
padding: 10px 15px; /* задаем отступы */
}
.menu li ul li a:hover,
.menu li ul li.active a {
background: #6b9023;
color: #fff;
}
/* mouse over */
.menu li:hover ul {
display: block; /* показываем меню при наведении на первый уровень меню */
}
Вас также может заинтересовать