Главная / Блог / 2024 год стал еще одним удивительным годом для CSS!
2024 год стал еще одним удивительным годом для CSS!
MasterNik / 19 декабря 2024 г. / 253 / Время чтения
Переходы между документами и анимация при прокрутке позволяют добавить больше интерактивности в ваши приложения с помощью нескольких строк 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>, входящих в группу, ранее открытый элемент автоматически закроется.
В 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, чтобы указать сторону или область, в которой они должны быть расположены.
В следующем примере милое яйцо является якорем, а текст «Слишком просто» — позиционируемым элементом.
Свойствоposition-areaпредлагает множество вариантов! В демонстрации используется логическое значение свойстваblock-end, но есть такжеcenter,buttonи множество других вариантов. Una создала графический интерфейс, который поможет вам визуализировать варианты:
Взаимодействия
Пользовательские полосы прокрутки ::-webkit-scrollbar
Стилизовать полосы прокрутки уже давно можно с помощью::-webkit-scrollbar-*псевдоэлементов. Этот подход отлично работает в Chrome и Safari, но так и не был стандартизирован рабочей группой CSS.
В Chrome 121 доступны свойстваscrollbar-widthиscrollbar-colorдля настройки ширины и, соответственно, цвета полосы прокрутки.
Эти свойства также поддерживаются 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.
Событиеscrollsnapchangeсрабатывает в тот же момент, что и scrollend, когда прокрутка останавливается и пользователь перестаёт взаимодействовать со скроллером.
scrollsnapchangingСобытие готово к запуску и вызывает обратный вызов в тот момент, когда у скроллера появляется новая цель привязки. Это полезно для мгновенной обратной связи по UX, предоставляя механизм немедленного визуального обновления в зависимости от взаимодействия пользователя.
Объединив эти события, вы сможете создать удобный интерфейс для выбора элементов с помощью жеста прокрутки. Следующая линейка отмеряет значения в четвертях дюйма и используетанимацию при прокруткедля выделения выбранного значения. Событие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>.
При изменении значенияcolor-schemeиспользуется либо первое, либо второе значениеlight-dark().
Если используемая цветовая схемаlightили неизвестна, то возвращается вычисленное значение первого значения.
Если используется цветовая схемаdark, то возвращается вычисленное значение второго цвета.
ДЕМОНСТРАЦИЯ. Изменение выделенного значения приводит к изменению color-scheme значения
@property
2024 год ознаменовался тем, что@propertyнаконец-то сталбазовым, доступным с самого начала. Поддержка@propertyв разных браузерах — это очень важная веха, поскольку с помощью@propertyи егоCSS.registerPropertyаналога вы можете регистрировать пользовательские свойства определённого типа, управлять их наследованием и задавать им начальное значение.
Регистрируя пользовательское свойство определённого типа, браузер знает, как интерполировать его значения при использовании в переходах и анимациях.
При анимации пользовательского свойства ваш CSS становится более лаконичным и удобным для чтения, как показано в следующем фрагменте, в котором свойство--angleанимируется от0degдо360deg.
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до исходного цвета фона, который является прозрачным.
Не забудьте установитьtransition-behaviorнаallow-discreteпри анимации дискретно анимируемых свойств, таких какdisplay.
paint-order
При использованииtext-strokeсвойствоpaint-orderможет управлять порядком наложения или отображения заливки текста и обводки. Это может быть полезно, если вы хотите, чтобы обводка отображалась поверх заливки.
Порядок рисования по умолчанию такой:fill,stroke, затемmarkers.
На следующем видео показано, что результат обводки текста нежелателен, если текст сначала заливается белым цветом, а затем обводится чёрным. Если сначала обвести текст, а затем залить его, результат будет намного лучше!
CSS-код для управления этим — одна строка. Задайтеpaint-orderдля рисования обводки перед заливкой, указав эти ключевые слова в указанном порядке.
Некоторые люди говорят, что возможность управлятьpaint-orderнаконец-то сделалаtext-strokeпригодным для использования в производстве. Что вы об этом думаете?
Вложенные объявления CSSOM
Чтобы исправить некоторые странные ошибки, связанные с вложенностью CSS, в спецификацию вложенности CSS был добавлен интерфейсCSSNestedDeclarations. С его помощью объявления, которые следуют за правилами стиля, больше не сдвигаются вверх.
Это означает, что следующий фрагмент CSS-кода придаёт элементу.fooцвет фонаgreenвместоredцвета, который был бы безCSSNestedDeclarations.
Если у вас есть вопросы по статье или нужна помощь в создании сайта, пишите нам в чат на сайте или Вконтакте. Не забудьте оставить свой e-mail и мы ответим в самое ближайшее время.
Понравилась статья?
Будем признательны, если поделитесь в соцсетях или мессенджерах, а также присоединитесь к нашей группе Вконтакте. Будет интересно!
Откройте для себя прокручиваемый холст, на котором элементы перемещаются с изяществом — добро пожаловать в искусство параллакса CSS.
В наше время статичные страницы на сайте уже недостаточны. Пользователи жаждут глубины, взаимодействия; сцена, в которой фон и содержание вальсируют в разном темпе...
Такие указатели чаще всего применяют на первом экране Главной страницы сайта, когда на ней размещена полноэкранная картинка, видео или слайдер. Чтобы показать Пользователю, что основной контент расположен ниже, в нижней части экрана размещают стрелку, направленную вниз. Чтобы привлечь к ней дополнительное внимание, её делаю анимационный...
Обычное поле Поиска по сайту можно оформить более оригинально, чем просто инпут с лупой. Например, благодаря анимационным эффектам на CSS3 поле для ввода поисковой фразы можно скрыть, чтобы освободить место для другого контента...
Хотим поделиться с вами несколькими CSS трюками, которые вам точно пригодятся при создании сайтов. Они позволят вам без использования Javascript создать анимацию и эффекты.