ResizeObserverEntry: `contentBoxSize` Eigenschaft
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2020.
Die contentBoxSize
schreibgeschützte Eigenschaft der ResizeObserverEntry
-Schnittstelle gibt ein Array zurück, das die neue content box Größe des beobachteten Elements enthält, wenn der Callback ausgeführt wird.
Wert
Ein Array, das Objekte mit der neuen content box Größe des beobachteten Elements enthält. Das Array ist notwendig, um Elemente zu unterstützen, die mehrere Fragmente haben, wie es in Mehrspalten-Szenarien vorkommt. Jedes Objekt im Array enthält zwei Eigenschaften:
blockSize
-
Die Länge der content box des beobachteten Elements in der Block-Dimension. Für Boxen mit einem horizontalen
writing-mode
entspricht dies der vertikalen Dimension, also der Höhe; wenn der writing-mode vertikal ist, entspricht dies der horizontalen Dimension, also der Breite. inlineSize
-
Die Länge der content box des beobachteten Elements in der Inline-Dimension. Für Boxen mit einem horizontalen
writing-mode
entspricht dies der horizontalen Dimension, also der Breite; wenn der writing-mode vertikal ist, entspricht dies der vertikalen Dimension, also der Höhe.
Hinweis: Für eine ausführlichere Erklärung der Schreibmodi und der Block- und Inline-Dimensionen lesen Sie Different Text Directions behandeln.
Beispiele
Der folgende Codeausschnitt stammt aus dem resize-observer-border-radius.html (Quellcode ansehen) Beispiel. Dieses Beispiel enthält ein grünes Kästchen, das als Prozentsatz der Viewport-Größe dimensioniert ist. Wenn die Viewport-Größe geändert wird, ändern sich die abgerundeten Ecken des Kästchens proportional zur Größe des Kästchens. Wir könnten dies einfach mit border-radius
und einem Prozentsatz umsetzen, aber das führt schnell zu unschönen elliptischen Ecken; diese Lösung bietet Ihnen schöne quadratische Ecken, die mit der Boxgröße skalieren.
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"));
Spezifikationen
Specification |
---|
Resize Observer # dom-resizeobserverentry-contentboxsize |
Browser-Kompatibilität
BCD tables only load in the browser