Что нового в CSS и пользовательском интерфейсе: I/O 2023 Edition

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

Вот 20 самых интересных и впечатляющих функций, которые появились недавно или появятся в ближайшее время:

Новый отзывчивый

Давайте начнём с новых возможностей адаптивного дизайна. Новые функции платформы позволяют создавать логические интерфейсы с компонентами, которые сами владеют информацией об адаптивном стиле, создавать интерфейсы, использующие возможности системы для создания более реалистичных пользовательских интерфейсов, и позволять пользователю стать частью процесса проектирования с помощью запросов пользовательских настроек для полной настройки.

Запросы контейнеров

Browser Support

  • Хром: 105.
  • Край: 105.
  • Firefox: 110.
  • Сафари: 16.

Source

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

В следующем примере с папкой «Входящие» боковая панель «Основные входящие» и «Избранное» являются контейнерами. Письма в них изменяют свою сетку и показывают или скрывают временную метку письма в зависимости от доступного места. Это тот же самый компонент на странице, просто представленный в разных режимах.

Поскольку у нас есть контейнерный запрос, стили этих компонентов динамические. При изменении размера страницы и макета компоненты адаптируются к выделенному им пространству. Боковая панель становится верхней панелью с большим пространством, и мы видим, что макет больше похож на основной почтовый ящик. При меньшем пространстве оба компонента отображаются в сжатом формате.

Подробнее о контейнерных запросах и создании логических компонентов можно узнать в этой статье .

Запросы стиля

Browser Support

  • Хром: 111.
  • Край: 111.
  • Firefox: не поддерживается.
  • Сафари: 18.

Спецификация запроса контейнера также позволяет запрашивать значения стилей родительского контейнера. В настоящее время это частично реализовано в Chrome 111, где можно использовать пользовательские свойства CSS для применения стилей контейнера.

В следующем примере характеристики погоды, хранящиеся в значениях пользовательских свойств, такие как дождь, солнечно и облачно, используются для определения стиля фона карты и значка индикатора.

@container style(--sunny: true) {
 .weather-card {
   background: linear-gradient(-30deg, yellow, orange);
 }

 .weather-card:after {
   content: url(<data-uri-for-demo-brevity>);
   background: gold;
 }
}

Демонстрация погодных карт.

Это только начало для запросов стилей. В будущем мы добавим булевы запросы для определения наличия значения настраиваемого свойства и уменьшения повторения кода, а в настоящее время обсуждаются запросы по диапазонам для применения стилей на основе диапазона значений. Это позволит применять показанные здесь стили, используя процентное значение вероятности дождя или облачности.

Узнать больше и увидеть больше демонстраций можно в статье нашего блога о запросах стилей .

:has()

Browser Support

  • Хром: 105.
  • Край: 105.
  • Firefox: 121.
  • Сафари: 15.4.

Source

Говоря о мощных динамических функциях, селектор :has() — одна из самых мощных новых возможностей CSS, появившихся в современных браузерах. С помощью :has() можно применять стили, проверяя, содержит ли родительский элемент определённые дочерние элементы или находятся ли эти элементы в определённом состоянии. По сути, это означает, что теперь у нас есть родительский селектор.

Основываясь на примере запроса контейнера, вы можете использовать :has() , чтобы сделать компоненты ещё более динамичными. В этом случае элемент с элементом «звёздочка» приобретает серый фон, а элемент с установленным флажком — синий.

Скриншот демонстрации

Но этот API не ограничивается выбором родительского элемента. Вы также можете оформить любые дочерние элементы внутри родительского элемента. Например, заголовок становится жирным, если у элемента есть элемент «звезда». Это достигается с помощью .item:has(.star) .title . Использование селектора :has() предоставляет доступ к родительским, дочерним и даже родственным элементам, что делает API по-настоящему гибким, и новые примеры использования появляются каждый день.

Узнайте больше и изучите еще несколько демонстраций, прочитав эту запись в блоге , посвященную :has() .

синтаксис nth-of

Browser Support

  • Хром: 111.
  • Край: 111.
  • Firefox: 113.
  • Сафари: 9.

Веб-платформа теперь предлагает более расширенный выбор nth-child. Расширенный синтаксис nth-child добавляет новое ключевое слово («of»), которое позволяет использовать существующий микросинтаксис An+B с более узким подмножеством для поиска.

Если вы используете обычный nth-child, например :nth-child(2) для класса special, браузер выберет элемент, к которому применён класс special и который также является вторым дочерним элементом. Это отличается от :nth-child(2 of .special) , который сначала предварительно отфильтрует все элементы .special , а затем выберет второй элемент из списка.

Подробнее об этой возможности читайте в нашей статье о синтаксисе nth-of .

text-wrap: balance

Селекторы и запросы стилей — не единственные места, где мы можем встраивать логику в наши стили; типографика — ещё один вариант. Начиная с Chrome 114, вы можете использовать балансировку переноса текста для заголовков, используя свойство text-wrap со значением balance .

Попробуйте демо

Чтобы сбалансировать текст, браузер фактически выполняет бинарный поиск наименьшей ширины, не создающей дополнительных строк, останавливаясь на одном CSS-пикселе (не отображаемом). Для дальнейшего сокращения шагов бинарного поиска браузер начинает с 80% от средней ширины строки.

Попробуйте демо

Подробнее об этом читайте в этой статье .

initial-letter

Browser Support

  • Хром: 110.
  • Край: 110.
  • Firefox: не поддерживается.
  • Сафари: 9.

Source

Ещё одно приятное улучшение веб-типографики — initial-letter . Это CSS-свойство позволяет лучше контролировать оформление буквиц.

initial-letter в псевдоэлементе :first-letter используется для указания: размера буквы, исходя из количества занимаемых ею строк; и отступа от блока буквы, или «углубления», где она будет располагаться.

Подробнее об использовании intial-letter можно узнать здесь .

Динамические единицы измерения области просмотра

Browser Support

  • Хром: 108.
  • Край: 108.
  • Firefox: 101.
  • Сафари: 15.4.

Одна из распространённых проблем, с которой сталкиваются веб-разработчики сегодня, — это точный и единообразный размер всей области просмотра, особенно на мобильных устройствах. Разработчикам важно, чтобы значение 100vh (100% от высоты области просмотра) означало «быть такой же высоты, как и область просмотра», но единица vh не учитывает такие моменты, как сворачивание панелей навигации на мобильных устройствах, поэтому иногда оно оказывается слишком длинным и приводит к необходимости прокручивать страницу.

Отображение слишком большого количества полос прокрутки

Для решения этой проблемы на веб-платформе теперь есть новые значения единиц измерения, в том числе: - Малая высота и ширина области просмотра (или svh и svw ), которые представляют наименьший активный размер области просмотра. - Большая высота и ширина области просмотра ( lvh и lvw ), которые представляют наибольший размер. - Динамическая высота и ширина области просмотра ( dvh и dvw ).

Значение динамических единиц области просмотра изменяется, когда отображаются дополнительные динамические панели инструментов браузера, такие как адрес вверху или панель вкладок внизу, и когда они не отображаются.

Визуализированы новые единицы измерения области просмотра

Более подробную информацию об этих новых единицах измерения см. в статье Большие, малые и динамические единицы измерения области просмотра .

Широкий цветовой охват

Browser Support

  • Хром: 111.
  • Край: 111.
  • Firefox: 113.
  • Сафари: 15.4.

Source

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

Представлена ​​серия изображений, переходящих между широкой и узкой цветовыми гаммами, иллюстрирующая яркость цвета и ее эффекты.
Попробуйте сами.

Но теперь на нашей веб-платформе доступен ряд новых цветовых пространств, включая REC2020, P3, XYZ, LAB, OKLAB, LCH и OKLCH. Ознакомьтесь с новыми цветовыми пространствами для веб-страниц и другими материалами в HD Color Guide .

Пять сложенных друг на друга треугольников разного цвета помогут проиллюстрировать соотношение и размер каждого из новых цветовых пространств.

И вы сразу увидите в DevTools, как расширился цветовой диапазон: белая линия обозначает, где заканчивается диапазон sRGB и начинается цветовой диапазон с более широким охватом.

DevTools показывает линию цветового охвата в палитре цветов.

Ещё больше инструментов для работы с цветом! Не пропустите и все замечательные улучшения градиентов. Адам Аргайл даже создал совершенно новый инструмент, который поможет вам опробовать новый веб-инструмент для выбора цвета и создания градиентов. Попробуйте его на сайте gradient.style .

смешивание цветов()

Browser Support

  • Хром: 111.
  • Край: 111.
  • Firefox: 113.
  • Сафари: 16.2.

Source

Функция color-mix() расширяет возможности расширенных цветовых пространств. Эта функция поддерживает смешивание двух цветовых значений для создания новых на основе каналов смешиваемых цветов. Цветовое пространство, в котором происходит смешивание, влияет на результат. Работа в более перцептивном цветовом пространстве, таком как oklch, будет проходить через другой цветовой диапазон, чем, например, sRGB.

color-mix(in srgb, blue, white);
color-mix(in srgb-linear, blue, white);
color-mix(in lch, blue, white);
color-mix(in oklch, blue, white);
color-mix(in lab, blue, white);
color-mix(in oklab, blue, white);
color-mix(in xyz, blue, white);
7 цветовых пространств (sRGB, linear-sRGB, LCH, OKLCH, LAb, OKLAB, XYZ), каждое из которых показывает разные результаты. Многие из них розовые или фиолетовые, но лишь немногие из них действительно синие.
Попробуйте демо-версию

Функция color-mix() предоставляет давно запрашиваемую возможность: сохранять непрозрачные значения цветов, добавляя им некоторую прозрачность. Теперь вы можете использовать переменные цвета вашего бренда, создавая вариации этих цветов с разной степенью прозрачности. Это можно сделать, смешав цвет с прозрачным. Если смешать синий цвет вашего бренда с 10% прозрачности, получится 90% непрозрачный цвет бренда. Вот как это позволяет быстро создавать цветовые системы.

Сегодня вы можете увидеть это в действии в Chrome DevTools с помощью действительно красивой иконки предварительного просмотра диаграммы Венна на панели стилей .

Скриншот DevTools со значком смешивания цветов диаграммы Венна

Дополнительные примеры и подробности смотрите в статье нашего блога о color-mix или попробуйте эту площадку color-mix().

Основы CSS

Создание новых возможностей, которые приносят явную пользу пользователям, — лишь одна из составляющих уравнения, но многие функции, появляющиеся в Chrome, направлены на улучшение опыта разработчиков и создание более надёжной и организованной архитектуры CSS. К этим функциям относятся вложенность CSS, каскадные слои, стили с ограниченной областью действия, тригонометрические функции и индивидуальные свойства преобразования.

Вложенность

Browser Support

  • Хром: 120.
  • Край: 120.
  • Firefox: 117.
  • Сафари: 17.2.

Source

Вложенность CSS, так любимая пользователями Sass и один из самых востребованных CSS-разработчиков на протяжении многих лет, наконец-то появилась на веб-платформе. Вложенность позволяет разработчикам писать более лаконично, сгруппированно, что снижает избыточность.

.card {}
.card:hover {}

/* can be done with nesting like */
.card {
  &:hover {

  }
}

Вы также можете вкладывать медиа-запросы , что означает возможность вложения контейнерных запросов . В следующем примере ориентация карточки меняется с портретной на альбомную, если в контейнере достаточно места:

.card {
  display: grid;
  gap: 1rem;

  @container (width >= 480px) {
    display: flex;
  }
}

Изменение макета на flex происходит, когда в контейнере доступно больше (или равно) 480px свободного места. Браузер просто применит новый стиль отображения при выполнении условий.

Дополнительную информацию и примеры можно найти в нашей статье о вложенности CSS .

Каскадные слои

Browser Support

  • Хром: 99.
  • Край: 99.
  • Firefox: 97.
  • Сафари: 15.4.

Source

Еще одна болевая точка разработчиков, которую мы выявили, — обеспечение единообразия в том, какие стили преобладают над другими, и одним из способов решения этой проблемы является лучший контроль над каскадом CSS.

Каскадные слои решают эту проблему, предоставляя пользователям контроль над тем, какие слои имеют более высокий приоритет, чем другие, что означает более точный контроль над применением стилей.

Каскадная иллюстрация

Скриншот из проекта Codepen
Изучите проект на Codepen.

Подробнее об использовании каскадных слоев читайте в этой статье .

CSS с ограниченной областью действия

Browser Support

  • Хром: 118.
  • Край: 118.
  • Firefox: за флагом.
  • Сафари: 17.4.

Source

Область действия стилей CSS позволяет разработчикам указывать границы применения конкретных стилей, по сути, создавая собственные пространства имён в CSS. Раньше разработчикам приходилось полагаться на сторонние скрипты для переименования классов или на особые соглашения об именовании, чтобы предотвратить конфликты стилей, но вскоре появится возможность использовать @scope .

Здесь мы устанавливаем область действия элемента .title в .card . Это предотвратит конфликт элемента title с другими элементами .title на странице, например, с заголовком записи в блоге или другим заголовком.

@scope (.card) {
  .title {
    font-weight: bold;
  }
}

В этой демонстрации вы можете увидеть @scope с ограничениями области действия вместе с @layer :

Скриншот карты из демо

Подробнее о @scope читайте в спецификации css-cascade-6 .

Тригонометрические функции

Browser Support

  • Хром: 111.
  • Край: 111.
  • Firefox: 108.
  • Сафари: 15.4.

Source

Ещё одним новым элементом CSS-инфраструктуры стали тригонометрические функции, добавленные к существующим математическим функциям CSS. Эти функции теперь стабильны во всех современных браузерах и позволяют создавать более органичные макеты на веб-платформе. Ярким примером служит радиальное меню, которое теперь можно проектировать и анимировать с помощью функций sin() и cos() .

В демонстрации ниже точки вращаются вокруг центральной точки. Вместо вращения каждой точки вокруг своего центра и последующего перемещения наружу, каждая точка перемещается по осям X и Y. Расстояния по осям X и Y определяются с учётом cos() и, соответственно, sin() угла --angle .

Более подробную информацию по этой теме смотрите в нашей статье о тригонометрических функциях .

Индивидуальные свойства преобразования

Browser Support

  • Хром: 104.
  • Край: 104.
  • Firefox: 72.
  • Сафари: 14.1.

Source

Эргономика разработки продолжает улучшаться благодаря отдельным функциям преобразования. С момента последнего ввода-вывода отдельные преобразования стали работать стабильно во всех современных браузерах.

Раньше приходилось полагаться на функцию преобразования для применения подфункций масштабирования, поворота и перемещения элемента пользовательского интерфейса. Это требовало множества повторений и было особенно неудобно при применении нескольких преобразований в разные моменты анимации.

.target {
  transform: translateX(50%) rotate(30deg) scale(1.2);
}

.target:hover {
  transform: translateX(50%) rotate(30deg) scale(2); /* Only scale changed here, yet you have to repeat all other parts */
}

Теперь вы можете использовать все эти детали в своих CSS-анимациях, разделив типы преобразований и применяя их по отдельности.

.target {
  translate: 50% 0;
  rotate: 30deg;
  scale: 1.2;
}

.target:hover {
  scale: 2;
}

При этом изменения в перемещении, вращении или масштабе могут происходить одновременно с разной скоростью в разное время анимации.

Более подробную информацию см. в этой статье об отдельных функциях преобразования .

Настраиваемые компоненты

Чтобы убедиться, что мы решаем некоторые из ключевых потребностей разработчиков через веб-платформу, мы работаем с группой сообщества OpenUI и определили три решения, с которых можно начать:

  1. Встроенная функциональность всплывающих окон с обработчиками событий, декларативная структура DOM и доступные значения по умолчанию.
  2. CSS API для привязки двух элементов друг к другу с целью обеспечения позиционирования якорей.
  3. Настраиваемый компонент раскрывающегося меню, который можно использовать в случаях, когда требуется стилизовать содержимое внутри выбранного элемента.

Поповер

API всплывающего окна предоставляет элементам некоторую встроенную поддержку браузера, например:

  • Поддержка верхнего слоя, благодаря чему вам не нужно управлять z-index . При открытии всплывающего окна или диалогового окна этот элемент перемещается на специальный слой в верхней части страницы.
  • Поведение легкого скрытия бесплатно в auto всплывающих окнах, поэтому, когда вы щелкаете за пределами элемента, всплывающее окно закрывается, удаляется из дерева доступности и фокус управляется должным образом.
  • Доступность по умолчанию для соединительной ткани цели поповера и самого поповера.

Все это означает, что для создания всех этих функций и отслеживания всех этих состояний нужно писать меньше JavaScript.

Пример поповера

Структура DOM для всплывающего окна декларативна и может быть записана так же просто, как присвоение элементу всплывающего id и атрибута popover . Затем этот идентификатор синхронизируется с элементом, который открывает всплывающее окно, например, с кнопкой с атрибутом popovertarget :

<div id="event-popup" popover>
  <!-- Popover content goes in here -–>
</div>

<button popovertarget="event-popup">Create New Event</button>

popover — это сокращение от popover=auto . Элемент с popover=auto принудительно закрывает другие поповеры при открытии, получает фокус при открытии и может скрываться. И наоборот, элементы popover=manual не закрывают принудительно другие элементы, не получают фокус немедленно и не скрываются при закрытии. Они закрываются с помощью переключения или другого действия закрытия.

Самую актуальную документацию по поповерам в настоящее время можно найти на MDN .

Позиционирование якоря

Вспомогательные элементы также часто используются в таких элементах, как диалоговые окна и подсказки, которые обычно необходимо привязать к определённым элементам. Рассмотрим пример с событием. При щелчке по событию в календаре рядом с ним появляется диалоговое окно. Элемент календаря является якорем, а всплывающее окно — это диалоговое окно, в котором отображается информация о событии.

Вы можете создать центрированную подсказку с помощью функции anchor() , используя ширину якоря, чтобы расположить подсказку на 50% от его координаты по оси X. Затем используйте существующие значения позиционирования, чтобы применить остальные стили размещения.

Но что произойдет, если информер не помещается в область просмотра из-за того, как вы его разместили?

всплывающее окно, выскакивающее из области просмотра

Для решения этой проблемы API позиционирования якоря включает в себя резервные позиции, которые можно настраивать. В следующем примере создаётся резервная позиция, называемая «сверху-затем-снизу». Браузер сначала попытается разместить подсказку вверху, а если она не помещается в область просмотра, разместит её под элементом якоря, внизу.

.center-tooltip {
  position-fallback: --top-then-bottom;
  translate: -50% 0;
}

@position-fallback --top-then-bottom {
  @try {
    bottom: calc(anchor(top) + 0.5rem);
    left: anchor(center);
  }

  @try {
    top: calc(anchor(bottom) + 0.5rem);
    left: anchor(center);
  }
}

Подробнее о позиционировании якорей читайте в этой записи блога .

<selectmenu>

Используя позиционирование как всплывающих окон, так и якорных элементов, вы можете создавать полностью настраиваемые выпадающие меню. Группа сообщества OpenUI изучает фундаментальную структуру этих меню и ищет способы настройки любого их содержимого. Взять, к примеру, эти визуальные примеры:

Примеры selectmenus

Чтобы построить этот самый левый пример selectmenu с цветными точками, соответствующими цвету, который будет отображаться в событии календаря, вы можете записать его следующим образом:

<selectmenu>
  <button slot="button" behavior="button">
    <span>Select event type</span>
    <span behavior="selected-value" slot="selected-value"></span>
    <span><img src="icon.svg"/></span>
  </button>
  <option value="meeting">
    <figure class="royalblue"></figure>
    <p>Meeting</p>
  </option>
  <option value="break">
    <figure class="gold"></figure>
     <p>Lunch/Break</p>
  </option>
  ...
</selectmenu>

Дискретные переходы свойств

Чтобы обеспечить плавное появление и исчезновение всех этих всплывающих окон, вебу необходим способ анимации отдельных свойств. Это свойства, которые ранее обычно не поддавались анимации, например, анимация перехода к верхнему слою и обратно, а также анимация перехода к display: none и обратно.

В рамках работы по обеспечению удобных переходов для всплывающих окон, выпадающих меню и даже существующих элементов, таких как диалоговые окна или пользовательские компоненты, браузеры предоставляют новые возможности для поддержки этих анимаций.

В следующем примере информера анимация появления и исчезновения информационного окна выполняется с помощью :popover-open для открытого состояния, @starting-style для состояния до открытия и непосредственного применения значения transform к элементу для состояния после открытия/закрытия. Чтобы всё это работало с display, необходимо добавить свойство transition , например:

.settings-popover {
  &:popover-open {
    /*   0. before-change   */
    @starting-style {
      transform: translateY(20px);
      opacity: 0;
    }

    /*   1. open (changed) state   */
    transform: translateY(0);
    opacity: 1;
  }

  /*   2. After-change state */
  transform: translateY(-50px);
  opacity: 0;

  /*  enumarate transitioning properties, including display */
  transition: transform 0.5s, opacity 0.5s, display 0.5s allow-discrete;
}

Взаимодействия

Что подводит нас к взаимодействию — последней остановке в этом обзоре функций веб-интерфейса.

Мы уже говорили об анимации отдельных свойств, но в Chrome также появились действительно интересные API, связанные с анимацией, управляемой прокруткой, и переходами между представлениями.

Анимации с прокруткой

Browser Support

  • Хром: 115.
  • Край: 115.
  • Firefox: за флагом.
  • Сафари: 26.

Source

Анимации, управляемые прокруткой, позволяют управлять воспроизведением анимации в зависимости от положения прокрутки контейнера прокрутки. Это означает, что при прокрутке вверх или вниз анимация перемещается вперёд или назад. Кроме того, с помощью анимаций, управляемых прокруткой, можно управлять анимацией в зависимости от положения элемента в контейнере прокрутки. Это позволяет создавать интересные эффекты, такие как фоновое изображение с эффектом параллакса, индикаторы хода прокрутки и изображения, которые появляются по мере появления в поле зрения.

Этот API поддерживает набор классов JavaScript и свойств CSS, которые позволяют легко создавать декларативные анимации, управляемые прокруткой.

Для управления CSS-анимацией с помощью прокрутки используйте новые свойства scroll-timeline , view-timeline и animation-timeline . Для управления API веб-анимации JavaScript передайте экземпляр ScrollTimeline или ViewTimeline в качестве параметра timeline в Element.animate()

Эти новые API работают совместно с существующими API веб-анимации и CSS-анимации, а значит, они используют все преимущества этих API. В том числе возможность запускать эти анимации вне основного потока. Да, вы правильно поняли: теперь вы можете создавать плавные анимации, управляемые прокруткой и работающие вне основного потока, всего с несколькими строками дополнительного кода. Что тут может не понравиться?!

Подробное руководство по созданию анимации с помощью прокрутки см. в этой статье об анимации с помощью прокрутки .

Просмотр переходов

Browser Support

  • Хром: 111.
  • Край: 111.
  • Предварительный просмотр технологии Firefox: поддерживается.
  • Сафари: 18.

Source

API View Transition позволяет легко изменять DOM за один шаг, создавая анимированный переход между двумя состояниями. Это могут быть простые плавные переходы между представлениями, но вы также можете управлять переходами отдельных частей страницы.

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

function spaNavigate(data) {
  // Fallback for browsers that don't support this API:
  if (!document.startViewTransition) {
    updateTheDOMSomehow(data);
    return;
  }

  // With a transition:
  document.startViewTransition(() => updateTheDOMSomehow(data));
}

Внешний вид перехода контролируется с помощью CSS.

@keyframes slide-from-right {
  from { opacity: 0; transform: translateX(75px); }
}

@keyframes slide-to-left {
  to { opacity: 0; transform: translateX(-75px); }
}

::view-transition-old(root) {
  animation: 350ms both slide-to-left ease;
}

::view-transition-new(root) {
  animation: 350ms both slide-from-right ease;
}

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

Переходы между представлениями в настоящее время работают с одностраничными приложениями (SPA) из Chrome 111. Поддержка многостраничных приложений находится в разработке. Подробнее см. в нашем полном руководстве по переходам между представлениями , где вы сможете всё подробно разобрать.

Заключение

Будьте в курсе всех последних новинок в области CSS и HTML здесь, на developer.chrome.com, и посмотрите видеоролики I/O, чтобы узнать больше о новых веб-приложениях.