Spec-Zone.ru › Web APIs

Использование API свойств и значений CSS

Базовая версия 2024
Новое

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

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

API свойств и значений CSS — часть набора API CSS Houdini — позволяет регистрировать пользовательские свойства CSS, обеспечивая проверку типа свойства, значения по умолчанию и наследование значения.

Регистрация пользовательского свойства

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

Существует два способа регистрации свойства: в JavaScript или в CSS.

CSS.registerProperty

Следующее действие зарегистрирует пользовательское свойство с именем --my-prop с помощью CSS.registerProperty. --my-prop будет использовать синтаксис CSS для цвета, иметь значение по умолчанию #c0ffee, и не будет наследовать значение:

window.CSS.registerProperty({
  name: "--my-prop",
  syntax: "<color>",
  inherits: false,
  initialValue: "#c0ffee",
});

@property

Такая же регистрация может быть выполнена в CSS. Следующее действие зарегистрирует пользовательское свойство с именем --my-prop с помощью @property правила. --my-prop будет использовать синтаксис CSS для цвета, иметь значение по умолчанию #c0ffee, и не будет наследовать значение:

@property --my-prop {
  syntax: "<color>";
  inherits: false;
  initial-value: #c0ffee;
}

Использование зарегистрированных пользовательских свойств

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

В этом примере пользовательское свойство --registered было зарегистрировано с синтаксисом <color>, а затем использовано в линейном градиенте. Это свойство затем переходит в другой цвет при наведении курсора или фокусировке. Обратите внимание, что анимация работает с зарегистрированным свойством, но не с незарегистрированным!

HTML

<button class="registered">Background Registered</button>
<button class="unregistered">Background Not Registered</button>

CSS

.registered {
  --registered: #c0ffee;
  background-image: linear-gradient(to right, #fff, var(--registered));
  transition: --registered 1s ease-in-out;
}

.registered:hover,
.registered:focus {
  --registered: #b4d455;
}

.unregistered {
  --unregistered: #c0ffee;
  background-image: linear-gradient(to right, #fff, var(--unregistered));
  transition: --unregistered 1s ease-in-out;
}

.unregistered:hover,
.unregistered:focus {
  --unregistered: #b4d455;
}

button {
  height: 40vh;
  display: block;
  width: 100%;
  font-size: 3vw;
}

JavaScript

window.CSS.registerProperty({
  name: "--registered",
  syntax: "<color>",
  inherits: false,
  initialValue: "red",
});

Результат

Хотя это не совсем точное представление, хорошее понимание различий между незарегистрированным свойством в вышеуказанном примере и зарегистрированным свойством можно получить, сравнив <custom-ident> с числом при попытке анимировать height. Невозможно перейти от auto к числу, потому что браузер не знает значения auto до момента его вычисления. Аналогично, при незарегистрированном свойстве браузер не знает, какое значение может быть, до момента его вычисления, и поэтому не может задать переход от одного значения к другому. Однако при регистрации вы сообщаете браузеру, какой тип значения он должен ожидать, и зная это, он может правильно задать переходы.

Особенности

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

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

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
guide 78 79 128 65 16.4 78 128 56 16.4 12.0 78

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/CSS_Properties_and_Values_API/guide

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API