will-change
Базовая линия Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с января 2020 года.
Свойство will-change CSS подсказывает браузерам, как ожидается изменение элемента. Браузеры могут настроить оптимизации перед фактическим изменением элемента. Эти виды оптимизаций могут повысить отзывчивость страницы, выполнив потенциально дорогостоящую работу до того, как она фактически потребуется.
Предупреждение: will-change предназначено для использования в качестве крайней меры, чтобы попытаться справиться с существующими проблемами производительности. Его не следует использовать для прогнозирования проблем с производительностью.
Правильное использование этого свойства может быть немного сложным:
-
Не применяйте will-change к слишком многим элементам. Браузер уже делает все возможное для оптимизации всего. Некоторые из более мощных оптимизаций, которые, вероятно, связаны с
will-change, в конечном счёте используют много ресурсов машины, а при чрезмерном использовании могут привести к замедлению работы страницы или потреблению большого количества ресурсов. -
Используйте экономно. Нормальное поведение для оптимизаций, которые выполняет браузер, — это удаление оптимизаций, как только он может, и возврат к обычному состоянию. Но добавление
will-changeнепосредственно в таблицу стилей подразумевает, что целевые элементы всегда находятся в ожидании изменения, и браузер будет сохранять оптимизации в течение гораздо более длительного времени, чем в противном случае. Поэтому рекомендуется включатьwill-changeи выключать с помощью кода скрипта до и после изменения. -
Не применяйте will-change к элементам для выполнения преждевременной оптимизации. Если ваша страница работает хорошо, не добавляйте свойство
will-changeк элементам только для того, чтобы извлечь немного больше скорости.will-changeпредназначено для использования в качестве крайней меры, чтобы попытаться справиться с существующими проблемами производительности. Его не следует использовать для прогнозирования проблем с производительностью. Чрезмерное использованиеwill-changeприведёт к чрезмерному использованию памяти и вызову более сложного рендеринга, поскольку браузер пытается подготовиться к возможному изменению. Это приведёт к ухудшению производительности. -
Позвольте ему достаточно времени, чтобы поработать. Это свойство предназначено как способ для авторов сообщить пользовательскому агенту о свойствах, которые, вероятно, изменятся заранее. Затем браузер может применить необходимые оптимизации, предваряющие изменение, до того, как оно фактически произойдёт. Поэтому важно дать браузеру время, чтобы фактически выполнить оптимизации. Найдите способ предсказать, что что-то изменится хотя бы немного заранее, и установите
will-changeтогда. - Следует помнить, что will-change может фактически влиять на визуальный вид элементов, когда используется с значениями свойств, создающими контекст стекирования (например, will-change: opacity), так как контекст стекирования создаётся заранее.
Синтаксис
/* Keyword values */ will-change: auto; will-change: scroll-position; will-change: contents; will-change: transform; /* Example of <custom-ident> */ will-change: opacity; /* Example of <custom-ident> */ will-change: left, top; /* Example of two <animatable-feature> */ /* Global values */ will-change: inherit; will-change: initial; will-change: revert; will-change: revert-layer; will-change: unset;
Значения
auto-
Это ключевое слово не выражает никакого конкретного намерения; пользовательский агент должен применить любые эвристики и оптимизации, которые он обычно применяет.
Значение <animatable-feature> может быть одним из следующих значений:
scroll-position-
Указывает, что автор ожидает анимировать или изменить положение прокрутки элемента в ближайшем будущем.
contents-
Указывает, что автор ожидает анимировать или изменить что-либо в содержимом элемента в ближайшем будущем.
<custom-ident>-
Указывает, что автор ожидает анимировать или изменить свойство с заданным именем на элементе в ближайшем будущем. Если заданное свойство является сокращённым, оно указывает ожидание всех расширенных сокращённых свойств. Оно не может быть одним из следующих значений:
unset,initial,inherit,will-change,auto,scroll-position, илиcontents. Спецификация не определяет поведение конкретного значения, но частоtransformявляется подсказкой для композиционного слоя. Chrome в данный момент выполняет два действия, учитывая конкретные идентификаторы свойств CSS: создание нового композиционного слоя или нового контекста стекирования.
Через таблицу стилей
Возможно, будет уместно включить will-change в вашу таблицу стилей для приложения, которое выполняет перелистывание страниц при нажатии клавиш, как альбом или презентация слайдов, где страницы большие и сложные. Это позволит браузеру подготовить переход заранее и позволит выполнить быстрые переходы между страницами сразу после нажатия клавиши. Но будьте осторожны при использовании свойства will-change непосредственно в таблице стилей. Это может заставить браузер сохранять оптимизацию в памяти гораздо дольше, чем это необходимо.
.slide {
will-change: transform;
}
Формальное определение
| Начальное значение | auto |
|---|---|
| Применяется к | всем элементам |
| Наследуется | нет |
| Вычисленное значение | как указано |
| Тип анимации | дискретный |
Формальный синтаксис
will-change =
auto |
<animateable-feature>#
<animateable-feature> =
scroll-position |
contents |
<custom-ident>
Примеры
Через скрипт
Это пример, показывающий, как применить свойство will-change через скриптинг, что, вероятно, является тем, что вы должны делать в большинстве случаев.
const el = document.getElementById("element");
// Set will-change when the element is hovered
el.addEventListener("mouseenter", hintBrowser);
el.addEventListener("animationEnd", removeHint);
function hintBrowser() {
// The optimizable properties that are going to change
// in the animation's keyframes block
this.style.willChange = "transform, opacity";
}
function removeHint() {
this.style.willChange = "auto";
}
Спецификации
| Спецификация |
|---|
| CSS Will Change Модуль уровня 1 # will-change |
Совместимость с браузерами
| Рабочий стол | Мобильный | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
will-change |
36 | 79 | 36 | 23 | 9.1 | 36 | 36 | 24 | 9.3 | 3.0 | 37 |
auto |
36 | 79 | 36 | 23 | 9.1 | 36 | 36 | 24 | 9.3 | 3.0 | 37 |
contents |
36 | 79 | 36 | 23 | 9.1 | 36 | 36 | 24 | 9.3 | 3.0 | 37 |
scroll-position |
36 | 79 | 36 | 23 | 9.1 | 36 | 36 | 24 | 9.3 | 3.0 | 37 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/will-change