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

Дизайн-журнал №1. Актуальная информация для дизайнеров, веб дизайнеров, программистов и разработчиков сайтов.

Создание оригинального выпадающего меню

13 апреля 2016 | Опубликовано в css | 2 Комментариев »

В этом уроке мы будем создавать крутое выпадающее меню в геометрическом стиле. Оно может украсить ваш новый проект и станет достойным пополнением коллекции ваших техник. Конечно сделаем мы это при помощи CSS.

 

 


Демонстрация работы

Код HTML 

Код ниже не нуждается в специальных пояснениях, так что просмотрите его и не будем на нем особо останавливаться. Класс HTML submenu (подменю) применяется, чтобы не использовать .menu ul, для более короткого и простого обращения в коде CSS.

<ul class="menu cf">
        <li><a href="">Menu item</a></li>
        <li>
                <a href="">Menu item</a>
                <ul class="submenu">
                        <li><a href="">Submenu item</a></li>
                        <li><a href="">Submenu item</a></li>
                        <li><a href="">Submenu item</a></li>
                        <li><a href="">Submenu item</a></li>
                </ul>
        </li>
        <li><a href="">Menu item</a></li>
        <li><a href="">Menu item</a></li>
        <li><a href="">Menu item</a></li>
</ul>

Класс cf (clear floats) очищает всплытия.

Код CSS 

Для очистки всплытий используем код ниже:

.cf:before,
.cf:after {
    content: " ";
    display: table;
}

.cf:after {
    clear: both;
}
.cf {
    *zoom: 1;
}

И отменяем свойства браузеров по умолчанию для следующих классов:

.menu,
    .submenu {
        margin: 0;
        padding: 0;
        list-style: none;
    }

Посмотрите код дальше для остальных стилей, об экспериментальном свойстве width: fit-content можете узнать подробней в указанном уроке.

/* Основной уровень */
.menu {
        margin: 50px auto;
        width: 800px;
        width: fit-content;
}

.menu > li {
        background: #34495e;
        float: left;
        position: relative;
        transform: skewX(25deg);
}

.menu a {
        display: block;
        color: #fff;
        text-transform: uppercase;
        text-decoration: none;
        font-family: Arial, Helvetica;
        font-size: 14px;
}               

.menu li:hover {
        background: #e74c3c;
}               

.menu > li > a {
        transform: skewX(-25deg);
        padding: 1em 2em;
}

/* Выпадающий уровень */
.submenu {
        position: absolute;
        width: 200px;
        left: 50%; margin-left: -100px;
        transform: skewX(-25deg);
        transform-origin: left top;
}

.submenu li {
        background-color: #34495e;
        position: relative;
        overflow: hidden;
}                                               

.submenu > li > a {
        padding: 1em 2em;
}

.submenu > li::after {
        content: '';
        position: absolute;
        top: -125%;
        height: 100%;
        width: 100%;
        box-shadow: 0 0 50px rgba(0, 0, 0, .9);
}               

/* Свойства нечетных подпунктов */
.submenu > li:nth-child(odd){
        transform: skewX(-25deg) translateX(0);
}

.submenu > li:nth-child(odd) > a {
        transform: skewX(25deg);
}

.submenu > li:nth-child(odd)::after {
        right: -50%;
        transform: skewX(-25deg) rotate(3deg);
}                               

/* Свойства четных подпунктов */
.submenu > li:nth-child(even){
        transform: skewX(25deg) translateX(0);
}

.submenu > li:nth-child(even) > a {
        transform: skewX(-25deg);
}

.submenu > li:nth-child(even)::after {
        left: -50%;
        transform: skewX(25deg) rotate(3deg);
}

/* Показ выпадающего меню */
.submenu,
.submenu li {
        opacity: 0;
        visibility: hidden;
}

.submenu li {
        transition: .2s ease-out transform;
}

.menu > li:hover .submenu,
.menu > li:hover .submenu li {
        opacity: 1;
        visibility: visible;
}               

.menu > li:hover .submenu li:nth-child(even){
        transform: skewX(25deg) translateX(15px);
}
.menu > li:hover .submenu li:nth-child(odd){
        transform: skewX(-25deg) translateX(-15px);
}

Об адаптивности 

Не пробуйте менять размер окна, демонстрация этого меню не адаптивная, так как это не было целью этого урока, и не хотелось раздувать код CSS ради этого. Но можете посмотреть пример адаптивного выпадающего меню.

Небольшой недостаток 

Мы попробовали применить свойство backface-visibility: hidden (спрятать заднюю сторону) на трансформирующихся элементах, чтобы не было присутствующего сейчас эффекта мерцания, но мы не совсем довольны результатом. Возможно, этот эффект возникает, так как свойства трансформации применяются к большому количеству элементов.

Заключение 

И это все. Посмотрите демонстрацию работу оригинального выпадающего меню по ссылке выше. Надеемся, Вам понравился этот урок и он Вам пригодится.

Автор урока Catalin Rosu

Перевод — Дежурка

Смотрите также:




Комментарии

  1. Алексей
    Thumb up Thumb down -2

    Я это меню видел год — два назад :-D

    на укр сайте рудебокс а значит у америкосов оно появилось и того раньше