ResizeObserverEntry: contentBoxSize-Eigenschaft

Die schreibgeschützte contentBoxSize-Eigenschaft der ResizeObserverEntry-Schnittstelle gibt ein Array zurück, das die neue Größe des Inhaltsbereichs des beobachteten Elements enthält, wenn der Rückruf ausgeführt wird.

Wert

Ein Array, das Objekte mit der neuen Größe des Inhaltsbereichs des beobachteten Elements enthält. Das Array ist notwendig, um Elemente zu unterstützen, die mehrere Fragmente haben, die in mehrspaltigen Szenarien auftreten. Jedes Objekt im Array enthält zwei Eigenschaften:

blockSize

Die Länge des Inhaltsbereichs des beobachteten Elements in der Blockdimension. Bei Boxen mit einem horizontalen writing-mode ist dies die vertikale Dimension oder Höhe; wenn das Writing-Mode vertikal ist, ist dies die horizontale Dimension oder Breite.

inlineSize

Die Länge des Inhaltsbereichs des beobachteten Elements in der Inline-Dimension. Bei Boxen mit einem horizontalen writing-mode ist dies die horizontale Dimension oder Breite; wenn das Writing-Mode vertikal ist, ist dies die vertikale Dimension oder Höhe.

Hinweis: Für weitere Erklärungen zu Schreibmodi und Block- und Inline-Dimensionen, lesen Sie Umgang mit verschiedenen Textausrichtungen.

Beispiele

Der folgende Ausschnitt stammt aus dem Beispiel resize-observer-border-radius.html (Quelltext ansehen). Dieses Beispiel enthält ein grünes Kästchen, dessen Größe prozentual zur Viewport-Größe eingestellt 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ön aussehenden ellipsenförmigen Ecken; diese Lösung bietet schöne quadratische Ecken, die mit der Größe des Kästchens skalieren.

js
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