2024 год стал еще одним удивительным годом для CSS!

2024 год стал еще одним удивительным годом для CSS!
2024 год стал еще одним удивительным годом для CSS!

Переходы между документами и анимация при прокрутке позволяют добавить больше интерактивности в ваши приложения с помощью нескольких строк CSS. Теперь вы можете анимировать height: auto;, стилизовать полосы прокрутки и изменять размер текстовых полей в соответствии с их содержимым.

Многие функции стали базовыми и доступными в этом году благодаря эксклюзивным аккордеонам, всплывающим окнам @property и @starting-style — все они совместимы с основными браузерами.

Благодаря упорному труду разработчиков браузеров, авторов спецификаций и вкладу сообщества CSS в этом году совершил ещё один большой скачок вперёд.

Компоненты

Определение размера поля field-sizing

Без field-sizing для создания поля ввода с размером содержимого вам пришлось бы либо угадывать средний размер текстового поля, либо использовать JavaScript для подсчёта символов и увеличения высоты или ширины элемента по мере ввода текста пользователем. Теперь это можно сделать с помощью одной строки CSS.

textarea, select, input {
  field-sizing: content;
}

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

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

Анимация по высоте: автоматическаяheight: auto

Часто запрашиваемая функция CSS — это возможность анимировать до height: auto. Небольшая вариация этого запроса — переход к свойству ширины вместо высоты или переход к любому из других встроенных размеров, обозначаемых ключевыми словами min-content, max-content, и fit-content.

Начиная с Chrome 129 вы можете использовать свойство interpolate-size или функцию calc-size() для включения плавных переходов и анимации от длины к ключевым словам внутреннего размера и обратно.

Демонстрация CSS interpolate-size

Самый простой способ включить это поведение — сделать так, чтобы вся страница была настроена на него, объявив interpolate-size: allow-keywords в :root.

/* Opt-in the whole page to animating to/from intrinsic sizing keywords */
:root {
    interpolate-size: allow-keywords; /* 

В большинстве случаев использования interpolate-size должно быть достаточно. Если вам нужен больший контроль над чем-то, например, для выполнения вычислений с полученным значением в пикселях или для перехода между двумя ключевыми словами для определения размера, используйте calc-size() вместо этого.

Эксклюзив <details>

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

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

Чтобы создать эксклюзивную раскладку, добавьте атрибут name к элементам <details>. При использовании этого атрибута несколько элементов <details>, имеющих одинаковое значение имени, образуют семантическую группу. При открытии одного из элементов <details>, входящих в группу, ранее открытый элемент автоматически закроется.

<details name="learn-css">
  <summary>Welcome to Learn CSS!</summary>
  <p>…</p>
</details>
<details name="learn-css">
  <summary>Box Model</summary>
  <p>…</p>
</details>
<details name="learn-css">
  <summary>Selectors</summary>
  <p>…</p>
</details>
Эксклюзивная демо-версия Аккордеона

Настраиваемый стиль <details>

В Chrome 131 у вас появилось больше возможностей для оформления структуры элементов <details> и <summary>. Теперь вы можете использовать эти элементы при создании раскрывающихся или аккордеонных виджетов.

В частности, изменения, внесённые в Chrome 131, позволяют использовать свойство `display` для этих элементов и добавляют псевдоэлемент ::details-content для оформления расширяющейся и сворачивающейся части.

Например, чтобы создать горизонтальный аккордеон, примените к каждому элементу <details> гибкий макет, который будет располагаться в направлении строки.

details {
  display: flex;
  flex-direction: row;
}
Демонстрация: горизонтальный аккордеон

Помимо использования большего количества типов отображения, содержимое элемента <details> автоматически оборачивается в псевдоэлемент ::details-content . Все дочерние элементы элемента <details> , кроме <summary> , помещаются в этот псевдоэлемент.

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

Демонстрация: аккордеон Material UI

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

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

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

Якорь — это элемент, к которому ориентируются позиционируемые элементы. Превратите элемент в якорь с помощью одной строки CSS:

.anchor {
  anchor-name: --over-easy;
}

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

.positioned-element {
  position: fixed;
  position-anchor: --over-easy;
  position-area: block-end;
}

В следующем примере милое яйцо является якорем, а текст «Слишком просто» — позиционируемым элементом.

Свойство position-area предлагает множество вариантов! В демонстрации используется логическое значение свойства block-end, но есть также center, button и множество других вариантов. Una создала графический интерфейс, который поможет вам визуализировать варианты:

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

Пользовательские полосы прокрутки ::-webkit-scrollbar

Стилизовать полосы прокрутки уже давно можно с помощью ::-webkit-scrollbar-* псевдоэлементов. Этот подход отлично работает в Chrome и Safari, но так и не был стандартизирован рабочей группой CSS.

В Chrome 121 доступны свойства scrollbar-width и scrollbar-color для настройки ширины и, соответственно, цвета полосы прокрутки.

.scroller {
  scrollbar-color: hotpink blue;
  scrollbar-width: 10%;
}

Эти свойства также поддерживаются Firefox и частично поддерживаются Safari.

Демонстрация пользовательских полос прокрутки. Используйте поля ввода цвета для изменения цветов.

Переходы между видами документов

В 2023 году Chrome стал первым браузером, в котором появились переходы между представлениями одного документа. Это интересное дополнение к веб-платформе, которое позволяет создавать плавные переходы между различными представлениями вашего сайта. В этом году Chrome продолжил развивать веб-платформу, добавив в Chrome 126 переходы между представлениями разных документов.

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

Запись демонстрации «Stack Navigator», в которой используются переходы между документами

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

@view-transition {
  navigation: auto;
}

После включения, переходы между представлениями в разных документах используют те же строительные блоки, что и переходы между представлениями в одном документе: добавьте свойство view-transition-name к элементам, которые вы хотите отобразить, и анимация будет работать на основе CSS-анимации.

Помимо поддержки переходов между представлениями в разных документах, Chrome также добавил несколько дополнительных функций для более удобной работы с переходами между представлениями, например view-transition-class.

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

Анимация, управляемая прокруткой, является распространённым шаблоном UX в интернете. Анимация, управляемая прокруткой, связана с положением прокрутки в контейнере прокрутки. Это означает, что при прокрутке вверх или вниз связанная с ней анимация перемещается вперёд или назад в соответствии с реакцией.

В следующей демонстрации, если ваш браузер поддерживает CSS-анимацию при прокрутке, изображения будут разворачиваться по мере прокрутки. Смотреть ДЕМОНСТРАЦИЮ

События прокрутки привязки

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

Два новых события snap: scrollsnapchange и scrollsnapchanging.

scroller.addEventListener('scrollsnapchange', event=> {
    console.log(event.snapTargetBlock);
    console.log(event.snapTargetInline);
  })

Событие scrollsnapchange срабатывает в тот же момент, что и scrollend, когда прокрутка останавливается и пользователь перестаёт взаимодействовать со скроллером.

scrollsnapchangingСобытие готово к запуску и вызывает обратный вызов в тот момент, когда у скроллера появляется новая цель привязки. Это полезно для мгновенной обратной связи по UX, предоставляя механизм немедленного визуального обновления в зависимости от взаимодействия пользователя.

scroller.addEventListener('scrollsnapchanging', event=> {
    console.log(event.snapTargetBlock);
    console.log(event.snapTargetInline);
  })

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

Опыт разработчика

Наследование фона ::backdrop

Исторически сложилось так, что ::backdrop псевдоэлемент ниоткуда не наследовался. Начиная с Chrome 122, этот ::backdrop псевдоэлемент был преобразован в элемент, зависящий от дерева, что означает, что он наследует все наследуемые свойства от своего родительского элемента.

Благодаря этому изменению можно переопределять значения пользовательских свойств для определённых элементов, и ::backdrop будет иметь к ним доступ. Например, ::backdrop связанный с открытым <dialog> элементом, теперь может получить доступ к пользовательским свойствам, доступным в этом <dialog>.


light-dark()

Системные цвета в CSS могут реагировать на текущее используемое значение color-scheme . Например, если вы укажете color: CanvasText в правиле CSS, цвет соответствующих элементов будет светлым или тёмным в зависимости от значения color-scheme .

В следующем примере используйте раскрывающийся список для управления color-schemediv. Поскольку div оформлен в системных цветах, он поддерживает как светлые, так и тёмные стили.

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

Функция light-dark() предоставляет разработчикам такую же возможность. Эта функция принимает два аргумента, оба из которых должны быть <color>.

:root {
  color-scheme: light dark;
  --primary-color: light-dark(#333, #fafafa);
  --primary-background: light-dark(#e4e4e4, #121212);
  --highlight-color: light-dark(hotpink, lime);
}

При изменении значения color-scheme используется либо первое, либо второе значение light-dark() .

  • Если используемая цветовая схема light или неизвестна, то возвращается вычисленное значение первого значения.
  • Если используется цветовая схема dark, то возвращается вычисленное значение второго цвета.
ДЕМОНСТРАЦИЯ. Изменение выделенного значения приводит к изменению color-scheme значения

@property

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

@property --myColor {
  syntax: '<color>';
  inherits: false;
  initial-value: hotpink;
}

Регистрируя пользовательское свойство определённого типа, браузер знает, как интерполировать его значения при использовании в переходах и анимациях.

При анимации пользовательского свойства ваш CSS становится более лаконичным и удобным для чтения, как показано в следующем фрагменте, в котором свойство --angle анимируется от 0deg до 360deg.

@property --angle {
  syntax: '<angle>';
  initial-value: 0deg;
  inherits: false;
}

@keyframes adjust-angle {
  to {
    --angle: 360deg;
  }
}

div {
  --angle: 0deg;
  animation: 10s adjust-angle linear infinite;
  rotate: var(--angle);
}
Демонстрация с вращающейся градиентной рамкой

Всплывающий API

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

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

<button popovertarget="my-popover">Open Popover</button>

<div id="my-popover" popover>
  <p><p>I am a popover with more information. Hit <kbd>esc</kbd> or click away to close me.<p></p>
</div>
Простая всплывающая демонстрация

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

Эффекты ввода с помощью @starting-style

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

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

div {
  transition: background-color 0.5s;
  background-color: transparent;

  @starting-style {
    background-color: yellow;
  }
}

Другой вариант использования - анимация диалоговых окон при открытии.

dialog[open] {
  opacity: 1;
  transform: scaleX(1);

  @starting-style {
    opacity: 0;
    transform: scaleX(0);
  }
}

Не забудьте установить transition-behavior на allow-discrete при анимации дискретно анимируемых свойств, таких как display.

paint-order

При использовании text-stroke свойство paint-order может управлять порядком наложения или отображения заливки текста и обводки. Это может быть полезно, если вы хотите, чтобы обводка отображалась поверх заливки.

Порядок рисования по умолчанию такой: fill, stroke, затем markers.

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

CSS-код для управления этим — одна строка. Задайте paint-order для рисования обводки перед заливкой, указав эти ключевые слова в указанном порядке.

h1 {
  paint-order: stroke fill;

  color: white;
  -webkit-text-stroke: 5px black;
}

Попробуйте сами в этом CodePen:

Некоторые люди говорят, что возможность управлять paint-order наконец-то сделала text-stroke пригодным для использования в производстве. Что вы об этом думаете?

Вложенные объявления CSSOM

Чтобы исправить некоторые странные ошибки, связанные с вложенностью CSS, в спецификацию вложенности CSS был добавлен интерфейс CSSNestedDeclarations. С его помощью объявления, которые следуют за правилами стиля, больше не сдвигаются вверх.

Это означает, что следующий фрагмент CSS-кода придаёт элементу .foo цвет фона green вместо red цвета, который был бы без CSSNestedDeclarations.

.foo {
    width: fit-content;

    @media screen {
        background-color: red;
    }
    
    background-color: green;
}

С помощью CSSNestedDeclarations правило CSS преобразуется в следующее, сохраняя объявление background-color: green в исходном положении:

↳ CSSStyleRule
  .type = STYLE_RULE
  .selectorText = ".foo"
  .resolvedSelectorText = ".foo"
  .specificity = (0,1,0)
  .style (CSSStyleDeclaration, 1) =
    - width: fit-content
  .cssRules (CSSRuleList, 2) =
    ↳ CSSMediaRule
    .type = MEDIA_RULE
    .cssRules (CSSRuleList, 1) =
      ↳ CSSNestedDeclarations
        .style (CSSStyleDeclaration, 1) =
          - background-color: red
    ↳ CSSNestedDeclarations
    .style (CSSStyleDeclaration, 1) =
      - background-color: green

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

Информация, использованная в статье, взята с сайта команды разработчиков Chrome DevRel.

Более подробно о новых возможностях в CSS читайте в источнике.

Понравилась статья?
Будем признательны, если поделитесь в соцсетях или мессенджерах, а также присоединитесь к нашей группе Вконтакте. Будет интересно!

Другие статьи по теме:

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

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

HOSTCMS v.6. Боковое выпадающее меню на CSS для каталога товаров
HOSTCMS v.6. Боковое выпадающее меню на CSS для каталога товаров

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

Фоновая волна на простом CSS
Фоновая волна на простом CSS

Рассмотрим в этой статье, как сделать фоновые волны на сайте, используя только возможности CSS3 и SVG файл. Т.е. без применения Javascript.

Как анимировать текстовые градиенты и шаблоны в CSS
Как анимировать текстовые градиенты и шаблоны в CSS

В этой статье мы покажем, как легко анимировать фоновый градиент с помощью CSS.

Имитация стрелочных часов с помощью новых тригонометрических функций CSS sin() и cos ()
Имитация стрелочных часов с помощью новых тригонометрических функций CSS sin() и cos ()
Тригонометрические функции CSS есть в последних версиях Firefox и Safari. Наличие такого рода математической мощи в CSS открывает целую кучу возможностей. В этом материале мы применим пару новых функций: sin()и cos().
QRcode

2010-2025 © Веб студия iNikSite.ru (г. Подольск). Все права сохранены.

Цены на сайте носят ознакомительный характер и не являются публичной офертой! Просим уточнять цены при отправке заявки в нашу компанию. У нас действуют специальные предложения и скидки на различные варианты исполнения заказа и 100% предоплату!

Мы используем файлы cookie. Они помогают улучшить ваше взаимодействие с сайтом.