Signatur
Beschreibung
Die Eigenschaft values gehört zur Schnittstelle CSSMathMax aus dem CSS Typed Object Model (CSS Typed OM). Ein CSSMathMax-Objekt steht für die CSS-Funktion max(). Über values kommst du an die einzelnen Argumente. Aus diesen Werten wählt der Browser beim Berechnen des Stils den größten aus.
Du bekommst ein CSSNumericArray zurück. Das ist ein listenähnliches, iterierbares Objekt mit length und Zugriff über den Index (values[0]). Jedes Element ist ein CSSNumericValue. Das kann ein einfacher CSSUnitValue wie 10px sein oder ein verschachtelter Rechenausdruck wie CSSMathSum, CSSMathMin und Ähnliches.
Gebraucht wird values vor allem, wenn du max()-Ausdrücke im Code untersuchen oder umbauen willst. Beispiele sind Werkzeuge für Stil-Analysen, Polyfills, Houdini-Worklets oder das Auslesen von Werten über element.attributeStyleMap bzw. CSSNumericValue.parse(). Die Eigenschaft ist schreibgeschützt. Um die Argumente zu ändern, erzeugst du ein neues CSSMathMax-Objekt.
Rückgabewert
CSSNumericArray mit den CSSNumericValue-Objekten, die an max() übergeben wurden. Die Reihenfolge entspricht der ursprünglichen Reihenfolge.Beispiele
CSSMathMax erzeugen und Argumente auslesen
// entspricht max(100px, 50vw)
const max = new CSSMathMax(CSS.px(100), CSS.vw(50));
console.log(max.operator); // "max"
console.log(max.values.length); // Anzahl der Argumente
for (const v of max.values) {
console.log(v.toString(), v.unit);
}
max()-Ausdruck aus einem String parsen und untersuchen
const parsed = CSSNumericValue.parse('max(10px, 5em)');
if (parsed instanceof CSSMathMax) {
// CSSNumericArray per Spread in ein echtes Array umwandeln
const units = [...parsed.values].map((v) => v.unit);
console.log(units);
}
Verschachtelte Ausdrücke erkennen
const expr = new CSSMathMax(
CSS.px(10),
new CSSMathSum(CSS.em(1), CSS.px(5))
);
const [first, second] = expr.values;
console.log(first instanceof CSSUnitValue); // true
console.log(second.operator); // "sum"
console.log(second.values.length); // 2
Argumente ergänzen – neues Objekt statt Mutation
const el = document.querySelector('.card');
const base = new CSSMathMax(CSS.px(200), CSS.percent(30));
// values ist schreibgeschützt: neuen Ausdruck mit zusätzlichem Argument erzeugen
const extended = new CSSMathMax(...base.values, CSS.rem(12));
el.attributeStyleMap.set('width', extended);
console.log(extended.toString());
// Wichtig · Fallstricke
- Browser-Unterstützung: CSS Typed OM gibt es in Chromium-basierten Browsern (Chrome und Edge ab Version 66) und in Safari ab 16.4. Firefox unterstützt
CSSMathMaxbisher nicht. Prüfe deshalb vorher, ob die Schnittstelle vorhanden ist:if ('CSSMathMax' in window) { … }. valuesist schreibgeschützt, und auch das zurückgegebeneCSSNumericArraylässt sich nicht verändern. Zuweisungen wiemax.values[0] = CSS.px(5)haben keine Wirkung.CSSNumericArrayist kein echtesArray. Methoden wiemap()oderfilter()fehlen. Wandle es vorher mit[...values]oderArray.from(values)um.- Die Elemente können selbst Rechenausdrücke sein, z. B.
CSSMathSumoderCSSMathMin. Wenn du die Argumente rekursiv verarbeitest, prüfe den Typ mitinstanceofoder überoperator. - Die Argumente müssen zueinander passende Typen haben (z. B. nur Längen). Gemischte Typen wie
CSS.px(1)zusammen mitCSS.s(1)führen schon im Konstruktor zu einemTypeError. valuesenthält die angegebenen Argumente, nicht das Ergebnis. Den tatsächlich berechneten Wert bekommst du überelement.computedStyleMap().