Signatur
Beschreibung
CSSNumericArray ist ein nur lesbarer, arrayähnlicher Container aus dem CSS Typed OM. Er enthält die Operanden (CSSNumericValue-Objekte) eines mathematischen CSS-Ausdrucks und ist über die Eigenschaft values von CSSMathSum, CSSMathProduct, CSSMathMin und CSSMathMax erreichbar.
entries() gibt einen Iterator zurück, der nacheinander Paare aus Index und Wert liefert. Das ist nützlich, wenn man beim Durchlaufen eines calc()-, min()- oder max()-Ausdrucks sowohl die Position als auch den Operanden selbst braucht, etwa zur Analyse, Fehlersuche oder Umwandlung von Stilwerten.
Die Methode verhält sich wie Array.prototype.entries(): Der Iterator lässt sich mit for...of und Destrukturierung durchlaufen oder mit Array.from() bzw. dem Spread-Operator in ein echtes Array umwandeln. Da CSSNumericArray kein echtes Array ist, stehen Methoden wie map() oder filter() nicht direkt zur Verfügung.
Rückgabewert
[index, value] liefert. index ist die Position (ab 0), value der jeweilige CSSNumericValue.Beispiele
Operanden einer CSSMathSum mit Index ausgeben
const sum = new CSSMathSum(CSS.px(10), CSS.percent(50), CSS.em(2));
for (const [index, value] of sum.values.entries()) {
console.log(index, value.toString());
}
Geparsten calc()-Ausdruck analysieren
const width = CSSStyleValue.parse('width', 'calc(100% - 20px)');
if (width instanceof CSSMathSum) {
for (const [i, operand] of width.values.entries()) {
console.log(`Operand ${i}: ${operand.constructor.name}`);
}
}
Einträge in ein echtes Array umwandeln
const box = document.querySelector('.box');
box.attributeStyleMap.set('padding-left', 'max(1rem, 5vw, 12px)');
const value = box.attributeStyleMap.get('padding-left');
if (value instanceof CSSMathMax) {
const list = Array.from(value.values.entries(), ([i, v]) => `${i}=${v}`);
console.log(list);
}
// Wichtig · Fallstricke
- Browser-Kompatibilität: Das CSS Typed OM wird von Chromium-Browsern (Chrome, Edge, Opera) und Safari ab 16.4 unterstützt, von Firefox bislang nicht. Vor der Nutzung per Feature-Erkennung prüfen, z. B.
'CSSNumericArray' in window. CSSNumericArrayist nur lesbar – Operanden lassen sich nicht über den Iterator verändern. Für geänderte Werte muss ein neuesCSSMathSumusw. erzeugt werden.- Der Browser kann Ausdrücke beim Parsen vereinfachen oder umstrukturieren (z. B. wird Subtraktion zu
CSSMathSummitCSSMathNegate, Division zuCSSMathProductmitCSSMathInvert). Die Reihenfolge und Art der Einträge entspricht daher nicht zwingend dem Quelltext. - Einfache Werte wie
10pxsindCSSUnitValueund besitzen keinevalues-Eigenschaft – vorher mitinstanceof CSSMathValueprüfen. - Der Iterator ist nach einmaligem Durchlauf erschöpft; für einen erneuten Durchlauf
entries()nochmals aufrufen.