Анимированное 3D меню для сайта на CSS3 Анимированное 3D меню для сайта на CSS3

 

Несомненно меню это важнейший элемент на сайте, мы об этом уже не раз писали. Но меню зачастую веб-мастера создают достаточно простую навигацию, это не всегда правильный подход к организации материала на сайте. Если сайт сделан в минималистическом стиле, то ему не нужно объемное меню, или футуристический подход. Но для всех остальных сайтах можно по фантазировать, и создать нечто новое и уникальное. В данном уроке мы рассмотрим как создать объемное меню для сайта исключительно на CSS3.

 

ДЕМО
ИСХОДНИКИ

 

Основная идея состоит в том, что выпадающие подпункты меню организованы в список-таблицу, который создает эффект выпадающей вывески. При этом создается иллюзия объемности, и так, приступим.

Шаг 1. HTML

Для начала мы рассмотрим разметку, все достаточно просто, мы создадим список, с принадлежащими ему подпунктами.

<div id="container">
<ul id="menu">
 <li><a href="#">О мне</a>
 <ul>
 <li><a href="#">Контакты</a></li>
 <li><a href="#">Материалы</a></li>
 <li><a href="#">Презентации</a></li>
 </ul>
 </li>
 <li><a href="#">Портфолио</a>
 <ul>
 <li><a href="#">Интересные работы</a></li>
 <li><a href="#">Удачные работы фотографа</a></li>
 <li><a href="#">Заказы</a></li>
 <li><a href="#">Студия</a></li>
 <li><a href="#">Увидеть мои работы</a></li>
 <li><a href="#">Заказать фотосессию</a></li>
 </ul>
 </li>
 <li><a href="#">Клиентам</a>
 <ul>
 <li><a href="#">Заказать студию</a></li>
 <li><a href="#">Аренда аппаратуры</a></li>
 <li><a href="#">Система скидок</a></li>
 </ul>
 </li>
 <li><a href="#">Контакты</a>
 <ul>
 <li><a href="#">Где мы находимся</a></li>
 <li><a href="#">Наш офис</a></li>
 <li><a href="#">Как нас найти</a></li>
 </ul>
 </li>
 <li><a href="#">Поддержка</a></li>
</ul>
</div>

Новые пункты легко добавить, не будем останавливаться детально.

Шаг 2. CSS

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

#menu {
 position: relative;
 float: left;
 width: 100%;
 padding: 0 20px;
 border-radius: 3px;
 box-shadow: inset 0 1px 1px rgba(255,255,255,.5), inset 0 -1px 0 rgba(0,0,0,.15), 0 1px 3px rgba(0,0,0,.15);
 background: #ccc;
 }

#menu, #menu ul {
 list-style: none;
 }

#menu > li {
 float: left;
 position: relative;
 border-right: 1px solid rgba(0,0,0,.1);
 box-shadow: 1px 0 0 rgba(255,255,255,.25);
 perspective: 1000px;

}

#menu > li:first-child {
 border-left: 1px solid rgba(255,255,255,.25);
 box-shadow: -1px 0 0 rgba(0,0,0,.1), 1px 0 0 rgba(255,255,255,.25);
 }

#menu a {
 display: block;
 position: relative;
 z-index: 10;
 padding: 13px 20px 13px 20px;
 text-decoration: none;
 color: rgba(75,75,75,1);
 line-height: 1;
 font-weight: 600;
 font-size: 12px;
 letter-spacing: -.05em;
 background: transparent;
 text-shadow: 0 1px 1px rgba(255,255,255,.9);
 transition: all .25s ease-in-out;

}

#menu > li:hover > a {
 background: #333;
 color: rgba(0,223,252,1);
 text-shadow: none;
 }

#menu li ul {
 position: absolute;
 left: 0;
 z-index: 1;
 width: 200px;
 padding: 0;
 opacity: 0;
 visibility: hidden;
 border-bottom-left-radius: 4px;
 border-bottom-right-radius: 4px;
 background: transparent;
 overflow: hidden;
 transform-origin: 50% 0%;
 }

#menu li:hover ul {

padding: 15px 0;
 background: #333;
 opacity: 1;
 visibility: visible;
 box-shadow: 1px 1px 7px rgba(0,0,0,.5);
 animation-name: swingdown;
 animation-duration: 1s;
 animation-timing-function: ease;

}

@keyframes swingdown {
 0% {
 opacity: .99999;
 transform: rotateX(90deg);
 }

30% {
 transform: rotateX(-20deg) rotateY(5deg);
 animation-timing-function: ease-in-out;
 }

65% {
 transform: rotateX(20deg) rotateY(-3deg);
 animation-timing-function: ease-in-out;
 }

100% {
 transform: rotateX(0);
 animation-timing-function: ease-in-out;
 }
 }

#menu li li a {
 padding-left: 15px;
 font-weight: 400;
 color: #ddd;
 text-shadow: none;
 border-top: dotted 1px transparent;
 border-bottom: dotted 1px transparent;
 transition: all .15s linear;
 }

#menu li li a:hover {
 color: rgba(0,223,252,1);
 border-top: dotted 1px rgba(255,255,255,.15);
 border-bottom: dotted 1px rgba(255,255,255,.15);
 background: rgba(0,223,252,.02);
 }

 

Также мы используем градиентную заливку, которая позволит создать плавные переходы оттенков и теней.

Я использовал данное меню на сайте усадьбы «Сказка»!

Усадьба «Сказка»

Вот и все. Готово!


Top

🔖 Выбор по тегам ×

💌 Написать сообщение ×

Все поля обязательны для заполнения!