Start · Sprachen · JavaScript · Referenz · CSSFontPaletteValuesRule.basePalette

CSSFontPaletteValuesRule.basePalette

Eigenschaft

Liefert als schreibgeschützten String den Wert des <code>base-palette</code>-Deskriptors einer <code>@font-palette-values</code>-Regel oder einen leeren String, wenn er fehlt.

seit JavaScript Baseline 2022: Chrome 101, Edge 101, Firefox 107, Kategorie: webapi

Signatur

CSSFontPaletteValuesRule.basePalette

Beschreibung

Die schreibgeschützte Eigenschaft basePalette gehört zur Schnittstelle CSSFontPaletteValuesRule. Diese Schnittstelle steht für eine @font-palette-values-At-Regel im CSS-Objektmodell (CSSOM). Die Eigenschaft liefert den Wert des Deskriptors base-palette als String. Dieser Deskriptor legt fest, welche der in einer Farbschriftart (z. B. COLRv0/COLRv1 oder CPAL) eingebauten Paletten als Ausgangspunkt dient. Einzelne Farben daraus lassen sich anschließend mit override-colors überschreiben.

Mögliche Werte sind ein nullbasierter Index wie "0" oder "2" sowie die Schlüsselwörter "light" und "dark". Mit diesen wählt der Browser die Palette, die in der Schriftart als geeignet für helle bzw. dunkle Hintergründe markiert ist. Fehlt der Deskriptor in der Regel, ist der Rückgabewert ein leerer String. In diesem Fall verwendet der Browser die Standardpalette der Schriftart (Index 0).

Praktisch nützlich ist die Eigenschaft vor allem, um Stylesheets zur Laufzeit zu untersuchen. Beispiele: Paletten-Definitionen in Entwicklerwerkzeugen anzeigen, Theme-Umschalter mit den definierten Paletten abgleichen oder prüfen, ob eine Regel eine bestimmte Basis-Palette verwendet. Zum Ändern der Palette muss man die Regel ersetzen, zum Beispiel mit deleteRule() und insertRule(). Alternativ setzt man per font-palette eine andere Regel am Element.

Rückgabewert

Typ
string
Beschreibung
Der Wert des base-palette-Deskriptors, z. B. "1", "light" oder "dark". Ist der Deskriptor nicht gesetzt, wird ein leerer String "" zurückgegeben.

Beispiele

Basis-Palette einer Regel auslesen

// CSS im Dokument:
// @font-palette-values --festlich {
//   font-family: "Bungee Spice";
//   base-palette: 2;
//   override-colors: 0 crimson;
// }

const rule = [...document.styleSheets[0].cssRules]
  .find((r) => r instanceof CSSFontPaletteValuesRule);

console.log(rule.name);        // Name der Palette
console.log(rule.basePalette); // gewählte Basis-Palette
--festlich 2

Alle Paletten-Regeln eines Stylesheets auflisten

const sheet = new CSSStyleSheet();
sheet.replaceSync(`
  @font-palette-values --hell { font-family: "Nabla"; base-palette: light; }
  @font-palette-values --dunkel { font-family: "Nabla"; base-palette: dark; }
  @font-palette-values --standard { font-family: "Nabla"; }
`);

const paletten = [...sheet.cssRules]
  .filter((r) => r instanceof CSSFontPaletteValuesRule)
  .map((r) => ({ name: r.name, basis: r.basePalette || "(Standard)" }));

console.table(paletten);
┌─────────┬──────────────┬──────────────┐ │ (index) │ name │ basis │ ├─────────┼──────────────┼──────────────┤ │ 0 │ '--hell' │ 'light' │ │ 1 │ '--dunkel' │ 'dark' │ │ 2 │ '--standard' │ '(Standard)' │ └─────────┴──────────────┴──────────────┘

Passende Palette zum Farbschema wählen

const sheet = new CSSStyleSheet();
sheet.replaceSync(`
  @font-palette-values --hell { font-family: "Nabla"; base-palette: light; }
  @font-palette-values --dunkel { font-family: "Nabla"; base-palette: dark; }
`);
document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];

const istDunkel = matchMedia("(prefers-color-scheme: dark)").matches;
const gesucht = istDunkel ? "dark" : "light";

const regel = [...sheet.cssRules].find(
  (r) => r instanceof CSSFontPaletteValuesRule && r.basePalette === gesucht
);

if (regel) {
  document.querySelector("h1").style.fontPalette = regel.name;
  console.log(`Palette ${regel.name} aktiviert`);
}
Palette --hell aktiviert

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung an basePalette wird ignoriert und löst im Strict Mode einen TypeError aus. Soll sich die Palette ändern, muss man die Regel neu einfügen.
  • Rückgabe ist immer ein String: Auch ein Index kommt als "2" und nicht als Zahl zurück. Für Vergleiche vorher mit Number() umwandeln oder direkt mit Strings vergleichen.
  • Leerer String: Fehlt base-palette, liefert die Eigenschaft "" statt "0", obwohl der Browser dann Palette 0 verwendet.
  • Ungültige Indizes: Gibt es den angegebenen Index in der Schriftart nicht, fällt der Browser auf Palette 0 zurück. basePalette gibt trotzdem den notierten Wert zurück, denn geprüft wird dabei nicht gegen die Schriftdatei.
  • Kompatibilität: Unterstützt ab Chrome/Edge 101, Firefox 107 und Safari 15.4. In älteren Browsern gibt es CSSFontPaletteValuesRule nicht. Deshalb vorher mit typeof CSSFontPaletteValuesRule !== "undefined" prüfen.
  • Cross-Origin-Stylesheets: Wer auf cssRules eines fremden Stylesheets ohne CORS-Freigabe zugreift, bekommt einen SecurityError.
  • Sichtbar wirkt die Palette nur bei Farbschriftarten (COLR/CPAL). Bei normalen Schriften ändert sich nichts.