Start · Sprachen · JavaScript · Referenz · CSSVariableReferenceValue.fallback

CSSVariableReferenceValue.fallback

Eigenschaft

Nur lesbare Eigenschaft, die den Fallback-Wert einer <code>var()</code>-Referenz als <code>CSSUnparsedValue</code> liefert – oder <code>null</code>, wenn kein Fallback angegeben ist.

seit JavaScript CSS Typed OM Level 1 – Chrome/Edge 66+, Safari 16. Kategorie: webapi

Signatur

CSSVariableReferenceValue.fallback

Beschreibung

Die Eigenschaft fallback eines CSSVariableReferenceValue-Objekts steht für den zweiten, optionalen Teil eines var()-Ausdrucks im CSS Typed OM. Bei var(--akzent, rebeccapurple) liefert variable den Namen "--akzent". fallback enthält dagegen den Ersatzwert rebeccapurple, den der Browser verwendet, wenn die benutzerdefinierte Eigenschaft nicht definiert ist.

Der Wert ist kein einfacher String, sondern ein CSSUnparsedValue. Das ist eine Liste von Token-Bestandteilen, die sich wie ein Array durchlaufen lässt. Sie kann Strings und weitere, verschachtelte CSSVariableReferenceValue-Objekte enthalten, zum Beispiel bei var(--a, var(--b, blue)). Wurde kein Fallback angegeben, ist der Wert null.

Typische Einsatzfälle sind Werkzeuge, die Stylesheets oder Inline-Styles auswerten: Design-Token-Prüfer, Theme-Editoren oder Debugging-Hilfen, die zeigen sollen, auf welchen Wert eine Variable zurückfällt. Den Fallback legt man beim Erzeugen über den Konstruktor new CSSVariableReferenceValue(variable, fallback) fest.

Rückgabewert

Typ
CSSUnparsedValue | null
Beschreibung
Ein CSSUnparsedValue mit den Bestandteilen des Fallback-Werts oder null, wenn der var()-Ausdruck keinen Fallback hat.

Beispiele

Referenz mit und ohne Fallback erzeugen

// var(--akzent, rebeccapurple) nachbauen
const mitFallback = new CSSVariableReferenceValue(
  '--akzent',
  new CSSUnparsedValue(['rebeccapurple'])
);
const ohneFallback = new CSSVariableReferenceValue('--akzent');

console.log(mitFallback.variable);            // Name der Variable
console.log(mitFallback.fallback.toString()); // Fallback als Text
console.log(ohneFallback.fallback);           // kein Fallback
--akzent rebeccapurple null

Fallback aus einem Inline-Style auslesen

const box = document.createElement('div');
box.style.setProperty('color', 'var(--textfarbe, #333)');

// attributeStyleMap liefert den unaufgelösten Wert
const wert = box.attributeStyleMap.get('color'); // CSSUnparsedValue

for (const teil of wert) {
  if (teil instanceof CSSVariableReferenceValue) {
    const fb = teil.fallback;
    console.log(`${teil.variable} → Fallback: ${fb ? fb.toString().trim() : '(keiner)'}`);
  }
}
--textfarbe → Fallback: #333

Verschachtelte Fallbacks rekursiv auflösen

// Gibt die Kette aller Variablen und des letzten Ersatzwerts aus
const fallbackKette = (ref) => {
  const kette = [ref.variable];
  let aktuell = ref.fallback;
  while (aktuell) {
    const naechste = [...aktuell].find(
      (t) => t instanceof CSSVariableReferenceValue
    );
    if (!naechste) {
      kette.push(aktuell.toString().trim());
      break;
    }
    kette.push(naechste.variable);
    aktuell = naechste.fallback;
  }
  return kette;
};

const innen = new CSSVariableReferenceValue('--basis', new CSSUnparsedValue(['blue']));
const aussen = new CSSVariableReferenceValue('--primaer', new CSSUnparsedValue([innen]));

console.log(fallbackKette(aussen).join(' → '));
--primaer → --basis → blue

// Wichtig · Fallstricke

  • Nur lesbar: fallback lässt sich nach dem Erzeugen nicht neu zuweisen; im strikten Modus löst eine Zuweisung einen TypeError aus. Für einen anderen Fallback erzeugt man ein neues Objekt. Die Eigenschaft variable ist dagegen schreibbar.
  • Kein String: Der Wert ist ein CSSUnparsedValue. Für die Textdarstellung ist toString() nötig. Beim Parsen aus CSS können führende Leerzeichen erhalten bleiben (z. B. " #333"), daher ggf. trim() verwenden.
  • Immer auf null prüfen: Ohne Fallback im var()-Ausdruck ist der Wert null. Optional Chaining (ref.fallback?.toString()) verhindert Fehler.
  • computedStyleMap() hilft hier nicht: Berechnete Werte sind bereits aufgelöst und enthalten keine var()-Referenzen mehr. Unaufgelöste Werte bekommt man über element.attributeStyleMap oder CSSStyleRule.styleMap.
  • Kompatibilität: Teil des CSS Typed OM. Chromium-Browser unterstützen es seit Version 66, Safari seit 16.4. Firefox unterstützt es derzeit nicht, daher vorher prüfen, z. B. mit if ('CSSVariableReferenceValue' in window).