ResizeObserverEntry: свойство contentBoxSize
Базовая линия Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузера. Она доступна в браузерах с июля 2020 года.
Только для чтения contentBoxSize свойство интерфейса ResizeObserverEntry возвращает массив, содержащий новые размеры области содержимого наблюдаемого элемента, когда выполняется обратный вызов.
Значение
Массив, содержащий объекты с новыми размерами области содержимого наблюдаемого элемента. Массив необходим для поддержки элементов, имеющих несколько фрагментов, что встречается в многоколоночных сценариях. Каждый объект в массиве содержит два свойства:
blockSize-
Длина области содержимого наблюдаемого элемента в блочном измерении. Для блоков с горизонтальным
writing-modeэто вертикальное измерение, или высота; если режим написания вертикальный, это горизонтальное измерение или ширина. inlineSize-
Длина области содержимого наблюдаемого элемента в линейном измерении. Для блоков с горизонтальным
writing-modeэто горизонтальное измерение, или ширина; если режим написания вертикальный, это вертикальное измерение или высота.
Примечание: Для получения дополнительной информации о режимах написания и блочных и линейных измерениях, прочитайте Обработка различных направлений текста.
Примеры
Следующий фрагмент взят из примера resize-observer-border-radius.html (посмотреть исходный код). Этот пример включает зелёный прямоугольник, размер которого задаётся в процентах от размера области просмотра. При изменении размера области просмотра закругленные углы прямоугольника изменяются пропорционально размеру прямоугольника. Мы могли бы просто реализовать это с помощью border-radius со значением в процентах, но это быстро приводит к некрасивым эллиптическим углам; это решение даёт вам красивые квадратные углы, которые масштабируются вместе с размером прямоугольника.
const resizeObserver = new ResizeObserver((entries) => {
for (let entry of entries) {
if (entry.contentBoxSize) {
// The standard makes contentBoxSize an array...
if (entry.contentBoxSize[0]) {
entry.target.style.borderRadius =
Math.min(
100,
entry.contentBoxSize[0].inlineSize / 10 +
entry.contentBoxSize[0].blockSize / 10,
) + "px";
} else {
// ...but old versions of Firefox treat it as a single item
entry.target.style.borderRadius =
Math.min(
100,
entry.contentBoxSize.inlineSize / 10 +
entry.contentBoxSize.blockSize / 10,
) + "px";
}
} else {
entry.target.style.borderRadius =
Math.min(
100,
entry.contentRect.width / 10 + entry.contentRect.height / 10,
) + "px";
}
}
});
resizeObserver.observe(document.querySelector("div"));
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
contentBoxSize |
84 | 84 | 9269–92Реализовано как единый объект, представляющий размер области содержимого, а не массив объектов размеров области содержимого. |
70 | 15.4 | 84 | 9279–92Реализовано как единый объект, представляющий размер области содержимого, а не массив объектов размеров области содержимого. |
60 | 15.4 | 14.0 | 84 |
© 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/ResizeObserverEntry/contentBoxSize