Полезное в сети

Всегда в теме

Статистика


Яндекс.Метрика


Онлайн всего: 1
Гостей: 1
Пользователей: 0

Рекомендуем



Главная » 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;

}

 

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

Источник урока

Категория: CSS//HTML//JS | Просмотров: 6884 | Добавил: Wrecker | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Поиск

Вход

Гость
  • Вход
  • Регистрация
  • Читаемое

    Категории

    Заходи не жди