Меню с эффектом 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. Это тоже может быть интересно:
Не думал, что на CSS можно написать столь хорошую анимацию…
Хаха Wordprass это стремно, я думал ты сам верстал!)))))
Да нет, я бы себе такого не позволил никогда))
А в чем стремность движка WordPress?
Да на самом деле всё нормально. Просто имеется ввиду много лишнего кода под капотом. Но, я не считаю это проблемой совершенно, главное, что всё чётко и отлично работает. И валидация ради валидации неуместна.
Ну движок Wordprass все равно, а за меню огромное спасибо очень красивое и не сложное! :-)
Пожалуйста, пользуйтесь на здоровье)
Есть «косяк» в этом меню (смотрел в хроме), ползунок верхний не корректно работает!
Если мышкой наводить на меню 3, 4,5 (ползунок останавливается на 2 меню), после наведения на второе меню — все отлично работает!
Возможно баг Хрома)
Действительно, конфликт в кукисах возник!!!
Все работает шикарно теперь!
Что за знак ~ ?
Селектор обобщенных родственных элементов
нарпример p~a
выберает все элементы «a» идущие после «p» и имеющие общего с «p» родителья
Есть ещё один баг меню.
Если навести сразу же на 3 или 2 пунк меню, то перейти на подменю невозможно — пропадает(FF).
Ну и ещё раз про баг хрома — при наведении на любой(кроме 2-го) пунка меню, ползунок остается над предыдушим пунктом.
Конечно же в ie8 не работает :)
И в итоге в половине браузеров не работает. Годится как пример, но использовать нельзя никак, совсем никак! :(
Фууух … я думал у меня только глючит это!
К сожалению, из-за проблем в FireFox, придется отказаться от этого меню.
Хочу сделать сайт, использующий по максимуму html5 и css3 и ориентируюсь только на OPERA, FIREFOX и CHROME. Safari устанавливать влом, а IE убью скриптом. Считаю, что помочь эксплореру в развитии может только полный отказ разработчиков от его поддержки. То есть, микромягкие начнут заботиться о соответствии современным стандартам и технологиям лишь тогда, когда больше 50% сайтов будут отказываться в нем работать.