Signatur
Beschreibung
Ein CSSUnparsedValue steht im CSS Typed Object Model für einen CSS-Wert, der nicht in einen bestimmten Typ zerlegt wurde, zum Beispiel den Wert einer nicht registrierten benutzerdefinierten Eigenschaft (--foo) oder einen Wert, der var() enthält. Intern ist er eine listenähnliche Folge von Fragmenten. Jedes Fragment ist entweder ein string oder ein CSSVariableReferenceValue.
Die Eigenschaft length gibt an, wie viele Fragmente diese Liste enthält. Damit kannst du die Fragmente per Index durchlaufen (value[i]), prüfen, ob ein Wert leer ist, oder zählen, wie ein Wert aufgeteilt wurde, bevor du einzelne Teile ersetzt.
length ist schreibgeschützt. Die Liste lässt sich nicht kürzen, indem man length setzt, wie es bei Arrays geht. Neue Einträge kannst du dagegen über Indexzuweisung hinzufügen, und zwar genau an der Position length. Danach steigt der Wert entsprechend.
Rückgabewert
unsigned long) mit der Anzahl der Fragmente im CSSUnparsedValue.Beispiele
Länge eines selbst erzeugten Werts
// Entspricht in CSS etwa: 1px solid var(--rahmenfarbe)
const wert = new CSSUnparsedValue([
'1px solid ',
new CSSVariableReferenceValue('--rahmenfarbe')
]);
console.log(wert.length);
console.log(wert.toString());
Fragmente per Index durchlaufen
const wert = new CSSUnparsedValue([
'calc(',
new CSSVariableReferenceValue('--abstand'),
' * 2)'
]);
for (let i = 0; i < wert.length; i++) {
const teil = wert[i];
const art = teil instanceof CSSVariableReferenceValue
? `Variable ${teil.variable}`
: `Text "${teil}"`;
console.log(i, art);
}
Custom Property aus attributeStyleMap auslesen und erweitern
const box = document.querySelector('.box');
box.style.setProperty('--schatten', '0 0 4px var(--farbe)');
const wert = box.attributeStyleMap.get('--schatten');
if (wert instanceof CSSUnparsedValue) {
console.log('Fragmente:', wert.length);
// Ein Eintrag lässt sich nur genau an Position length anhängen
wert[wert.length] = ', inset 0 0 2px black';
console.log('Neu:', wert.length);
box.attributeStyleMap.set('--schatten', wert);
}
Leeren Wert erkennen
const leer = new CSSUnparsedValue([]);
console.log(leer.length === 0); // true
// Zuweisung wird ignoriert (im strict mode: TypeError)
leer.length = 5;
console.log(leer.length);
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung an
lengthwird im nicht strikten Modus einfach ignoriert. Im strict mode (also auch in ES-Modulen) wirft sie einenTypeError. Anders als bei Arrays kann man die Liste damit nicht kürzen. - Fragmente statt Zeichen:
lengthzählt die Fragmente, nicht die Zeichen der Zeichenkette. Wie der Browser einen Wert in Text- und Variablenteile aufteilt, kann sich im Detail unterscheiden, etwa bei Leerzeichen. Verlass dich deshalb nicht auf eine fest angenommene Anzahl. - Indexzuweisung: Nur Indizes im Bereich
0bislengthsind zulässig. Liegt der Index höher, wird einRangeErrorausgelöst. - Werte ohne
var(): Ein Wert wie--x: 10pxergibt meist ein einziges Textfragment (length === 1). - Kompatibilität: CSS Typed OM gibt es in Chromium-Browsern (ab 66) und in Safari (ab 16.4), in Firefox bisher nicht. Prüf die Unterstützung vorher, z. B. mit
if ('CSSUnparsedValue' in window).