Анимированная навигация

Создание плавной и интерактивной навигации — одна из ключевых задач современного фронтенда. С помощью фреймворка Vue.js такие компоненты реализуются элегантно и с минимальным количеством кода. Реактивность Vue позволяет легко управлять состоянием интерфейса (например, открытием/закрытием меню), а система привязки классов и стилей делает анимации простыми и декларативными.

Компонент ниже наглядно демонстрирует, как Vue упрощает разработку сложного интерактивного поведения.

Внимание! Представленный код — это готовый компонент, но для его работы на странице должен быть установлен и подключен фреймворк Vue. Если вы начинающий разработчик, просто добавьте строку
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
в раздел <head> вашего HTML, и всё заработает.

Подробный разбор кода компонента

Давайте детально разберем, как устроен этот компонент.

HTML-структура (Vue Template)

  1. <nav class="app__nav">: Основной контейнер навигации. Класс shrinked управляет уменьшением отступа gap между меню и кнопкой-бургером при сворачивании.
  2. <div class="app__menu">: Контейнер для пунктов меню. Ключевая логика анимации скрытия/раскрытия реализована здесь через CSS Grid. Класс expanded переключает grid-template-columns с 0fr на 1fr, создавая плавное анимируемое схлопывание и расширение.
  3. <a class="app__menu-item">: Ссылки-пункты меню. Генерируются директивой v-for из массива items. Класс hide плавно изменяет их прозрачность opacity при сворачивании.
  4. <div class="app__burger">: Кнопка-бургер для переключения состояния. Обработчик @click инвертирует булево значение реактивной переменной isExpanded — сердце логики компонента.

CSS-стили

  1. Адаптивность: Для анимации переключается свойство grid-template-rows.
  2. Анимации: Все переходы управляются CSS-переменной --tr (transition), задающей длительность и функцию плавности ease-in-out. Это обеспечивает согласованность анимаций.
  3. Бургер-иконка: Превращение крестика в две линии (и обратно) реализовано через трансформации transform: rotate двух псевдоэлементов .app__burger-line.up и .down. Класс .rotate меняет их положение и вращение.

Логика на Vue.js (Composition API)

  1. const isExpanded = ref(true): Реактивная переменная, хранящая состояние меню (открыто/закрыто). Является «единым источником истины» для всех анимаций.
  2. const items = ref(['Дом','Портфолио','О нас','Контакты']): Реактивный массив данных для пунктов меню. Для добавления или переименования пунктов достаточно изменить только этот массив.
  3. Связь шаблона и логики: Состояние isExpanded через директиву :class динамически добавляет или убирает CSS-классы (expanded, shrinked, hide, rotate), запуская соответствующие анимации.

Этот компонент — лишь небольшая демонстрация того, как Vue.js помогает создавать живые, отзывчивые интерфейсы. Подобные решения делают пользовательский опыт значительно приятнее и современнее.

Готовы оживить ваш сайт?

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

Давайте создадим что-то выдающееся вместе!