Создание оригинального выпадающего меню
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
Перевод — Дежурка
Смотрите также:
Комментарии
Похожие статьи
- Использование множественных фоновых изображений CSS: основы
- Создание элементов, расположенных ровно по центру, с высотой и шириной, заданными в процентах
- Использование плавной прокрутки и ее недостатки
- Использование тега span для разделения слов в ссылках в CSS
- Использование порядка расположения множественных фоновых изображений
13 апреля 2016 в 17:20
Я это меню видел год — два назад
на укр сайте рудебокс а значит у америкосов оно появилось и того раньше