Start · Sprachen · JavaScript · Referenz · StylePropertyMapReadOnly.size

StylePropertyMapReadOnly.size

Eigenschaft

Schreibgeschützte Eigenschaft, die die Anzahl der Einträge (CSS-Eigenschaften) in einem <code>StylePropertyMapReadOnly</code>-Objekt als ganze Zahl liefert.

seit JavaScript CSS Typed OM Level 1 – Chrome/Edge 66+, Safari 16. Kategorie: webapi

Signatur

StylePropertyMapReadOnly.size

Beschreibung

Die Eigenschaft size gibt an, wie viele CSS-Eigenschaften eine StylePropertyMapReadOnly enthält. Sie funktioniert wie Map.prototype.size und ist Teil der CSS Typed Object Model API (CSS Typed OM).

Eine StylePropertyMapReadOnly bekommt man meistens über element.computedStyleMap(). Diese Map enthält alle berechneten Eigenschaften eines Elements, auch Standardwerte und benutzerdefinierte Eigenschaften (--*). Deshalb ist size hier fast immer eine große Zahl im Bereich von mehreren Hundert. Die genaue Zahl hängt vom Browser und von dessen Version ab.

Bei einer beschreibbaren StylePropertyMap, etwa aus element.attributeStyleMap, zählt size nur die Eigenschaften, die tatsächlich im style-Attribut stehen. Damit können Sie leicht prüfen, ob ein Element überhaupt Inline-Stile hat, oder Diagnosewerte ausgeben.

Rückgabewert

Typ
number
Beschreibung
Eine nicht-negative ganze Zahl: die Anzahl der Einträge in der Map. Mehrfachwerte einer Eigenschaft zählen dabei als ein Eintrag.

Beispiele

Anzahl der berechneten Eigenschaften eines Elements

const button = document.querySelector('button');
const computed = button.computedStyleMap();

// Anzahl aller berechneten CSS-Eigenschaften
console.log(`Berechnete Eigenschaften: ${computed.size}`);
Berechnete Eigenschaften: 450 (Wert je nach Browser unterschiedlich)

Prüfen, ob ein Element Inline-Stile hat

const box = document.createElement('div');
console.log(box.attributeStyleMap.size); // 0

box.attributeStyleMap.set('width', CSS.px(200));
box.attributeStyleMap.set('opacity', 0.5);

const hatInlineStile = box.attributeStyleMap.size > 0;
console.log(box.attributeStyleMap.size, hatInlineStile);
0 2 true

size mit Iteration abgleichen

const el = document.body;
el.style.cssText = 'margin: 0; color: rebeccapurple; --akzent: #f60;';

const map = el.attributeStyleMap;
const namen = [...map.keys()];

console.log(map.size === namen.length); // true
console.log(namen);
true ["margin-top", "margin-right", "margin-bottom", "margin-left", "color", "--akzent"] (Reihenfolge und Aufteilung je nach Browser)

// Wichtig · Fallstricke

  • Browser-Kompatibilität: CSS Typed OM gibt es in Chromium-Browsern ab Version 66 und in Safari ab 16.4. In Firefox ist es bisher nicht allgemein verfügbar. Prüfen Sie die Unterstützung vorher, zum Beispiel mit if ('computedStyleMap' in Element.prototype).
  • Bei computedStyleMap() hängt size vom Browser ab. Die Zahl ändert sich, wenn neue CSS-Eigenschaften unterstützt werden. Verwenden Sie diesen Wert deshalb nicht in Tests oder in Programmlogik.
  • Kurzschreibweisen wie margin werden oft in Einzel-Eigenschaften aufgeteilt, zum Beispiel margin-top. Dadurch kann size größer sein, als man nach dem Quelltext erwarten würde.
  • size ist schreibgeschützt. Eine Zuweisung wird ignoriert und löst im Strict Mode einen TypeError aus.
  • Die Map ist live: Ändert sich der Stil, ändert sich auch size. Wenn Sie den Wert später noch brauchen, speichern Sie ihn in einer Variablen.