Открыть меню    

CSS3 lavalamp меню


lavalapm css3 Сегодня я покажу, как создать CSS3 lavalamp меню. Меню будет вести себя так же, как jQuery lavalamp меню, разница будет заключаться лишь в отсутствии клавишного управления. Меню lavalamp – это уникальный способ добавить своему сайту креативности. Ну и недурно будет сделать это меню, используя только CSS3.

lavalamp css3

HTML

HTML разметка предельно проста: неупорядоченный список ul, в элементах которого (li) находятся ссылки (a), а также div#slider.

<ul id="nav">
<li><a href="#">Home</a></li>
<li><a href="#">Contact</a></li>
<li><a href="#">Help</a></li>
<li><a href="#">About</a></li>
<div id="slider"></div>
</ul>

Это все, что вам понадобится.

CSS

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

Стилизуем неупорядоченный список (ul#nav).

#nav {
background: white;
border: 1px solid #CACACA;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
-webkit-box-shadow: 0px 0px 3px 1px #ebebeb;
-moz-box-shadow: 0px 0px 3px 1px #ebebeb;
box-shadow: 0px 0px 3px 1px #ebebeb;
height: 40px;
width: 400px;
margin: 0 auto;
margin-top: 50px;
position: relative;
}

Большая часть кода отвечает за визуальный вид. Что нам важно так это объявление position: relative для элемента ul#nav. И важно это потому, что наш div#slider будет позиционирован абсолютно (position: absolute), относительно элемента ul#nav.

Стилизуем элементы списка (li) и ссылки (a).

#nav li {
float: left;
width: 100px;
height: 40px;
text-align: center;
}

#nav li a {
color: #717171;
font-family: Arial;
font-size: 16px;
line-height: 40px;
display: block;
width: 100px;
height: 40px;
}

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

Последним шагом будет стилизация блока div#slider.

#slider {
left: 0px;
position: absolute;
top: 35px;
height: 5px;
background: #717171;
width: 100px;
-moz-border-radius-topleft: 0px;
-moz-border-radius-topright: 0px;
-moz-border-radius-bottomright: 10px;
-moz-border-radius-bottomleft: 10px;
-webkit-border-radius: 0px 0px 10px 10px;
border-radius: 0px 0px 10px 10px;
-webkit-transition: all 300ms ease;
-moz-transition: all 300ms ease;
-o-transition: all 300ms ease;
transition: all 300ms ease;
}

Опять же, большая часть кода отвечает за внешний вид, но есть и то, без чего обойтись нельзя. Прежде всего, это объявление position: absolute. Оно позволяет нам поместить div#slider где угодно внутри неупорядоченного списка ul#nav, не затрагивая при этом других элементов. Чтобы div#slider мог плавно анимироваться, добавлено свойство CSS3 transition. И последнее - место, куда будет анимироваться div#slider, зависит от первоначального значения свойства left. В нашем случае значение left равно 0px, поэтому всякий раз, когда юзер уводит курсор мышки за пределы навигации (ul#nav), div#slider скрывается под первым элементом меню. Если для свойства left задать величину, равную, к примеру, 100px, то div#slider будет анимироваться ко второму элементу меню (когда юзер убирает мышку за пределы ul#nav). Это можно использовать для акцентирования внимания на активной странице.

#nav li:nth-child(1):hover ~ #slider {
left: 0px;
}

#nav li:nth-child(2):hover ~ #slider {
left: 100px;
}

#nav li:nth-child(3):hover ~ #slider {
left: 200px;
}

#nav li:nth-child(4):hover ~ #slider {
left: 300px;
}

Принцип работы таков: когда вы навели курсор мышки на n-й элемент списка (#nav li:nth-child(n)), мы используем селектор "~", чтобы выбрать смежный div#slider и задать ему новое значение для свойства left. Данный селектор (~) выберет, пример (#nav li:nth-child(2):hover ~ #slider), все элементы #slider стоящие за тегом li:nth-child(2):hover (так как #slider один, то и будет выбран один).

Краткий ликбез по transition и :nth-child

Свойство перехода (transition) одно сильнейших достоинств CSS3. Оно позволяет анимировать перемены, которые случаются с элементом при вступлении в силу псевдо-свойств. Например, у нас, когда пользователь наводит курсор на ссылку навигации, вступает в силу :hover (псевдо-свойство выделение), перемещая #slider, в зависимости от нового значения свойства left селектора #nav li:nth-child(n):hover ~ #slider.

    li:nth-child(2) {  
       border: 1px solid black;  
    }  


lavalapm css3 Настанут времена, когда вместо дочернего элемента, вам придется выбрать элемент типа.
Представьте разметку, которая состоит из пяти элементов списков. Если вы захотите выбрать только третий li, и не имеете при этом уникальный id, вы вправе применить псевдокласс li:nth-of-type(3). В коде выше только второй элемент списка (li) имеет границу.

Источник

Комментарии к статье

аватарка пользователя
2017-04-30
Vladimir

как запустить событие изменение положения слайдера при добавлении класса к якорной ссылке?