Главная / Блог / 2024 год стал еще одним удивительным годом для CSS!
2024 год стал еще одним удивительным годом для CSS!
MasterNik / 19 декабря 2024 г. / 537 / Время чтения
Переходы между документами и анимация при прокрутке позволяют добавить больше интерактивности в ваши приложения с помощью нескольких строк 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 и мы ответим в самое ближайшее время.
Понравилась статья?
Будем признательны, если поделитесь в соцсетях или мессенджерах, а также присоединитесь к нашей группе Вконтакте. Будет интересно!
Обычное поле Поиска по сайту можно оформить более оригинально, чем просто инпут с лупой. Например, благодаря анимационным эффектам на CSS3 поле для ввода поисковой фразы можно скрыть, чтобы освободить место для другого контента...
Это вопрос задают довольно часто: Можно ли создавать тени из градиентов вместо сплошных цветов? Нет конкретного свойства CSS, которое делает это, и любая информация, которую вы найдёте об этом, в основном представляет собой множество приемов CSS для аппроксимации градиента. Мы на самом деле рассмотрим некоторые из них по ходу дела.
Создание эффектов наведения ссылок CSS может добавить немного изюминки на скучную веб-страницу. Если вы когда-либо оказывались в тупике, пытаясь создать эффект плавного наведения, у меня есть шесть CSS-эффектов, которые вы можете взять и использовать для своего следующего проекта.
Наша информация будет интересна тем, кто только начинает изучать и применять теги HTML5 при создании своих первых сайтов, а также в качестве справочной информации и для более опытных верстальщиков, чтобы не забывали.
CSS 2024 демонстрирует 17 революционных обновлений, которые повышают эффективность веб-разработки благодаря расширенным возможностям компоновки, более плавной анимации и улучшенному взаимодействию с пользователем. Эти функции позволяют разработчикам создавать более динамичные, доступные и визуально привлекательные веб-сайты, чем когда-либо прежде.
Мы используем файлы cookie и другие аналитичекие данные. Они помогают нам улучшить ваше взаимодействие с сайтом. Оставаясь на сайте, вы даете согласие на обработку пользовательских данных. Положение об использовании cookie