Продолжаем изучение CSS и сегодня приступим к построению вертикального меню.
Такие меню очень популярны и без них не обходится каждый второй сайт. Статей по созданию подобной навигации написано немало, но меня данный факт волнует мало. Моя задача - разобраться в принципе построения подобного меню и возможность сделать его самому, на коленках за пару минут. В действительности все просто, даже очень просто.
Созданное в этой статье вертикальное меню будет далеко по своим внешним эстетическим данным от совершенства. Но это и неважно - важен сам принцип, механизм построения и функционирования подобной навигации. А всякие фантики-бантики можно навесить всегда, было бы желание.
Механизм действия и построения такого меню основан на одном единственном CSS-свойстве -
, а точнее на его значениях - 1
display
и 1
display: block
.1
display: none
В этой статье будет создаваться простое вертикальное меню, в котором подменю размещается сбоку от основного меню. Существует более сложный вариант вертикального меню, в котором подменю размещается внутри основного.
Такая навигация называется
и принцип его создания будет рассмотрен позже.1
меню-аккордеон
C чего же мы начнем? С построения обычного маркированного списка, пунктами которого будут ссылки. Списку зададим класс с именем
, так как он нам понадобиться в дальнейшем:1
menu
Созданное только что меню будет внешним, а внутри него (точнее внутри его пунктов) мы поместим еще одно меню. Получиться одно меню, вложенное в другое (помните уроки HTML?).
То есть, у нас есть пять пунктов внешнего меню - вот мы и вложим в каждый из них еще одно меню, перед ссылкой. Ссылка будет исполнять роль переключателя, который будет переводить значение свойства
из none в 1
display
и наоборот.1
block
В итоге получиться пять подменю, для каждого из которых мы пропишем один класс -
. Этот класс нам также потребуется в дальнейшем:1
sub-menu
Все - каркас будущего вертикального меню готов и больше мы его трогать не будем. Остальные действия будем выполнять только с помощью CSS. Для начала создадим базовые стили, чтобы придать нашему меню хоть какой-то вид:
Здесь мы обнуляем
и 1
margin
для всех элементов, в том числе и 1
padding
; убираем маркер у пунктов меню; убираем подчеркивание у ссылок.1
ul
Для внешнего списка с классом menu задаем отступ сверху и слева, чтобы не прилипал к границам окна браузера и устанавливаем фиксированную ширину в
.1
100px
Дальше форматируем пункты меню:
Ставим высоту каждого элемента
равной 20px и выравниваем текст внутри него по центру вертикали; задаем фоновый цвет для них же, чтобы можно было различать каждый из пунктов на фоне окна браузера; делаем нижний 1
li
в 1px, чтобы элементы 1
margin
не сливались между собой и были похожи на пункты меню.1
li
Последний шаг - устанавливаем для
относительное позиционирование, так как в дальнейшем будем размещать подменю относительно этого элемента.1
li
Далее чисто косметические правила для ссылок, находящихся внутри внешнего меню - размер шрифта (кегль) и цвет текста:
Теперь приступаем к самому интересному - стилизации подменю. Для начала зададим его ширину (пусть будет чуть меньше ширины внешнего списка):
Затем установим для подменю абсолютное позиционирование для того, чтобы сместить его вправо на значение, равное ширине внешнего списка и “прилепить” кверху каждого из элементов
.1
li
И самое главное - скроем его отображение в браузере через правило
. В результате код будет выглядеть следующим образом:1
display: none
Немного стилизуем пункты меню и ссылки в подменю. Для каждого пункта подменю устанавливаем цвет фона, чтобы отличать подменю от основного меню. И цвет ссылок по той же причине:
Заключительный код, который заставляет наше меню работать именно так, как задумано. То есть, этим мы говорим браузеру присвоить свойству
значение 1
display
при наведении мыши на ссылку во внешнем списке:1
block
В результате подменю отобразиться (браузер сгенерирует его). Изначально в коде было прописано для него
. То есть, для браузера такого подменю не существовало и в DOM-модели документа элемент 1
display: none
с классом 1
ul
отсутствовал.1
sub-menu
Так как этому подменю задано абсолютное позиционирование со смещением вправо на
и вверх на 1
100px
, то оно поместиться точно справа вверху от своего родителя - пункта меню внешнего списка.1
0px
В принципе, на этом уже все сказано. Основной принцип вертикального меню показан и создан. Остальное - уже дело техники, если нужно придать ему нужный вид. На закуску пример нашего меню в обычном состоянии:
И меню, когда наведена мышка на один из пунктов меню и справа появляется подменю, соответствующее этому пункту:
На этом все.