Signatur
Beschreibung
Der Konstruktor CSSUnparsedValue() gehört zum CSS Typed Object Model (CSS Typed OM). Er erzeugt ein Objekt für einen CSS-Wert, den der Browser nicht in einen genaueren Typ wie CSSUnitValue oder CSSKeywordValue zerlegen kann. Das betrifft vor allem Werte mit var()-Verweisen und Werte von nicht registrierten Custom Properties (--name).
Ein CSSUnparsedValue besteht aus einer Liste von Segmenten. Jedes Segment ist entweder eine Zeichenkette mit rohem CSS-Text oder ein CSSVariableReferenceValue, also ein Verweis auf eine Custom Property. So kannst du Werte wie calc(var(--basis) * 2) oder 1px solid var(--farbe) strukturiert per Code aufbauen, statt Zeichenketten zusammenzufügen.
Das Objekt verhält sich wie ein Array: Du kannst es mit for...of durchlaufen, mit length die Anzahl der Segmente abfragen und über Indizes (value[0]) lesen und schreiben. Mit toString() erhältst du den fertigen CSS-Text. Das Objekt kannst du direkt an element.attributeStyleMap.set() übergeben.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $members Pflicht | Iterable<string | CSSVariableReferenceValue> | Liste der Segmente in ihrer Reihenfolge. Zeichenketten werden als roher CSS-Text übernommen, CSSVariableReferenceValue-Objekte als var()-Verweise ausgegeben. Andere Werte werden nach WebIDL-Regeln in Zeichenketten umgewandelt. |
Rückgabewert
CSSUnparsedValue-Objekt mit den übergebenen Segmenten.Beispiele
Wert mit var()-Verweis erzeugen
const rahmen = new CSSUnparsedValue([
'1px solid ',
new CSSVariableReferenceValue('--akzentfarbe')
]);
console.log(rahmen.length);
console.log(rahmen.toString());
Custom Property mit Ersatzwert per attributeStyleMap setzen
const karte = document.querySelector('.karte');
// var(--abstand, 16px) als strukturierter Wert
const abstand = new CSSUnparsedValue([
new CSSVariableReferenceValue('--abstand', new CSSUnparsedValue([' 16px']))
]);
karte.attributeStyleMap.set('--innenabstand', abstand);
console.log(karte.style.getPropertyValue('--innenabstand'));
Segmente eines gelesenen Werts auswerten
const box = document.querySelector('.box');
box.style.setProperty('--schatten', '0 2px var(--schattenfarbe)');
const wert = box.attributeStyleMap.get('--schatten');
console.log(wert instanceof CSSUnparsedValue);
for (const segment of wert) {
if (segment instanceof CSSVariableReferenceValue) {
console.log('Variable:', segment.variable);
} else {
console.log('Text:', JSON.stringify(segment));
}
}
Segment nachträglich ersetzen
const wert = new CSSUnparsedValue(['calc(', new CSSVariableReferenceValue('--basis'), ' * 2)']);
// Das Segment über den Index ersetzen
wert[1] = new CSSVariableReferenceValue('--grundgroesse');
console.log(String(wert));
// Wichtig · Fallstricke
- Browser-Unterstützung: Das CSS Typed OM gibt es in Chromium-Browsern (Chrome, Edge, Opera) ab Version 66 und in Safari ab 16.4. Firefox unterstützt es nicht. Prüfe die Verfügbarkeit mit
'CSSUnparsedValue' in windowund nutze sonststyle.setProperty()mit Zeichenketten. - Keine Syntaxprüfung: Der Konstruktor prüft Zeichenketten-Segmente nicht. Ungültiges CSS fällt erst auf, wenn der Wert angewendet wird, und auch dann meist ohne Fehlermeldung (der Wert ist dann zur Berechnungszeit ungültig).
- Leerzeichen: Die Segmente werden ohne Trennzeichen aneinandergehängt. Nötige Leerzeichen gehören daher in die Zeichenketten, etwa
'1px solid '. - Registrierte Properties: Custom Properties, die mit
CSS.registerProperty()oder@propertyregistriert wurden, liefertattributeStyleMap.get()meist als genaueren Typ zurück, etwa alsCSSUnitValue, und nicht alsCSSUnparsedValue. - Der Aufruf ohne
newoder ohne iterierbares Argument löst einenTypeErroraus.