- 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 щоб змінити поведінку елемента.
Нам потрібно використовувати властивість css, яке буде робити пункти меню в одну лінію, але залишить всі інші значення як у блокового елемента.
Допустимо використовувати одне з трьох значень:
.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; /* показуємо меню при наведенні на перший рівень меню */
}
Вас може зацікавити