Фиксированная навигация
Фиксированная навигация, которой пользователь сможет воспользоваться в любое время. Замена навигационной кнопке “Наверх”.
Удобство пребывания на крупных сайтах зависит от многих вещей, в том числе и от возможности быстро перейти в тот или иной раздел. Кнопка “наверх” какое-то время была решением. Вопрос: зачем пользователю отправлять к навигации на самый верх страницы, если он сможет до неё достучаться прямо из того места где находится?
Графическое представление идеи:
Структура
Навигацию помещаем в блок #cd-nav
. Внутри <span>
помещаем ссылку .cd-nav-trigger
, которую задействуем для раскрытия навигации.
<header><!-- ... --></header> <div id="cd-nav"> <a href="#0" class="cd-nav-trigger">Menu<span></span></a> <nav id="cd-main-nav"> <ul> <li><a href="#0">Homepage</a></li> <li><a href="#0">Services</a></li> <li><a href="#0">Portfolio</a></li> <li><a href="#0">Pricing</a></li> <li><a href="#0">Contact</a></li> </ul> </nav> </div> <main><!-- content here --></main>
Стили
Для мобильных устройств: зададим position: fixed
ненумерованному списку внутри блока навигации #cd-nav
. Данный элемент должен размещаться в нижнем правом углу страницы. При прикосновении или клике по .cd-nav-trigger
прикрепляем класс .is-visible
, который сменит значение свойства CSS3 Scale с 0 на 1 – а так же применит трансформацию.
#cd-nav ul { /* mobile first */ position: fixed; width: 90%; max-width: 400px; right: 5%; bottom: 20px; visibility: hidden; overflow: hidden; z-index: 1; transform: scale(0); transform-origin: 100% 100%; transition: transform 0.3s, visibility 0s 0.3s; } #cd-nav ul.is-visible { visibility: visible; transform: scale(1); transition: transform 0.3s, visibility 0s 0s; } .cd-nav-trigger { position: fixed; bottom: 20px; right: 5%; width: 44px; height: 44px; /* image replacement */ overflow: hidden; text-indent: 100%; white-space: nowrap; z-index: 2; }
На разрешений экрана свыше 1170px, сменим позицию навигации с фиксированного типа на абсолютный и поместим выше. При прокрутке страницы, воспользуемся jQuery для добавления класа .is-fixed
элементу #cd-nav
, сместив навигационный блок вправо – такой же эффект и для тач-устройств.
@media only screen and (min-width: 1170px) { #cd-nav ul { /* the navigation moves to the top */ position: absolute; width: auto; max-width: none; bottom: auto; top: 36px; visibility: visible; transform: scale(1); transition: all 0s; } #cd-nav.is-fixed ul { position: fixed; width: 90%; max-width: 400px; bottom: 20px; top: auto; visibility: hidden; transform: scale(0); } }
Обработка событий
Определяем переменную для добавления/удаления класса .is-fixed
элементу #cd-nav
.
var offset = 300;
Функция checkMenu()
будет отвечать за поведение основной навигации при прокрутке страницы:
var navigationContainer = $('#cd-nav'), mainNavigation = navigationContainer.find('#cd-main-nav ul'); $(window).scroll(function(){ checkMenu(); }); function checkMenu() { if( $(window).scrollTop() > offset && !navigationContainer.hasClass('is-fixed')) { //добавляем класс .is-fixed элементу #cd-nav //ждём окончания анимации //добавляем класс .has-transitions основной навигации } else if ($(window).scrollTop() <= offset) { //проверяем раскрыто ли меню при прокрутке вверх (если в браузере доступна анимация) if( mainNavigation.hasClass('is-visible') && !$('html').hasClass('no-csstransitions') ) { //закрываем навигацию //ждём окончания навигации //убираем класс .is-fixed с элемента #cd-nav and } //проверяем раскрыто ли меню при прокрутке вверх (если в браузере не доступна анимация) else if( mainNavigation.hasClass('is-visible') && $('html').hasClass('no-csstransitions') ) { } //прокрутка вверх, меню закрыто else { //убираем класс .is-fixed с формы #cd-nav и класс .has-transitions с основной навигации } } }
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: https://codyhouse.co/gem/smart-fixed-navigation/
Перевел: Станислав Протасевич
Урок создан: 28 Февраля 2016
Просмотров: 9547
Правила перепечатки
5 последних уроков рубрики "CSS"
-
Забавные эффекты для букв
Небольшой эффект с интерактивной анимацией букв.
-
Реализация забавных подсказок
Небольшой концепт забавных подсказок, которые реализованы на SVG и anime.js. Помимо особого стиля в примере реализована анимация и трансформация графических объектов.
-
Анимированные буквы
Эксперимент: анимированные SVG буквы на базе библиотеки anime.js.
-
Солнцезащитные очки от первого лица
Прикольный эксперимент веб страницы отображение которой осуществляется “от первого лица” через солнцезащитные очки.
-
Раскрывающаяся навигация
Экспериментальный скрипт раскрывающейся навигации.