Простой гайд по View Transitions¶
Представьте, что ваш сайт мог бы плавно анимировать переходы между страницами — скажем, с index.html на about.html — без резкой перезагрузки. Это стало возможным благодаря поддержке View Transition API в современных браузерах.
View Transitions раньше были доступны только для одностраничных приложений (SPA). В этой статье мы рассмотрим, как view transitions обеспечивают плавную анимированную навигацию в многостраничных приложениях (MPA).
Краткое напоминание о MPA и SPA¶
Многостраничные приложения (MPA) и одностраничные приложения (SPA) — это два распространённых подхода к веб-разработке, каждый со своими преимуществами и недостатками.
- MPA загружает новую страницу с сервера при каждой навигации, что приводит к полной перезагрузке страницы. MPA проще создавать для крупных приложений с множеством отдельных страниц.
- SPA, напротив, загружает одну HTML-страницу и динамически обновляет её содержимое через JavaScript, обеспечивая более быстрое взаимодействие и плавный пользовательский опыт, но часто требует более сложной клиентской маршрутизации и управления состоянием.
Долгое время плавные анимированные переходы были возможны только в SPA. С появлением View Transition API — и теперь CSS-правила @view-transition — MPA тоже могут достичь подобных эффектов. CSS view transitions разработаны с учётом прогрессивного улучшения. Если браузер их не поддерживает, сайт всё равно будет работать, поскольку CSS рассматривается как подсказка и применяется только при наличии поддержки.
Поддержка view transitions в браузерах¶
Прежде чем погрузиться в детали использования этой функции, стоит отметить, где view transitions поддерживаются сегодня. Спецификация CSS View Transitions имеет два уровня:
- Уровень 1 позволяет осуществлять переходы внутри одной страницы с помощью View Transition API. Это уже поддерживается в Chrome, Edge и Safari. Поддержка Firefox доступна в версии 144 (в настоящее время в бета-версии).
- Уровень 2 позволяет осуществлять переходы между несколькими страницами через правило
@view-transition. В настоящее время поддерживается в Chrome 126+, Edge 126+ и Safari 18.2+. На момент написания этой статьи Уровень 2 всё ещё находится в разработке для Firefox, но поддержка ожидается в будущем.
В браузерах без поддержки view transitions сайты продолжат работать в обычном режиме со стандартной навигацией между страницами, поскольку переходы рассматриваются как прогрессивное улучшение и не сломают ваш сайт.
Создаём первый view transition¶
Давайте углубимся и посмотрим на view transitions в действии.
В качестве простейшего примера вы можете включить переход, добавив всего несколько строк CSS в ваш код:
И это всё! Базовая версия — это всего несколько строк CSS, что невероятно, если вы спросите меня.
Чтобы увидеть эффект этой строки кода, давайте создадим две демо-страницы. Вы также можете попробовать добавить этот код в любое существующее многостраничное приложение.
Первая страница, index.html, содержит только заголовок, несколько абзацев и ссылку для перехода на вторую страницу:
Подготовим вторую страницу, hobbies.html. Это тоже простая страница с заголовком, двумя короткими абзацами и ссылкой обратно на первую страницу:
Наконец, добавьте следующий рецепт в ваш файл style.css:
И это всё, что нужно для создания view transition. Всего с одной строкой CSS вы увидите плавный переход между двумя страницами. Раньше такой плавный переход был возможен только в SPA с использованием JavaScript. С CSS-правилом @view-transition браузер теперь может обрабатывать переходы в многостраничных приложениях нативно, без необходимости JavaScript.
Выходим за рамки стандартного перехода¶
Теперь давайте пойдём дальше и настроим view transition. Здесь мы создадим эффект появления и исчезновения со скольжением — простую анимацию, чтобы понять, как view transitions работают под капотом.
Добавим две разные таблицы стилей к нашим двум HTML-страницам. Добавьте это в index.html:
…и это в hobbies.html:
Пришло время познакомиться с CSS-селекторами (псевдоэлементами), которые управляют view transitions:
Давайте разберёмся, как работают эти псевдоэлементы: ::view-transition-old и ::view-transition-new ссылаются на старую и новую страницы соответственно, позволяя нам стилизовать переход между ними. Когда мы переходим с index.html на hobbies.html, старая страница — это та, с которой мы уходим (index.html), а новая страница — та, на которую мы переходим (hobbies.html).
Добавим анимацию скольжения, чтобы hobbies.html появлялась с плавным эффектом. Назовём эту анимацию slide-from-right. Добавьте следующий код в hobbies.css:
!!note ""
1 | |
Вот как выглядит эффект появления со скольжением:
Теперь давайте завершим этот эффект, добавив ещё одну анимацию скольжения, чтобы страница hobbies.html уходила тем же способом, каким появилась. В этом случае мы будем переходить с hobbies.html на index.html; таким образом, hobbies.html теперь наша старая страница, а index.html — новая.
Назовём эту анимацию slide-to-right. Добавьте этот код в index.css:
Обратите внимание, что я анимировал только hobbies.html в обоих направлениях и не добавлял никакой анимации к index.html. Вы можете анимировать обе страницы, если хотите.
Вот как будет выглядеть переход в итоге, включая эффекты появления и исчезновения со скольжением для hobbies.html:
Посмотрите демо-страницу, чтобы увидеть результат в вашем браузере. И если вы хотите расширить это демо, не стесняйтесь использовать код из репозитория mdn/dom-examples и добавить анимацию для страницы index.html (ищите animation: none в файле index.css).
Источник: https://developer.mozilla.org/en-US/blog/view-transitions-beginner-guide/