CSS-live.ru

Меню с эффектом LavaLamp на чистом CSS3

Я думаю, что вы уже видели, анимированные меню с эффектом LavaLamp (на основе плагина JQuery). Сегодня я хотел бы вам рассказать, как повторить то же поведение только на чистом CSS3 (без JavaScript). В нашем меню я буду использовать CSS3 transitions (для анимации элементов). Итак, если вы готовы, давайте начинать.

Шаг 1. HTML

Как обычно, мы начнем с HTML. Вот HTMLкод нашего меню. Неудивительно, что оно будет сделано на основе UL-LI. Самое интересное будет в CSS стилях, конечно.

<ul id="nav">​
    <li>​<a href="http://www.script-tutorials.com/">​Home</a>​</li>​
    <li>​<a class="hsubs" href="#">​Menu 1</a>​
        <ul class="subs">​
            <li>​<a href="#">​Submenu 1</a>​</li>​
            <li>​<a href="#">​Submenu 2</a>​</li>​
            <li>​<a href="#">​Submenu 3</a>​</li>​
            <li>​<a href="#">​Submenu 4</a>​</li>​
            <li>​<a href="#">​Submenu 5</a>​</li>​
        </ul>​
    </li>​
    <li>​<a class="hsubs" href="#">​Menu 2</a>​
        <ul class="subs">​
            <li>​<a href="#">​Submenu 2-1</a>​</li>​
            <li>​<a href="#">​Submenu 2-2</a>​</li>​
            <li>​<a href="#">​Submenu 2-3</a>​</li>​
            <li>​<a href="#">​Submenu 2-4</a>​</li>​
            <li>​<a href="#">​Submenu 2-5</a>​</li>​
            <li>​<a href="#">​Submenu 2-6</a>​</li>​
            <li>​<a href="#">​Submenu 2-7</a>​</li>​
            <li>​<a href="#">​Submenu 2-8</a>​</li>​
        </ul>​
    </li>​
    <li>​<a class="hsubs" href="#">​Menu 3</a>​
        <ul class="subs">​
            <li>​<a href="#">​Submenu 3-1</a>​</li>​
            <li>​<a href="#">​Submenu 3-2</a>​</li>​
            <li>​<a href="#">​Submenu 3-3</a>​</li>​
            <li>​<a href="#">​Submenu 3-4</a>​</li>​
            <li>​<a href="#">​Submenu 3-5</a>​</li>​
        </ul>​
    </li>​
    <li>​<a href="#">​Menu 4</a>​</li>​
    <li>​<a href="#">​Menu 5</a>​</li>​
    <li>​<a href="#">​Menu 6</a>​</li>​
    <li>​<a href="http://www.script-tutorials.com/pure-css3-lavalamp-menu/">​Back</a>​</li>​
    <div id="lavalamp">​</div>​
</ul>​

Шаг 2. CSS

Вот и CSS стили нашего LavaLamp меню.

#nav,#nav ul {
    list-style: none outside none;
    margin: 0;
    padding: 0;
}
#nav {
    background: url('menu_bg.png') no-repeat scroll 0 0 transparent;
    clear: both;
    font-size: 12px;
    height: 58px;
    padding: 0 0 0 9px;
    position: relative;
    width: 957px;
}
#nav ul {
    background-color: #222;
    border:1px solid #222;
    border-radius: 0 5px 5px 5px;
    border-width: 0 1px 1px;
    box-shadow: 0 5px 5px rgba(0, 0, 0, 0.5);
    left: -9999px;
    overflow: hidden;
    position: absolute;
    top: -9999px;
    z-index: 2;

    -moz-transform: scaleY(0);
    -ms-transform: scaleY(0);
    -o-transform: scaleY(0);
    -webkit-transform: scaleY(0);
    transform: scaleY(0);

    -moz-transform-origin: 0 0;
    -ms-transform-origin: 0 0;
    -o-transform-origin: 0 0;
    -webkit-transform-origin: 0 0;
    transform-origin: 0 0;

    -moz-transition: -moz-transform 0.1s linear;
    -ms-transition: -ms-transform 0.1s linear;
    -o-transition: -o-transform 0.1s linear;
    -webkit-transition: -webkit-transform 0.1s linear;
    transition: transform 0.1s linear;
}
#nav li {
    background: url('menu_line.png') no-repeat scroll right 5px transparent;
    float: left;
    position: relative;
}
#nav li a {
    color: #FFFFFF;
    display: block;
    float: left;
    font-weight: normal;
    height: 30px;
    padding: 23px 20px 0;
    position: relative;
    text-decoration: none;
    text-shadow: 1px 1px 1px #000000;
}
#nav li:hover > a {
    color: #00B4FF;
}
#nav li:hover, #nav a:focus, #nav a:hover, #nav a:active {
    background: none repeat scroll 0 0 #121212;
    outline: 0 none;
}
#nav li:hover ul.subs {
    left: 0;
    top: 53px;
    width: 180px;

    -moz-transform: scaleY(1);
    -ms-transform: scaleY(1);
    -o-transform: scaleY(1);
    -webkit-transform: scaleY(1);
    transform: scaleY(1);
}
#nav ul li {
    background: none;
    width: 100%;
}
#nav ul li a {
    float: none;
}
#nav ul li:hover > a {
    background-color: #121212;
    color: #00B4FF;
}
#lavalamp {
    background: url('lavalamp.png') no-repeat scroll 0 0 transparent;
    height: 16px;
    left: 13px;
    position: absolute;
    top: 0px;
    width: 64px;

    -moz-transition: all 300ms ease;
    -ms-transition: all 300ms ease;
    -o-transition: all 300ms ease;
    -webkit-transition: all 300ms ease;
    transition: all 300ms ease;
}
#lavalamp:hover {
    -moz-transition-duration: 3000s;
    -ms-transition-duration: 3000s;
    -o-transition-duration: 3000s;
    -webkit-transition-duration: 3000s;
    transition-duration: 3000s;
}
#nav li:nth-child(1):hover ~ #lavalamp {
    left: 13px;
}
#nav li:nth-child(2):hover ~ #lavalamp {
    left: 90px;
}
#nav li:nth-child(3):hover ~ #lavalamp {
    left: 170px;
}
#nav li:nth-child(4):hover ~ #lavalamp {
    left: 250px;
}
#nav li:nth-child(5):hover ~ #lavalamp {
    left: 330px;
}
#nav li:nth-child(6):hover ~ #lavalamp {
    left: 410px;
}
#nav li:nth-child(7):hover ~ #lavalamp {
    left: 490px;
}
#nav li:nth-child(8):hover ~ #lavalamp {
    left: 565px;
}

Заключение

Надеюсь, вам понравилось наше новое меню на CSS3, не забудьте сказать спасибо и оставить комментарий :) Удачи!

Демо  Скачать

Оригинал статьи

P.S. Это тоже может быть интересно:

15 комментариев

      1. Да на самом деле всё нормально. Просто имеется ввиду много лишнего кода под капотом. Но, я не считаю это проблемой совершенно, главное, что всё чётко и отлично работает. И валидация ради валидации неуместна.

  1. Ну движок Wordprass все равно, а за меню огромное спасибо очень красивое и не сложное! :-)

  2. Есть «косяк» в этом меню (смотрел в хроме), ползунок верхний не корректно работает!
    Если мышкой наводить на меню 3, 4,5 (ползунок останавливается на 2 меню), после наведения на второе меню — все отлично работает!

      1. Действительно, конфликт в кукисах возник!!!
        Все работает шикарно теперь!

    1. Селектор обобщенных родственных элементов
      нарпример p~a
      выберает все элементы «a» идущие после «p» и имеющие общего с «p» родителья

  3. Есть ещё один баг меню.
    Если навести сразу же на 3 или 2 пунк меню, то перейти на подменю невозможно — пропадает(FF).
    Ну и ещё раз про баг хрома — при наведении на любой(кроме 2-го) пунка меню, ползунок остается над предыдушим пунктом.
    Конечно же в ie8 не работает :)
    И в итоге в половине браузеров не работает. Годится как пример, но использовать нельзя никак, совсем никак! :(

  4. К сожалению, из-за проблем в FireFox, придется отказаться от этого меню.
    Хочу сделать сайт, использующий по максимуму html5 и css3 и ориентируюсь только на OPERA, FIREFOX и CHROME. Safari устанавливать влом, а IE убью скриптом. Считаю, что помочь эксплореру в развитии может только полный отказ разработчиков от его поддержки. То есть, микромягкие начнут заботиться о соответствии современным стандартам и технологиям лишь тогда, когда больше 50% сайтов будут отказываться в нем работать.

Добавить комментарий для Андрей Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Получать новые комментарии по электронной почте. Вы можете подписаться без комментирования.