Главная » 2013 Март 22 » CSS3 анимированное выпадающее меню
12:48 CSS3 анимированное выпадающее меню |
CSS3 анимированное
выпадающее меню В этой статье вы
увидите, как можно построить удивительное CSS3 анимированное меню с некоторыми из этих интересных функций.
Вот что мы будем создавать: HTML
HTML структура создана просто и минимально. Вот отрывок: <ul id="menu"> <li><a
href="#">Home</a></li> <li> <a
href="#">Categories</a> <ul> <li><a
href="#">CSS</a></li> <li><a
href="#">Graphic design</a></li> <li><a
href="#">Development tools</a></li> <li><a
href="#">Web design</a></li> </ul> </li> <li><a
href="#">Work</a></li> <li><a href="#">About</a></li> <li><a
href="#">Contact</a></li> </ul> CSS Я пересмотрел и усовершенствовал стили, чтобы создать эту
уникальную CSS3 выпадающего меню. Мини сброс Сброс по умолчанию ul стилей. #menu,
#menu ul { margin: 0; padding: 0; list-style: none; } Главный уровень Меню # основная часть для этого меню. CSS3 вещи, как
градиенты , тени и закруглённые которые помогают нам создавать то что вы видите
ниже: #menu { width: 960px; margin: 60px auto; border: 1px solid #222; background-color: #111; background-image:
linear-gradient(#444, #111); border-radius: 6px; box-shadow: 0 1px 1px #777; }
Clear
floats Вот Nicolas Gallagher "для скрытия я использую в
последнее время этот: #menu:before, #menu:after
{ content: ""; display: table; }
#menu:after
{ clear: both; } #menu { zoom:1; } Список элементов Обратите внимание на меню # li: при наведении курсора>
селектора . Это, пожалуй, самый важный CSS трюк для этого выпадающего меню. Итак, вот как это работает: Выберите "" элемент,
который является дочерним "li", "li" элемент должен быть
вкладкой "# меню". Узнайте больше здесь .
#menu li { float: left; border-right: 1px solid #222; box-shadow: 1px 0 0 #444; position: relative; }
#menu a { float: left; padding: 12px 30px; color: #999; text-transform: uppercase; font: bold 12px Arial,
Helvetica; text-decoration: none; text-shadow: 0 1px 0 #000; }
#menu
li:hover > a { color: #fafafa; }
*html #menu
li a:hover { /* IE6 only */ color: #fafafa; } Подменю В CSS3 переходах мы можем анимировать изменения в CSS
свойствах, такие как margin или непрозрачность . Это очень здорово, и я
использовал это для анимации CSS3 подменю. Результат отличный:
#menu ul { margin: 20px 0 0 0; _margin: 0; /*IE6 only*/ opacity: 0; visibility: hidden; position: absolute; top: 38px; left: 0; z-index: 1; background: #444; background:
linear-gradient(#444, #111); box-shadow: 0 -1px 0
rgba(255,255,255,.3); border-radius: 3px; transition: all .2s
ease-in-out; }
#menu
li:hover > ul { opacity: 1; visibility: visible; margin: 0; }
#menu ul ul
{ top: 0; left: 150px; margin: 0 0 0 20px; _margin: 0; /*IE6 only*/ box-shadow: -1px 0 0
rgba(255,255,255,.3); }
#menu ul li
{ float: none; display: block; border: 0; _line-height: 0; /*IE6 only*/ box-shadow: 0 1px 0 #111, 0 2px
0 #666; }
#menu ul
li:last-child { 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:
linear-gradient(#04acec, #0186ba); } Первый и последний элементы списка стилей #menu ul
li:first-child > a { border-radius: 3px 3px 0 0; }
#menu ul
li:first-child > a:after { content: ''; position: absolute; left: 40px; top: -6px; border-left: 6px solid
transparent; border-right: 6px solid
transparent; border-bottom: 6px solid #444; }
#menu ul ul
li:first-child a:after { left: -6px; top: 50%; margin-top: -6px; border-left: 0; border-bottom: 6px solid
transparent; border-top: 6px solid
transparent; border-right: 6px solid #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 { border-radius: 0 0 3px 3px; }
THE JQUERY Как уже стоило привыкнуть, IE6 получает некоторое
дополнительное внимание: $(function()
{ if ($.browser.msie &&
$.browser.version.substr(0,1)<7) { $('li').has('ul').mouseover(function(){ $(this).children('ul').css('visibility','visible'); }).mouseout(function(){ $(this).children('ul').css('visibility','hidden'); }) } }); ОБНОВЛЕНИЕ: ПОДДЕРЖКА ДЛЯ МОБИЛЬНЫХ УСТРОЙСТВ НАВИГАЦИИ Это то, что я хотел сделать некоторое время назад и я,
наконец, сделал это. Я просто добавил поддержку для мобильных устройств и
установил навигацию для iPad. Тег просмотра мета Чтобы сохранить все в правильном масштабе, первое, что
следует добавить теги мета просмотра: <meta
name="viewport" content="width=device-width">
Малый HTML обновления Вам нужно обернуть вашу HTML структуру, используя что-то
вроде: <nav id="menu-wrap"> .Это будет использоваться для
мобильной навигации. JQuery дополнения После загрузки страницы, мы добавим # меню запуск элемента,
который делает именно то, что вы думаете: будут вызывать меню для мобильного.
Кроме того, в CSS, вы увидите, что этот элемент отображается с помощью CSS3
Media Queries. Другое дело, здесь Ipad обнаружения устройства. Как вы
можете видеть ниже, мы удалим причудливый эффект перехода и будем
придерживаться переключения дисплей: нет / блока . Таким образом,
функциональность будет сохранена и на iPad. /* Mobile */ $('#menu-wrap').prepend('<div
id="menu-trigger">Menu</div>'); $("#menu-trigger").on("click",
function(){ $("#menu").slideToggle(); });
// iPad var isiPad
= navigator.userAgent.match(/iPad/i) != null; if (isiPad)
$('#menu ul').addClass('no-transition');
Мобильные CSS Мы добавим CSS
правила для переопределения начального стиля: #menu-trigger
{ /* Hide it initially */ display: none; }
@media
screen and (max-width: 600px) {
#menu-wrap { position: relative; }
#menu-wrap * { box-sizing:
border-box; }
#menu-trigger { display: block;
/* Show it now */ height: 40px; line-height:
40px; cursor: pointer; padding: 0 0 0
35px; border: 1px solid
#222; color: #fafafa; font-weight:
bold; background-color:
#111; /* Multiple backgrounds here,
the first is base64 encoded */ background:
url(data:image/png;base64,iVBOR...) no-repeat 10px center,
linear-gradient(#444, #111); border-radius:
6px; box-shadow: 0 1px
1px #777, 0 1px 0 #666 inset; }
#menu { margin: 0;
padding: 10px; position:
absolute; top: 40px; width: 100%; z-index: 1; display: none; box-shadow: none; }
#menu:after { content: ''; position:
absolute; left: 25px; top: -8px; border-left: 8px
solid transparent; border-right: 8px
solid transparent; border-bottom:
8px solid #444; }
#menu ul { position: static; visibility:
visible; opacity: 1; margin: 0; background: none; box-shadow: none; }
#menu ul ul { margin: 0 0 0
20px !important; box-shadow: none; }
#menu li { position: static; display: block; float: none; border: 0; margin: 5px; box-shadow: none; }
#menu ul li{ margin-left:
20px; box-shadow: none; }
#menu a{ display: block; float: none; padding: 0; color: #999; }
#menu a:hover{ color: #fafafa; }
#menu ul a{ padding: 0; width: auto; }
#menu ul a:hover{ background: none; }
#menu ul li:first-child a:after, #menu ul ul li:first-child
a:after { border: 0; }
}
@media
screen and (min-width: 600px) { #menu { display: block
!important; } }
/* iPad */ .no-transition
{ transition: none; opacity: 1; visibility: visible; display: none; }
#menu
li:hover > .no-transition { display: block; } Надеюсь, вам понравилась эта статья и методы, которые я
использовал. Пожалуйста, поделитесь своими замечаниями и вопросами ниже! |
|
Всего комментариев: 0 | |