Signatur
Beschreibung
CSSStyleValue ist die gemeinsame Oberklasse aller Wertobjekte der CSS Typed OM API. Liest man Styles über element.computedStyleMap() oder element.attributeStyleMap, erhält man keine Zeichenketten wie bei getComputedStyle(), sondern Instanzen spezialisierter Unterklassen: CSSNumericValue bzw. CSSUnitValue für Zahlen mit Einheit, CSSKeywordValue für Schlüsselwörter wie auto, CSSTransformValue für Transformationen, CSSImageValue für Bilder und CSSUnparsedValue für Werte mit Custom Properties (var()).
Direkt instanziieren lässt sich CSSStyleValue nicht. Der Konstruktor wirft einen TypeError. Nützlich sind vor allem die beiden statischen Methoden:
CSSStyleValue.parse(property, cssText)wandelt einen CSS-Text für eine bestimmte Eigenschaft in das passende typisierte Objekt um und gibt den ersten Wert zurück.CSSStyleValue.parseAll(property, cssText)gibt bei Listen-Eigenschaften wietransitionoderbackground-imagealle Werte als Array zurück.
Jede Instanz hat außerdem die Methode toString(), die den Wert wieder als gültigen CSS-Text serialisiert. Typed OM lohnt sich vor allem, wenn man häufig Styles per Skript liest oder schreibt, etwa bei Animationen oder in CSS-Houdini-Worklets. Man spart sich das fehleranfällige Zerlegen und Zusammensetzen von Zeichenketten, und der Browser muss weniger parsen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $property Pflicht | string | Parameter von parse()/parseAll(): Name der CSS-Eigenschaft, für die geparst werden soll, z. B. "width", "transform" oder eine Custom Property wie "--abstand". |
|
| $cssText Pflicht | string | Parameter von parse()/parseAll(): der zu parsende CSS-Wert als Zeichenkette, z. B. "calc(100% - 2rem)". |
Rückgabewert
parse() gibt eine Instanz der passenden Unterklasse zurück (z. B. CSSUnitValue, CSSMathSum, CSSKeywordValue). parseAll() gibt ein Array solcher Instanzen zurück. Ist der Text für die Eigenschaft ungültig, wird ein TypeError geworfen.Beispiele
CSS-Text mit parse() in typisierte Werte umwandeln
const breite = CSSStyleValue.parse('width', 'calc(100% - 2rem)');
console.log(breite.constructor.name);
console.log(breite instanceof CSSStyleValue);
console.log(breite.toString());
const transform = CSSStyleValue.parse('transform', 'translateX(10px) rotate(45deg)');
console.log(transform.constructor.name, transform.length);
Listen-Eigenschaften mit parseAll() zerlegen
const werte = CSSStyleValue.parseAll(
'transition-duration',
'200ms, 1s, 0.5s'
);
const inSekunden = werte.map((v) => v.to('s').value);
console.log(inSekunden);
Geparsten Wert in attributeStyleMap setzen und Typ prüfen
const box = document.querySelector('.box');
// Wert parsen und als Inline-Style setzen
box.attributeStyleMap.set('margin-top', CSSStyleValue.parse('margin-top', '1.5em'));
// Berechneten Wert auslesen und nach Unterklasse unterscheiden
const wert = box.computedStyleMap().get('margin-top');
if (wert instanceof CSSUnitValue) {
console.log(`${wert.value} ${wert.unit}`); // Pixel nach Berechnung
} else if (wert instanceof CSSKeywordValue) {
console.log('Schlüsselwort:', wert.value);
}
Ungültige Eingaben und Feature-Erkennung abfangen
const sicherParsen = (prop, text) => {
if (!('CSSStyleValue' in window)) return null; // z. B. Firefox
try {
return CSSStyleValue.parse(prop, text);
} catch (err) {
console.warn(`Ungültig für ${prop}:`, text, err.name);
return null;
}
};
sicherParsen('width', 'blau');
try {
new CSSStyleValue();
} catch (err) {
console.log(err.name);
}
// Wichtig · Fallstricke
- Browser-Unterstützung: Chromium-basierte Browser unterstützen die Typed OM seit Version 66, Safari ab 16.4. Firefox unterstützt sie bisher nicht. Deshalb vorher per Feature-Erkennung prüfen, etwa mit
'CSSStyleValue' in windowoder'attributeStyleMap' in HTMLElement.prototype, und aufelement.stylebzw.getComputedStyle()zurückfallen. - Keine direkte Instanziierung:
new CSSStyleValue()wirft einenTypeError. Einzelne Werte erzeugt man mit Unterklassen-Konstruktoren wienew CSSKeywordValue('auto'), mit Fabrikfunktionen wieCSS.px(10)oder mitparse(). - Werte sind an eine Eigenschaft gebunden: Ein Wert, der mit
parse()für eine Listen-Eigenschaft erzeugt wurde, lässt sich nicht beliebig bei einer anderen Eigenschaft einsetzen.attributeStyleMap.set()kann dann einenTypeErrorwerfen. - Werte mit
var()werden alsCSSUnparsedValuegeliefert. Sie sind nicht typisiert und lassen sich nicht umrechnen. parse()gibt bei Listen nur den ersten Wert zurück. Für alle WerteparseAll()verwenden.- Berechnete Werte aus
computedStyleMap()sind aufgelöst: Ausemoder%werden oftpx. Das entspricht dem Verhalten vongetComputedStyle().