Эластичная навигация для сайта с помощью CSS3
- Stats: 1422 1
- Author: RUDEBOX
- Category: Технології
- Comments: Комментариев нет
Эластичность, сейчас, весьма популярная. Разнообразие девайсов заставляет разработчиков придумывать новые приемы для реализации навигации для разных объектов. В данном уроке мы рассмотрим процесс построения и стилизации замечательной эластической навигации для сайта. В демонстрации мы сделали несколько версий, для отображения в разных условиях, первая навигация это обычная кнопка вызывающая эффект анимации и меню, вторая версия будет реализованная для загрузки мультимедийных файлов.
Третье меню послужит нам для отображения действий на элементах. Обратите внимание, что мы создаем только кликабельную стилизацию. Итак, давайте приступим к пошаговому созданию навигации.
Шаг 1. HTML
HTML структура получилась довольно простой, класс nav.cd-stretchy-nav используется ,чтобы обернуть неупорядоченный список (содержащий элементы навигации) и a.cd-nav-trigger (значок меню). Дополнительный класс span.stretchy-nav-bg используется для создания эластичного фона.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<nav class="cd-stretchy-nav"> <a class="cd-nav-trigger" href="#0"> Меню <span aria-hidden="true"></span> </a></p> <ul> <li><a href="#0" class="active"><span>Домой</span></a></li> <li><a href="#0"><span>Портфолио</span></a></li> <!-- остальное содержание здесь --> </ul> <span aria-hidden="true" class="stretchy-nav-bg"></span> </nav> |
С разметкой не должно возникнуть проблем, если вы немного понимаете в HTML-разметке, так как в ней все просто и понятно, давайте перейдем к следующему шагу.
Шаг 2. CSS
Мы создали класс .cd-stretchy-nav, чтобы определить основной стиль для эластичной навигации. Затем мы использовали два дополнительных класса, .add-content и .edit-content, для настройки панелей инструментов и редактирования контента.
Основная идея анимации состоит в том, что мы присваиваем к классу span.stretchy-nav-bg фиксированную высоту и ширину; когда навигация открыта то мы используем класс .nav-is-visible, чтобы создать анимацию для высоты (или ширины, в случае со второй демонстрацией).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
.cd-stretchy-nav { position: fixed; z-index: 2; top: 40px; right: 5%; } .cd-stretchy-nav .stretchy-nav-bg { position: absolute; z-index: 1; top: 0; right: 0; width: 60px; height: 60px; border-radius: 30px; background: #9acd91; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); transition: height 0.2s, box-shadow 0.2s; } .cd-stretchy-nav.nav-is-visible .stretchy-nav-bg { height: 100%; box-shadow: 0 6px 30px rgba(0, 0, 0, 0.2); }</span> |
Для пунктов навигации, мы определили две различные анимации CSS: scaleIn - для иконок пункта , и slideIn - для элементов содержания; свойство задержки используется для анимации разных дочерних элементов в разные моменты времени.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
.cd-stretchy-nav ul { position: relative; z-index: 2; visibility: hidden; transition: visibility 0.3s; } .cd-stretchy-nav ul a { position: relative; } .cd-stretchy-nav ul a::after { /* навигация иконок */ content: ''; position: absolute; height: 16px; width: 16px; transform: translateY(-50%) scale(0); opacity: .6; background: url(../img/cd-sprite-1.svg) no-repeat 0 0; } .cd-stretchy-nav ul span { /* подпись для иконок */ display: block; opacity: 0; transform: translateX(-25px); }</p> .cd-stretchy-nav.nav-is-visible ul { visibility: visible; } .cd-stretchy-nav.nav-is-visible ul a::after { transform: translateY(-50%) scale(1); animation: scaleIn 0.15s backwards; } .cd-stretchy-nav.nav-is-visible ul span { opacity: 1; transform: translateX(0); animation: slideIn 0.15s backwards; } .cd-stretchy-nav.nav-is-visible ul li:first-of-type a::after, .cd-stretchy-nav.nav-is-visible ul li:first-of-type span { animation-delay: 0.05s; } /*анимация дочернего содержания здесь ...*/ @keyframes scaleIn { from { transform: translateY(-50%) scale(0); } to { transform: translateY(-50%) scale(1); } } @keyframes slideIn { from { opacity: 0; transform: translateX(-25px); } to { opacity: 1; transform: translateX(0); } } |
Для панелей инструментов мы установили следующие правила: когда навигация открыта мы зададим отображение значков (используя scaleIn. анимацию), чтобы отображались метки при наведении курсора мы будем использовать CSS Transitions. Для панели инструментов (третья демонстрация), у нас получились следующие правила:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
.cd-stretchy-nav.edit-content ul span { position: absolute; top: 0; right: 35px; height: 30px; line-height: 30px; opacity: 0; visibility: hidden; background-color: rgba(0, 0, 0, 0.55); transition: opacity 0.2s, visibility 0.2s; } .cd-stretchy-nav.edit-content ul span::after { /* треугольники для подсказки */ content: ''; position: absolute; left: 100%; top: 50%; bottom: auto; transform: translateY(-50%); height: 0; width: 0; border: 4px solid transparent; border-left-color: rgba(0, 0, 0, 0.55); }</p> .no-touch .cd-stretchy-nav.edit-content.nav-is-visible ul a:hover span { opacity: 1; visibility: visible; } |
Мы использовали JQuery для отслеживания события, когда вы нажимаете на a.cd-nav-trigger, и когда добавляете или удаляете событие с классом .nav-is-visible из nav.cd-stretchy-nav.
Отправить ответ