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

CSS-заголовок

CSS Wrapped: 2023!

Ух ты! 2023 год стал невероятно важным для CSS!

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

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

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

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

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

Browser Support

  • Chrome: 111.
  • Край: 111.
  • Firefox: 108.
  • Сафари: 15.4.

Source

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

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

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

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

Browser Support

  • Chrome: 111.
  • Край: 111.
  • Firefox: 113.
  • Сафари: 9.

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

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

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

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

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

Объем

Browser Support

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

Source

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

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

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

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

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

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

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

Reference screenshot for the @scope demo

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

CSS @scope demo

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

Гнездование

Browser Support

  • Chrome: 120.
  • Edge: 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

  • Chrome: 117.
  • Край: 117.
  • Firefox: 71.
  • Сафари: 16.

Source

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

Видеоурок по Subgrid

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

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

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

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

Типография

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

Инициал

Browser Support

  • Chrome: 110.
  • Edge: 110.
  • Firefox: не поддерживается.
  • Сафари: 9.

Source

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

Скриншот первого письма

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

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

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

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

text-wrap: сбалансированный и красивый

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

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

Перенос текста на экран

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

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

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

Цвет

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

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

Browser Support

  • Chrome: 111.
  • Край: 111.
  • Firefox: 113.
  • Сафари: 15.

Source

Browser Support

  • Chrome: 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

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

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

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

Browser Support

  • Chrome: 111.
  • Край: 111.
  • Firefox: 113.
  • Сафари: 16.2.

Source

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

color-mix() Screencast

демонстрация color-mix()

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

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

Узнайте больше о функции color-mix() .

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

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

Видеоурок по RCS

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

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

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

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

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

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

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

Browser Support

  • Chrome: 105.
  • Edge: 105.
  • Firefox: 110.
  • Сафари: 16.

Source

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

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

@container Screencast

@container Demo

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

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

Browser Support

  • Chrome: 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

  • Chrome: 105.
  • Edge: 105.
  • Firefox: 121.
  • Сафари: 15.4.

Source

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

:has() Демонстрационный скриншот

Reference screenshot for the :has() demo

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

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

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

:has() Screencast

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

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

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

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

Browser Support

  • Chrome: 113.
  • Край: 113.
  • Firefox: 102.
  • Сафари: 17.

Source

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

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

Обновить видеозапись экрана

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

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

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

Запрос на создание сценария мультимедиа

Browser Support

  • Chrome: 120.
  • Edge: 120.
  • Firefox: 113.
  • Сафари: 17.

Source

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

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

Видеоурок по написанию сценариев

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

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

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

Запрос на использование медиаконтента с пониженной прозрачностью

Browser Support

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

Source

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

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

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

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

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

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

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

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

Browser Support

  • Chrome: 111.
  • Край: 111.
  • Firefox: 144.
  • Сафари: 18.

Source

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

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

VT Screencast

VT Demo

Посмотреть демонстрацию переходов

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

Функция линейного сглаживания

Browser Support

  • Chrome: 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

  • Chrome: 114.
  • Край: 114.
  • Firefox: 109.
  • Safari Technology Preview: поддерживается.

Source

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

Прокрутка видео

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

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

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

Анимация, управляемая прокруткой

Browser Support

  • Chrome: 115.
  • Edge: 115.
  • Firefox: за флагом.
  • Сафари: 26.

Source

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

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

SDA Screencast

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

Демонстрация CSS-анимаций, управляемых прокруткой: временная шкала прокрутки

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

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

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

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

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

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

Отложенное прикрепление графика

Browser Support

  • Chrome: 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

  • Chrome: 117.
  • Край: 117.
  • Firefox: 129.
  • Сафари: 17.5.

Source

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

@starting-style Screencast

@starting-style Demo

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

Наложение

Browser Support

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

Source

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

Наложение видеозаписи экрана

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

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

Компоненты

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

Поповер

Browser Support

  • Chrome: 114.
  • Край: 114.
  • Firefox: 125.
  • Сафари: 17.

Source

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

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

Popover Screencast

Демонстрация Popover вживую

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

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

Выберите скриншот

Скриншот страницы HR в режиме выбора с использованием светлой и темной тем в Chrome.

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

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

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

Browser Support

  • Chrome: 119.
  • Край: 119.
  • Firefox: 88.
  • Сафари: 16.5.

Source

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

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

:user-* Screencast

:user-* Живая демонстрация

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

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

Browser Support

  • Chrome: 120.
  • Edge: 120.
  • Firefox: 130.
  • Сафари: 17.2.

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

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

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

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

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

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

⇾ Команда разработчиков Chrome UI,