CSS-обертка: 2023!

CSS-обернутый заголовок

CSS обернут: 2023!

Ух ты! 2023 год стал знаменательным для CSS!

От #Interop2023 до множества новых возможностей в области CSS и пользовательского интерфейса, которые предоставляют разработчикам возможности, которые раньше считались невозможными на веб-платформе. Теперь каждый современный браузер поддерживает контейнерные запросы, подсетку, селектор :has() и целый ряд новых цветовых пространств и функций . В Chrome реализована поддержка анимации с прокруткой, основанной исключительно на CSS, и плавной анимации между веб-представлениями с переходами между представлениями . И в довершение всего, появилось множество новых примитивов, которые улучшают пользовательский опыт разработчиков, таких как вложенность CSS и стили с ограниченной областью действия .

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

Архитектурные основы

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

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

Browser Support

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

Source

В Chrome 111 добавлена ​​поддержка тригонометрических функций sin() , cos() , tan() , asin() , acos() , atan() и atan2() , что делает их доступными во всех основных движках. Эти функции очень удобны для анимации и вёрстки. Например, теперь гораздо проще размещать элементы по окружности вокруг выбранного центра.

Демонстрация тригонометрических функций

Узнайте больше о тригонометрических функциях в CSS .

Комплексный nth-* выбор

Browser Support

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

С помощью псевдокласса-селектора :nth-child() можно выбирать элементы в DOM по их индексу. Микросинтаксис An+B позволяет точно контролировать выбор элементов.

По умолчанию псевдоэлементы :nth-*() учитывают все дочерние элементы. Начиная с Chrome 111, вы можете опционально передавать список селекторов в :nth-child() и :nth-last-child() . Таким образом, вы можете предварительно отфильтровать список дочерних элементов до того, как An+B выполнит свою функцию.

В следующем примере логика 3n+1 применяется только к маленьким куклам, предварительно отфильтровывая их с помощью of .small . Используйте раскрывающиеся списки для динамического изменения используемого селектора.

Демонстрация комплексного выбора nth-*

Узнайте больше о сложных выборках nth-* .

Объем

Browser Support

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

Source

В Chrome 118 добавлена ​​поддержка @scope — правила at, позволяющего сопоставлять селектор области действия с определённым поддеревом документа. Благодаря стилю с областью действия вы можете очень точно выбирать элементы, не прибегая к написанию слишком специфичных селекторов или их жёсткой привязке к структуре DOM.

Поддерево области действия определяется корнем области действия (верхняя граница) и необязательным пределом области действия (нижняя граница).

@scope (.card) {  } /* scoping root */
@scope (.card) to (.card__content) {  } /* scoping root + scoping limit*/

Правила стиля, помещенные внутрь блока области действия, будут применяться только к элементам внутри выделенного поддерева. Например, следующее правило стиля с областью действия применимо только к элементам <img> , расположенным между элементом .card и любым вложенным компонентом, соответствующим селектору [data-component] .

@scope (.card) to ([data-component]) {
  img {  }
}

В следующей демонстрации элементы <img> в компоненте карусели не сопоставляются из-за примененного ограничения области действия.

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

Reference screenshot for the @scope demo

Демонстрация Scope в реальном времени

Демонстрация CSS @scope

Подробнее об @scope читайте в статье «Как использовать @scope для ограничения области действия селекторов» . В этой статье вы узнаете о селекторе :scope , о том, как обеспечивается специфичность, об областях действия без прелюдий и о том, как @scope влияет на каскад.

Вложенность

Browser Support

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

Source

До появления вложенности каждый селектор приходилось явно объявлять отдельно друг от друга. Это приводило к повторам, громоздким таблицам стилей и разрозненному процессу разработки. Теперь селекторы можно продолжать, группируя связанные с ними правила стилей.

dl {
  /* dt styles */
  
  dt {
    /* dl dt styles */
  }

  dd {
    /* dl dd styles */
  }
}

/* same as */
dt {
  /* dt styles */
}

dl dt {
  /* dl dt styles */
}

dl dd {
  /* dl dd styles */
}

Вложенный скринкаст

Демонстрация вложенности в реальном времени

Измените селектор вложенности, чтобы определить победителя гонки.

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

Узнайте больше о вложенности .

Подсетка

Browser Support

  • Хром: 117.
  • Край: 117.
  • Firefox: 71.
  • Сафари: 16.

Source

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

Скринкаст Subgrid

Демонстрация Subgrid в реальном времени

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

Подсетка особенно полезна для выравнивания элементов одного уровня с динамическим контентом. Это освобождает копирайтеров, UX-райтеров и переводчиков от необходимости создавать текст проекта, который «вписывается» в макет. С помощью подсетки макет можно адаптировать под контент.

Узнайте больше о подсетке .

Типографика

Веб-типографика претерпела несколько важных обновлений в 2023 году. Особенно приятным прогрессивным улучшением стало свойство text-wrap . Это свойство позволяет настраивать типографскую вёрстку прямо в браузере без необходимости написания дополнительных скриптов. Попрощайтесь с неудобной длиной строк и поприветствуйте более предсказуемую типографику!

Начальная буква

Browser Support

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

Source

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

Скриншот начальной буквы

Скриншот демонстрации начальной буквы

Демонстрация начальной буквы

Измените значения initial-letter для псевдоэлемента ::first-letter чтобы увидеть его смещение.

Узнайте больше о initial-letter .

перенос текста: баланс и красота

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

Здесь на помощь приходят два новых метода переноса текста: balance и « pretty . Значение « balance направлено на создание гармоничного блока текста, а pretty — на предотвращение появления «сирот» и обеспечение корректной расстановки переносов. Обе эти задачи традиционно выполнялись вручную, и здорово, что эту задачу может выполнить браузер, и он работает на любом языке перевода.

Скринкаст с обтеканием текстом

Демонстрация переноса текста в реальном времени

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

Узнайте больше о text-wrap: balance .

Цвет

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

Цветовые пространства HD (уровень цвета 4)

Browser Support

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

Source

Browser Support

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

Source

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

CSS и цвет теперь могут: - Проверять, поддерживает ли аппаратное обеспечение экрана пользователя широкую гамму цветов HDR. - Проверять, понимает ли браузер пользователя цветовой синтаксис, такой как Oklch или Display P3. - Задавать цвета HDR в Oklab, Oklch, HWB, Display P3, Rec.2020, XYZ и других. - Создавать градиенты с цветами HDR. - Интерполировать градиенты в альтернативных цветовых пространствах. - Смешивать цвета с помощью color-mix() . - Создавать цветовые варианты с относительным цветовым синтаксисом.

Скринкаст Color 4

Демонстрация цвета 4

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

Узнайте больше о Color 4 и цветовых пространствах .

функция смешивания цветов

Browser Support

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

Source

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

Скринкаст color-mix()

color-mix() Демо

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

Функция color-mix() может рассматриваться как момент времени в градиенте. Градиент показывает все этапы перехода от синего к белому, а color-mix() — только один этап. Всё становится сложнее, когда вы начинаете учитывать цветовые пространства и понимаете, насколько сильно смешивание цветов может отличаться от результатов.

Узнайте больше о color-mix() .

Относительный синтаксис цвета

Относительный цветовой синтаксис (RCS) — это дополнительный метод к color-mix() для создания цветовых вариантов. Он немного мощнее color-mix(), но также представляет собой другую стратегию работы с цветом. color-mix() может подмешивать белый цвет для осветления цвета, при этом RCS предоставляет точный доступ к каналу яркости и возможность использовать calc() для программного уменьшения или увеличения яркости.

Скринкаст RCS

Демонстрация RCS в реальном времени

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

RCS позволяет выполнять относительные и абсолютные манипуляции с цветом. Относительное изменение — это изменение текущего значения насыщенности или яркости с помощью функции calc() . Абсолютное изменение — это замена значения канала на совершенно новое, например, установка непрозрачности на 50%. Этот синтаксис предоставляет вам эффективные инструменты для работы с темами, создания вариаций JIT-режимов и многого другого.

Узнайте больше о синтаксисе относительных цветов .

Адаптивный дизайн

Адаптивный дизайн претерпел изменения в 2023 году. Этот новаторский год открыл новые возможности, которые полностью изменили подход к созданию адаптивного веб-интерфейса, и положил начало новой модели адаптивного дизайна на основе компонентов. Сочетание контейнерных запросов и :has() поддерживает компоненты, адаптивный и логичный стиль которых зависит от размера родительского элемента, а также от наличия или состояния любого из дочерних элементов. Это означает, что вы наконец-то можете отделить макет на уровне страницы от макета на уровне компонента и написать логику один раз, чтобы использовать компонент везде!

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

Browser Support

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

Source

Вместо использования глобальной информации о размере области просмотра для применения стилей CSS, контейнерные запросы поддерживают запросы к родительскому элементу на странице. Это означает, что компоненты можно стилизовать динамически в разных макетах и ​​представлениях. Контейнерные запросы для определения размера стали стабилизированы во всех современных браузерах в День святого Валентина этого года (14 февраля).

Чтобы использовать эту функцию, сначала настройте контейнер для запрашиваемого элемента, а затем, подобно медиазапросу, используйте @container с параметрами размера для применения стилей. Вместе с запросами контейнера вы получаете размеры запроса контейнера. В следующем примере размер запроса контейнера cqi (представляющий размер встроенного контейнера) используется для определения размера заголовка карточки.

@container Скринкаст

@container Демо

Узнайте больше об использовании контейнерных запросов .

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

Browser Support

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

Запросы стилей частично реализованы в Chrome 111. В настоящее время запросы стилей позволяют запрашивать значения пользовательских свойств родительского элемента с помощью @container style() . Например, можно узнать, существует ли значение пользовательского свойства или установлено ли для него определённое значение, например, @container style(--rain: true) .

Скриншот запроса стиля

Скриншот демонстрации для контейнера стилей запросов погодных карт

Демонстрация запроса стиля

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

Хотя это звучит похоже на использование имён классов в CSS, запросы стилей имеют некоторые преимущества. Во-первых, запросы стилей позволяют обновлять значение в CSS по мере необходимости для псевдосостояний. Кроме того, в будущих версиях реализации вы сможете запрашивать диапазоны значений для определения применяемого стиля, например, style(60 <= --weather <= 70) , и стиль, основанный на парах «свойство-значение», например style(font-style: italic) .

Узнайте больше об использовании стилевых запросов .

селектор :has()

Browser Support

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

Source

Почти 20 лет разработчики просили добавить «родительский селектор» в CSS. Благодаря селектору :has() появившемуся в Chrome 105, это стало возможным. Например, использование .card:has(img.hero) выберет элементы .card , имеющие в качестве дочерних элементов главное изображение.

Скриншот демонстрации :has()

Reference screenshot for the :has() demo

:has() Живая демонстрация

Демонстрация CSS :has() : Карточка без/с изображением

Поскольку :has() принимает в качестве аргумента список относительных селекторов, вы можете выбрать гораздо больше, чем родительский элемент. Используя различные CSS-комбинаторы, можно не только перемещаться по дереву DOM, но и выбирать элементы в горизонтальной плоскости. Например, li:has(+ li:hover) выберет элемент <li> , предшествующий элементу <li> , на который в данный момент наведен курсор.

:has() Скринкаст

:has() Демо

Демонстрация CSS :has() : Док

Узнайте больше о селекторе CSS :has() .

Обновить медиа-запрос

Browser Support

  • Хром: 113.
  • Край: 113.
  • Firefox: 102.
  • Сафари: 17.

Source

Медиа-запрос update позволяет адаптировать пользовательский интерфейс к частоте обновления устройства. Функция может возвращать значения fast , slow » или none в зависимости от возможностей различных устройств.

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

Обновление скринкаста

Обновление демо

Смоделируйте (выбрав опцию радио) значение скорости обновления и посмотрите, как оно повлияет на утку.

Узнайте больше о @media (обновление) .

Скрипт медиа-запроса

Browser Support

  • Хром: 120.
  • Край: 120.
  • Firefox: 113.
  • Сафари: 17.

Source

Медиа-запрос со скриптом можно использовать для проверки наличия JavaScript. Это очень удобно для прогрессивного улучшения. До появления этого медиа-запроса стратегия определения наличия JavaScript заключалась в добавлении класса nojs в HTML и его удалении с помощью JavaScript. Эти скрипты можно удалить, поскольку CSS теперь может обнаруживать JavaScript и соответствующим образом корректировать код.

Узнайте, как включить и отключить JavaScript на странице для тестирования с помощью Chrome DevTools здесь .

Скринкаст по написанию сценариев

Демонстрация скрипта

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

Узнайте больше о сценарии .

Медиа-запрос с пониженной прозрачностью

Browser Support

  • Хром: 118.
  • Край: 118.
  • Firefox: за флагом.
  • Safari: не поддерживается.

Source

Непрозрачные интерфейсы могут вызывать головную боль или создавать трудности для людей с различными типами нарушений зрения. Именно поэтому в Windows, macOS и iOS есть системные настройки, которые позволяют уменьшить или полностью убрать прозрачность пользовательского интерфейса. Этот медиазапрос prefers-reduced-transparency хорошо сочетается с другими медиазапросами настроек, позволяя вам проявить творческий подход и одновременно подстроиться под пользователей.

Скринкаст с пониженной прозрачностью

Демонстрация пониженной прозрачности

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

Узнайте больше о @media (prefers-reduced-transparency) .

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

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

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

Browser Support

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

Source

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

В основе API View Transitions лежит функция document.startViewTranstion . Передайте функцию, которая обновляет DOM до нового состояния, и API позаботится обо всём за вас. Он делает снимки до и после, а затем осуществляет переход между ними. С помощью CSS вы можете управлять тем, что будет сохраняться, и при необходимости настраивать анимацию этих снимков.

Скринкаст VT

Демо VT

Посмотреть демо-версию Transitions

API View Transitions для одностраничных приложений, представленный в Chrome 111. Узнайте больше о View Transitions .

Функция линейного смягчения

Browser Support

  • Хром: 113.
  • Край: 113.
  • Firefox: 112.
  • Сафари: 17.2.

Source

Не позволяйте названию этой функции ввести вас в заблуждение. Функция linear() (не путать с ключевым словом linear ) позволяет создавать сложные функции плавности простым способом, но при этом теряется точность.

До появления функции linear() в Chrome 113 создать эффекты отскока или пружины в CSS было невозможно. Благодаря linear() можно аппроксимировать эти эффекты, упрощая их до ряда точек, а затем выполняя линейную интерполяцию между этими точками.

Chart of a bounce easing curve with several dots added to it
Исходная кривая отскока, показанная синим цветом, упрощена набором ключевых точек, показанных зелёным цветом. Функция linear() использует эти точки и выполняет линейную интерполяцию между ними.

Скринкаст с линейной загрузкой

Демонстрация линейной смягчения

Демонстрация CSS linear() .

Узнайте больше о linear() . Для создания кривых linear() используйте генератор линейной плавности .

Прокрутить конец

Browser Support

  • Хром: 114.
  • Край: 114.
  • Firefox: 109.
  • Safari: не поддерживается.

Source

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

Скринкаст Scrollend

Демонстрация Scrollend

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

Узнайте больше о scrollend .

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

Browser Support

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

Source

Анимация, управляемая прокруткой, — это интересная функция, доступная в Chrome 115. Она позволяет использовать существующую CSS-анимацию или анимацию, созданную с помощью API веб-анимации , и привязывать её к смещению прокрутки скроллера. При прокрутке вверх и вниз (или влево и вправо в горизонтальном скроллере) связанная анимация будет перемещаться вперёд и назад в ответ на прокрутку.

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

Скринкаст SDA

Демонстрация SDA

Демонстрация анимации с помощью прокрутки на CSS: прокрутка временной шкалы

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

Демонстрационный скринкаст SDA

Демонстрация SDA в реальном времени

Демонстрация анимации с помощью прокрутки CSS: просмотр временной шкалы

Поскольку анимация, управляемая прокруткой, работает с CSS-анимацией и API веб-анимации, вы можете воспользоваться всеми преимуществами этих API. В том числе возможностью запускать анимацию вне основного потока. Теперь вы можете добиться плавной и шёлковой анимации, управляемой прокруткой, вне основного потока, добавив всего несколько строк кода — что тут не нравится?

Чтобы узнать больше об анимации, управляемой прокруткой, ознакомьтесь с этой статьей, где вы найдете все подробности, или посетите scroll-driven-animations.style , где представлено множество демонстрационных роликов.

Отложенное прикрепление временной шкалы

Browser Support

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

Source

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

Чтобы анимированный элемент мог найти именованную временную шкалу прокрутки, не являющуюся предком, используйте свойство timeline-scope общего родительского элемента. Это позволяет прикрепить к нему заданную scroll-timeline или view-timeline с этим именем, расширяя область действия. Таким образом, любой дочерний элемент этого общего родительского элемента может использовать временную шкалу с этим именем.

Visualization of a DOM subtree with timeline-scope used on a shared parent
Если timeline-scope объявлен на общем родительском элементе, scroll-timeline объявленный на скроллере, может быть найден элементом, который использует его в качестве animation-timeline

Демонстрационный скринкаст

Живая демонстрация

Демонстрация анимации с помощью прокрутки на CSS: отложенное присоединение временной шкалы

Узнайте больше о timeline-scope .

Дискретные анимации свойств

Ещё одна новая возможность 2023 года — это возможность анимировать дискретные анимации, например, переход к display: none и обратно. Начиная с Chrome 116, можно использовать display и content-visibility в правилах ключевых кадров. Также можно выполнить переход любого дискретного свойства в точке 50%, а не в точке 0%. Это достигается с помощью свойства transition-behavior с ключевым словом allow-discrete или в свойстве transition для сокращённой записи.

Дискретная анимация. Скринкаст

Дискретная анимация. Демо

Узнайте больше о переходе дискретных анимаций .

@starting-style

Browser Support

  • Хром: 117.
  • Край: 117.
  • Firefox: 129.
  • Сафари: 17.5.

Source

Правило CSS @starting-style основано на новых веб-возможностях для анимации перехода к display: none обратно. Это правило позволяет задать элементу стиль «до открытия», который браузер может найти до открытия элемента на странице. Это очень полезно для анимации входа и анимации в таких элементах, как всплывающее окно или диалоговое окно. Оно также может быть полезно в любой момент, когда вы создаёте элемент и хотите добавить ему возможность анимации. Рассмотрим следующий пример, в котором плавно анимируется атрибут popover окна (см. следующий раздел) в область просмотра и на верхний слой из-за пределов области просмотра.

@starting-style Скринкаст

@starting-style Демо

Узнайте больше о @starting-style и других анимациях входа.

Наложение

Browser Support

  • Хром: 117.
  • Край: 117.
  • Firefox: не поддерживается.
  • Safari: не поддерживается.

Source

Новое CSS-свойство overlay можно добавить к переходу, чтобы элементы со стилями верхнего слоя, такие как popover и dialog окна, могли плавно анимироваться, выходя из верхнего слоя. Если не использовать свойство overlay, элемент немедленно вернётся в состояние обрезки, трансформации и перекрытия, и вы не увидите перехода. Аналогично, overlay позволяет плавно анимировать ::backdrop при добавлении к элементу верхнего слоя.

Наложение скринкаста

Демонстрация наложения в реальном времени

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

Компоненты

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

Поповер

Browser Support

  • Хром: 114.
  • Край: 114.
  • Firefox: 125.
  • Сафари: 17.

Source

API Popover позволяет создавать элементы, которые располагаются поверх остальной части страницы. К ним могут относиться меню, элементы выбора и всплывающие подсказки. Вы можете создать простой всплывающий элемент, добавив атрибут popover и id всплывающего элемента, а затем связав его атрибут id с кнопкой вызова с помощью popovertarget="my-popover" . API Popover поддерживает:

  • Перемещение на верхний слой. Вспомогательные элементы будут отображаться на отдельном слое над остальной частью страницы, поэтому вам не придётся экспериментировать с z-index.
  • Функция скрытия подсветки. Щелчок за пределами области всплывающего окна закроет всплывающее окно и вернет фокус.
  • Управление фокусом по умолчанию. При открытии всплывающего окна следующая вкладка останавливается внутри него.
  • Доступные сочетания клавиш. Нажатие клавиши esc или двойное нажатие кнопки закроет всплывающее окно и вернет фокус.
  • Доступные привязки компонентов. Семантическое подключение элемента информера к триггеру информера.

Скринкаст Popover

Демонстрация Popover Live

Горизонтальные линии в выделенном

Ещё одно небольшое изменение HTML, появившееся в Chrome и Safari в этом году, — это возможность добавлять горизонтальные линейки (теги <hr> ) в элементы <select> для визуального разделения контента. Раньше добавление тега <hr> в элемент select просто не отображалось. Но в этом году и Safari, и Chrome поддерживают эту функцию, что позволяет лучше разделять контент внутри элементов <select> .

Выбрать снимок экрана

снимок экрана hr в избранном со светлой и темной темой в Chrome

Выбрать живую демонстрацию

Узнайте больше об использовании hr в select

:допустимые и недопустимые псевдоклассы пользователя

Browser Support

  • Хром: 119.
  • Край: 119.
  • Firefox: 88.
  • Сафари: 16.5.

Source

Псевдоклассы :user-valid и :user-invalid ставшие стабильными во всех браузерах в этом году, ведут себя аналогично псевдоклассам :valid и :invalid , но сопоставляются с элементом управления формы только после того, как пользователь существенно взаимодействовал с данными ввода. Элемент управления формы, который является обязательным и пустым, будет соответствовать :invalid даже если пользователь ещё не начал взаимодействовать со страницей. Тот же элемент управления не будет соответствовать :user-invalid пока пользователь не изменит данные ввода и не оставит их в недопустимом состоянии.

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

:user-* Скринкаст

:user-* Демонстрация в реальном времени

Узнайте больше об использовании псевдоэлементов проверки формы user-* .

Эксклюзивный аккордеон

Browser Support

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

Распространённый шаблон пользовательского интерфейса в вебе — компонент «аккордеон». Чтобы реализовать этот шаблон, вы объединяете несколько элементов <details> , часто визуально группируя их, чтобы обозначить их принадлежность друг к другу.

В Chrome 120 появилась поддержка атрибута name для элементов <details> . При использовании этого атрибута несколько элементов <details> с одинаковым значением name образуют семантическую группу. Одновременно может быть открыт только один элемент в группе: при открытии одного из элементов <details> из группы предыдущий открытый элемент автоматически закрывается. Такой тип аккордеона называется эксклюзивным аккордеоном .

Эксклюзивная демо-версия аккордеона

Элементы <details> , входящие в состав эксклюзивного аккордеона, не обязательно должны быть одноуровневыми. Они могут быть разбросаны по всему документу.

За последние несколько лет CSS пережил настоящий ренессанс, особенно в 2023 году. Если вы новичок в CSS или просто хотите освежить свои знания основ, ознакомьтесь с нашим бесплатным курсом Learn CSS, а также с другими бесплатными курсами на сайте web.dev.

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

⇾ Команда Chrome UI DevRel,