Я убежден, что CSS3 функции, такие как переходы, анимация и трансформация могут добавить дополнительную привлекательность многим элементам в Ваших проектах.
В этой статье вы увидите, как можно построить симпатичное, анимированное выпадающее меню при помощи одного только CSS3.
Обратите внимание на селектор #menu li:hover>a.Это, пожалуй,наиболее важныйCSSтрюк дляэтоговыпадающего меню.
Итак,вот какэто работает:выбираемэлемент "а", который являетсядочерним для"li", а элемент "li" должен бытьв свою очередь потомком"#menu".Подробнее о селекторах читайте здесь.
#menu li { float:left; border-right:1pxsolid#222;
-moz-box-shadow:1px00#444;
-webkit-box-shadow:1px00#444;
box-shadow:1px00#444; position:relative; } #menu a { float:left; padding:12px30px; color:#999; text-transform:uppercase; font:bold12px Arial, Helvetica; text-decoration:none; text-shadow:01px0#000; } #menu li:hover > a { color:#fafafa; } *html #menu li a:hover {/* IE6 only */ color:#fafafa; }
Подпункты меню.
Спомощью свойства CSS3transitionsмы можем создать анимациюизменяя такиеCSS-свойства, какmargin илиopacity.И яиспользовал этодля анимацииподменю. Вот что в результате получилось:
#menu ul { margin:20px000;
_margin:0;/*IE6 only*/
opacity:0; visibility:hidden; position:absolute; top:38px; left:0; z-index:9999; background:#444; background: -moz-linear-gradient(#444,#111); background: -webkit-gradient(linear,leftbottom,lefttop,color-stop(0,#111),color-stop(1,#444)); background: -webkit-linear-gradient(#444,#111); background: -o-linear-gradient(#444,#111); background: -ms-linear-gradient(#444,#111); background: linear-gradient(#444,#111);
-moz-box-shadow:0-1px rgba(255,255,255,.3);
-webkit-box-shadow:0-1px0 rgba(255,255,255,.3);
box-shadow:0-1px0 rgba(255,255,255,.3);
-moz-border-radius:3px;
-webkit-border-radius:3px;
border-radius:3px;
-webkit-transition: all .2s ease-in-out;
-moz-transition: all .2s ease-in-out;
-ms-transition: all .2s ease-in-out;
-o-transition: all .2s ease-in-out;
transition: all .2s ease-in-out; } #menu li:hover > ul {
opacity:1; visibility:visible; margin:0; } #menu ul ul { top:0; left:150px; margin:00020px;
_margin:0;/*IE6 only*/
-moz-box-shadow:-1px00 rgba(255,255,255,.3);
-webkit-box-shadow:-1px00 rgba(255,255,255,.3);
box-shadow:-1px00 rgba(255,255,255,.3); } #menu ul li { float:none; display:block; border:0;
_line-height:0;/*IE6 only*/
-moz-box-shadow:01px0#111,02px0#666;
-webkit-box-shadow:01px0#111,02px0#666;
box-shadow:01px0#111,02px0#666; } #menu ul li:last-child {
-moz-box-shadow:none;
-webkit-box-shadow:none;
box-shadow:none; } #menu ul a { padding:10px; width:130px;
_height:10px;/*IE6 only*/ display:block; white-space:nowrap; float:none; text-transform:none; } #menu ul a:hover { background-color:#0186ba; background-image: -moz-linear-gradient(#04acec,#0186ba); background-image: -webkit-gradient(linear,lefttop,leftbottom, from(#04acec), to(#0186ba)); background-image: -webkit-linear-gradient(#04acec,#0186ba); background-image: -o-linear-gradient(#04acec,#0186ba); background-image: -ms-linear-gradient(#04acec,#0186ba); background-image: linear-gradient(#04acec,#0186ba); }
Стили для первого и последнего элемента меню.
#menu ul li:first-child > a {
-moz-border-radius:3px3px00;
-webkit-border-radius:3px3px00;
border-radius:3px3px00; } #menu ul li:first-child > a:after { content:''; position:absolute; left:40px; top:-6px; border-left:6pxsolidtransparent; border-right:6pxsolidtransparent; border-bottom:6pxsolid#444; } #menu ul ul li:first-child a:after { left:-6px; top:50%; margin-top:-6px; border-left:0; border-bottom:6pxsolidtransparent; border-top:6pxsolidtransparent; border-right:6pxsolid#3b3b3b; } #menu ul li:first-child a:hover:after { border-bottom-color:#04acec; }
#menu ul ul li:first-child a:hover:after { border-right-color:#0299d3; border-bottom-color:transparent; } #menu ul li:last-child > a {
-moz-border-radius:003px3px;
-webkit-border-radius:003px3px;
border-radius:003px3px; }
jQuery
Данное меню работает во всех популярных современных браузерах, но если вам нужно добавить поддержку также IE6, то без использования JavaScript не обойтись.