Навигационное меню с помощью CSS3
HTML
Html разметка будущего меню:
< nav id = "colorNav" > < ul > < li > < a href = "#" ></ a > < ul > < li >< a href = "#" >Dropdown item 1</ a ></ li > < li >< a href = "#" >Dropdown item 2</ a ></ li > <!-- выпадающий список --> </ ul > </ li > <!-- элементы меню --> </ ul > </ nav > |
Каждый пункт меню это элемент списка <ul>. Внутри него есть ссылка с CSS классом для иконки и другой список, который будет показан при наведении как выпадающее меню.
CSS
Как видно в нашей html разметке мы имеем вложенные неупорядоченные списки (ul), поэтому мы должны внимательно писать наш CSS код. Чтобы наши списки стилизовались правильно существует специальный CSS селектор для потомков «>»:
#colorNav > ul{ width : 450px ; margin : 0 auto ; } |
Данный код ограничивает ширину и отступы только списка, который является прямым потомком #colorNav. Рассмотрим код самих элементов меню:
#colorNav > ul > li{ /* стилизация только родительских элементов li */ list-style : none ; box-shadow: 0 0 10px rgba( 100 , 100 , 100 , 0.2 ) inset , 1px 1px 1px #CCC ; display : inline- block ; line-height : 1 ; margin : 1px ; border-radius: 3px ; position : relative ; } |
Задаем параметр display inline-block для отображения элементов меню в одну строку, и задаем position:relative для правильного отображения выпадающего списка. Элементы anchor (<a>) будут содержать иконки.
#colorNav > ul > li > a{ color :inherit; text-decoration : none !important ; font-size : 24px ; padding : 25px ; } |
Перейдем к выпадающим спискам, определим CSS свойство transitition. Изначально установи максимальную высоту равную 0, чтобы спрятать список, а при наведении анимируем высоту, увеличивая её, таким образом список плавно появится.
#colorNav li ul{ position : absolute ; list-style : none ; text-align : center ; width : 180px ; left : 50% ; margin-left : -90px ; top : 70px ; font : bold 12px 'Open Sans Condensed' , sans-serif ; max-height : 0px ; overflow : hidden ; -webkit-transition:max-height 0.4 s linear; -moz-transition:max-height 0.4 s linear; transition:max-height 0.4 s linear; } |
И запуск анимации:
#colorNav li:hover ul{ max-height : 200px ; } |
Если ваш выпадающий список должен содержать больше элементов, необходимо увеличить высоту (200px), к сожалению нет способа только с помощью CSS вычислить высоту блока, поэтому придется вручную менять значение.
Теперь стилизуем элементы выпадающего списка:
#colorNav li ul li{ background-color : #313131 ; } #colorNav li ul li a{ padding : 12px ; color : #fff !important ; text-decoration : none !important ; display : block ; } #colorNav li ul li:nth-child(odd){ background-color : #363636 ; } #colorNav li ul li:hover{ background-color : #444 ; } #colorNav li ul li:first-child{ border-radius: 3px 3px 0 0 ; margin-top : 25px ; position : relative ; } #colorNav li ul li:first-child:before{ content : '' ; position : absolute ; width : 1px ; height : 1px ; border : 5px solid transparent ; border-bottom-color : #313131 ; left : 50% ; top : -10px ; margin-left : -5px ; } #colorNav li ul li:last-child{ border-bottom-left-radius: 3px ; border-bottom-right-radius: 3px ; } |
Внесем немного разнообразия, сделаем элементы меню разноцветными:
#colorNav li. green { /* цвет элемента */ background-color : #00c08b ; /* цвет иконки */ color : #127a5d ; } #colorNav li. red { background-color : #ea5080 ; color : #aa2a52 ;} #colorNav li. blue { background-color : #53bfe2 ; color : #2884a2 ;} #colorNav li.yellow{ background-color : #f8c54d ; color : #ab8426 ;} #colorNav li. purple { background-color : #df6dc2 ; color : #9f3c85 ;} |
Еще один приятный момент использования шрифта иконок: мы можем менять цвет всего лишь задав нужный стиль. Таким образом мы можем производить все настройки используя только CSS.
На этом всё!
Комментарии