Повноекранна висувається навігація на CSS та jQuery

17

Від автора: Повноекранне меню, яке замінює вміст сторінки, виштовхуючи його за межі екрану.

Нещодавно ми побачили гарний редизайн сайту Hello Monday. Нашу увагу привернула повноекранна навігація: вона повністю замінює поточний контент, виштовхуючи його за межі видимості. Це і надихнуло нас на створення нашого незвичайного демо-приклад!

Повноекранна висувається навігація на CSS та jQueryПовноекранна висувається навігація на CSS та jQuery

Ось швидкий начерк кінцевого результату:

Повноекранна висувається навігація на CSS та jQuery

Створення структури

HTML структура складається з трьох основних елементів: елемент – містить видимий контент, елемент div.cd-nav – обгортка для навігації і кнопка меню з класом .cd-nav-trigger.

Елемент з класом .cd-nav складається з двох елементів div.cd-half-block. У першому міститься навігація (.cd-primary-nav), а в другому – контактна інформація (.cd-contact-info).

Navigation

  • The team
  • email

Елемент з класом .cd-nav-trigger містить елемент span.cd-nav-icon, який використовується для створення іконки-гамбургера (сам елемент є центральною лінією, а його псевдо-елементи ::after ::before використовуються для створення верхньої і нижньої ліній), а також елемент svg, який використовується для створення кола, показує процес завантаження.

Menu

Додавання стилів

Коли користувач клікає по елементу .cd-nav-trigger, до елементу body додається клас .navigation-is-open: даний клас відповідає за перемикання іконки-гамбургера і появу меню.

Що стосується іконки-гамбургера, то її анімація може бути розділена на три частини:

Трансформація іконки-гамбургера в стрілку: псевдо-елементи .cd-nav-icon::after та .cd-nav-icon::before повертаються на 45/-45deg (як значення властивості transform-origin вказується правий край елемента) і їх ширина зменшується на 50%;

Обертання всього елемента з класом .cd-nav-icon (180deg);

Створення ефекту кола завантаження: значення для stroke-dashoffset у кола завантаження ставиться рівним нулю (спочатку, елемент кола має наступні властивості: stroke-dasharray=»157 157″ і stroke-dashoffset=»157″, де значення 157 є довжиною окружності).

Для досягнення плавної анімації використовувалися переходи CSS3. Ось невелика презентація всього процесу:

Повноекранна висувається навігація на CSS та jQuery

.cd-nav-trigger {
transition: transform 0.5 s;
}
.navigation-is-open .cd-nav-trigger {
/* поворот перемикача, коли навігація стає видимою */
transform: rotate(180deg);
}
.cd-nav-trigger .cd-nav-icon::before,
.cd-nav-trigger .cd-nav-icon:after {
/* верхня і нижня лінії іконки меню */
width: 100%;
height: 100%;
transition: transform 0.5 s, width 0.5 s, top 0.3 s;
}
.cd-nav-trigger .cd-nav-icon::before {
transform-origin: top right;
transform: translateY(-6px);
}
.cd-nav-trigger .cd-nav-icon::after {
transform-origin: bottom right;
transform: translateY(6px);
}
.navigation-is-open .cd-nav-trigger .cd-nav-icon::after,
.navigation-is-open .cd-nav-trigger .cd-nav-icon::before {
/* анімація стрілки —> перетворення з гамбургера в стрілку */
width: 50%;
transition: transform 0.5 s, width 0.5 s;
}
.navigation-is-open .cd-nav-trigger .cd-nav-icon::before {
transform: rotate(45deg);
}
.navigation-is-open .cd-nav-trigger .cd-nav-icon::after {
transform: rotate(-45deg);
}
.cd-nav-trigger circle {
/* анімація межі круга */
transition: stroke-dashoffset 0.4 s 0s;
}
.navigation-is-open .cd-nav-trigger circle {
stroke-dashoffset: 0;
transition: stroke-dashoffset 0.4 s 0.3 s;
}

Для досягнення ефекту появи меню елемент і елемент з класом .cd-navigation-wrapper зміщуються (вздовж осі X) на 100%. Для створення більш реалістичного ефекту виштовхування, ми використовували функцію cubic bezier в якості тимчасової функції для переходу. Дана крива дозволяє вам встановити 4 параметри (опорні точки кривої), щоб створити оптимальну криву прискорення властивості, яке змінюється під час переходу.

Є інструменти (зразок http://cubic-bezier.com), які дозволяють вам настроїти криву, як вам потрібно, і подивитися попередній результат перед безпосереднім використанням в коді (ви також легко можете експортувати кінцеві параметри кривої).

Ось невелика презентація різниці між налаштованої тимчасової функцією cubic-bezier і звичайною лінійною функцією:

Повноекранна висувається навігація на CSS та jQuery

Обробка подій

Ми використовували jQuery, щоб слухати подія кліка по елементу з класом .cd-nav-trigger і відповідно додавати/видаляти клас .navigation-is-open.