Переходы между страницами выглядят очень, очень круто. Более того, они начинают появлятьсяповсюду. Уверены, что вы, как и мы, не раз встречали в сети такие переходы, от которых у вас возникаетвосхищениеи желание немедленно использовать их на своем сайте или в проекте.
В то же время поначалу бывает непросто разобраться с переходами между страницами. Они могут быть простыми, конечно, но в большинстве случаев, помимо плавного перехода, используется несколько движущихся элементов.
Мы считаем, что лучший способ научиться чему-то новому — это посмотреть код, использовать его самому, а затем дорабатывать. Поэтому мы собрали семь рецептов переходов между представлениями. Мы рассмотрим базовую настройку, продемонстрируем рецепты и дадим вам возможность поэкспериментировать!
Вы вполне можете просто скопировать тот вариант, который вам больше всего нравится, но если вы хотите понять, что такое переходы между представлениями, то мы рекомендуем сначала ознакомиться с кратким введением, прежде чем переходить к рецептам.
Да, и прежде чем мы перейдем к делу, стоит отметить, что на момент написания этой статьи переходы между представлениями действительно являются базовыми и поддерживаются всеми основными браузерами. Но некоторые типы анимации могут поддерживаться или не поддерживаться в конкретном браузере, так что следите за этим и, как всегда, тестируйте.
Настройка
Для каждого перехода между представлениями нам нужно будет предварительно выполнить небольшую настройку. Во-первых, нам нужносогласитьсяна их использование с помощью@view-transition* наобеих страницах— на той, на которой мы находимся, и на той, на которую мы переходим. Если вы используете шаблоны на своем сайте, то этот код можно разместить в шаблоне верхнего колонтитула, чтобы он применялся глобально.
<transition-type>— это единственная часть, которую нельзя скопировать и вставить напрямую. Это заполнитель для дескриптораtypes. Здесь есть свои нюансы, ноtypes— это, по сути, название анимации, которое мы присваиваем конкретному переходу. Таким образом, если мы работаем с несколькими переходами, мы можем явно указать, какие из них активны, чтобы они не конфликтовали друг с другом. Но чтобы узнать больше, прочтите статью по ссылке.
Обратите внимание, что@view-transitionскрыто за медиазапросом prefers-reduced-motion: no-preference. Не всем нужно, чтобы на страницах что-то двигалось, и это можно настроить на уровне операционной системы, поэтому при необходимости мы будем учитывать это.
...где псевдоэлемент:active-view-transtion-type()соответствует переходуtype, который мы определяем в правиле@view-transition. Например, если мы вызываем анимацию с именемbounce, то по правилам мы используем его следующим образом:
Здесь мы используем свойствоclip-path**для создания эффекта «очистки», когда содержимое новой страницы поднимается снизу вверх, заменяя «старое» содержимое.
Процесс прост: для исходящей страницы мы меняем значение по умолчаниюinset()на0 0 0 0(что создает прямоугольник по верхней, правой, нижней и левой границам страницы) и меняем значениеbottomна100%. То есть страница перемещается изtopвbottom.
Входящая страница начинается с обрезкиtopв100%и продолжается до0.
Мы могли бы с такой же легкостью сделать так, чтобы объекты удалялись справа, снизу и слева, просто изменив значения inset. Например, вот так объекты удаляются справа:
@keyframes wipe-out {
from {
clip-path: inset(0 0 0 0);
}
to {
clip-path: inset(0 0 0 100%);
}
}
@keyframes wipe-in {
from {
clip-path: inset(0 100% 0 0);
}
to {
clip-path: inset(0 0 0 0);
}
}
Свайп вправо работает так же, как свайп вверх, за исключением того, что исходящая страница сдвигается от центра вправо. Поэтому второе значение меняется с0на100%. Аналогичным образом загружаемая страница сдвигается с100%влево на0.
То же самое касается стирание сверху вниз:
@keyframes wipe-out {
from {
clip-path: inset(0 0 0 0);
}
to {
clip-path: inset(100% 0 0 0);
}
}
@keyframes wipe-in {
from {
clip-path: inset(0 0 100% 0);
}
to {
clip-path: inset(0 0 0 0);
}
}
Вы поняли, о чем мы!
3. Вращение
Это немного, э-э, странно. Определенно не самая практичная вещь на свете, но она показывает, насколько далеко можно зайти с помощью переходов между представлениями.
Мы используем функцииscale()иrotate()для масштабирования и поворота содержимого страницы. «Старая» страница уменьшается до0и поворачивается по часовой стрелке на180deg. После этого содержимое «новой» страницы увеличивается до1и поворачивается против часовой стрелки на-180deg. Немногоopacityдобавлено для создания иллюзии движения.
Этот переход гораздо менее заметен, чем предыдущий. Он мог бы быть более заметным, если бы контент, на который мы переходим, был более контрастным. Но, как вы увидите в следующем видео, фон «старой» и «новой» страниц совпадает, что обеспечивает более плавный переход.
Круг создан с помощью свойстваclip-path**. Фигура рисуется от центра с помощью функцииcircle(), размер которой варьируется от 0 % (без размера) до 150 % (размер превышает размер содержимого), благодаря чему круг охватывает всю страницу.
Полный фрагмент
@media (prefers-reduced-motion: no-preference) {
@view-transition {
navigation: auto;
types: circular-wipe;
}
}
html:active-view-transition-type(circular-wipe)::view-transition-old(root) {
animation: circle-wipe-out 1.4s ease forwards;
}
html:active-view-transition-type(circular-wipe)::view-transition-new(root) {
animation: circle-wipe-in 1.4s ease forwards;
}
@keyframes circle-wipe-out {
to {
clip-path: circle(0% at 50% 50%);
}
}
@keyframes circle-wipe-in {
from {
clip-path: circle(0% at 50% 50%);
}
to {
clip-path: circle(150% at 50% 50%);
}
}
5. Сдвиг по диагонали
Этот код перемещает «старую» страницу с «новой» страницей из правого нижнего угла экрана в правый верхний угол — или, по сути, в любой другой угол, который мы можем выбрать, изменив значения.
Для нижнего правого угла мы настроили анимацию так, чтобы она сдвигалась на-100%по осям X и Y, отдаляясь от экрана. Затем она возвращается из противоположного угла в исходное положение на0%. Небольшойopacityпомогает сгладить переход.
Здесь как будто занавеска задергивается на «старой» странице и открывается на «новой». Это еще один пример, где в игру вступает функцияinset(). Мы определяем прямоугольники, расположенные на 50 % справа и слева. При переходе на предыдущую страницу их размер увеличивается до 50 %, а при переходе на следующую — уменьшается до 0, благодаря чему изображение появляется в центре и распространяется влево и вправо, как занавеска!
* Правило@view-transition позволяет страницам использовать междокументные переходы. Другими словами, оно позволяет создавать анимацию между страницами одного и того же источника с помощьютолько CSS.Самый простой способ добиться этого— установить для дескриптораnavigationзначениеautoна страницах, между которыми вы хотите осуществлять переходы.
@view-transition {
navigation: auto;
}
** Свойствоclip-path**в CSS позволяет указать, какая часть элемента должна отображаться, а какая — скрываться (или «обрезаться»).
.clip-me {
/* Example: clip away the element from the top, right, bottom, and left edges */
clip-path: inset(10px 20px 30px 40px); /* or "none" */
/* Example: clip element into a Heptagon */
clip-path: polygon(50% 0%, 90% 20%, 100% 60%, 75% 100%, 25% 100%, 0% 60%, 10% 20%);
/* Deprecated version */
position: absolute; /* absolute or fixed positioning required */
clip: rect(110px, 160px, 170px, 60px); /* or "auto" */
/* values descript a top/left point and bottom/right point */
}
*** scale():Изменяет размер элемента. Это также относится кfont-sizepadding,heightиwidthэлемента. Кроме того, это сокращенная функция дляscaleXиscaleYфункций.
rotate(): Поворачивает элемент по часовой стрелке относительно его текущего положения.
Если у вас есть вопросы по статье или нужна помощь в создании сайта, пишите нам в чат на сайте или Вконтакте. Не забудьте оставить свой e-mail и мы ответим в самое ближайшее время.
Понравилась статья?
Будем признательны, если поделитесь в соцсетях или мессенджерах, а также присоединитесь к нашей группе Вконтакте. Будет интересно!
Переходы между документами и анимация при прокрутке позволяют добавить больше интерактивности в ваши приложения с помощью нескольких строк CSS. Теперь вы можете анимироватьheight: auto;, стилизовать полосы прокрутки и изменять размер текстовых полей в соответствии с их содержимым.
Это вопрос задают довольно часто: Можно ли создавать тени из градиентов вместо сплошных цветов? Нет конкретного свойства CSS, которое делает это, и любая информация, которую вы найдёте об этом, в основном представляет собой множество приемов CSS для аппроксимации градиента. Мы на самом деле рассмотрим некоторые из них по ходу дела.
CSS3 позволяет создавать разнообразные эффекты на сайтах без использования javascript и громоздкого flesh. Все последние версии современных браузеров позволяют использовать css3 в полном объеме. Если Вы считаете, что посетители вашего сайта люди прогрессивные и пользуются современными браузерами, которые постоянно обновляют, то Вы смело можете использовать новые технологоии и не заботиться о тех, кто все еще живет в прошлом веке и использует IE5…