Signatur
Beschreibung
Die schreibgeschützte Eigenschaft document.preferredStyleSheetSet liefert den Namen des Style-Sheet-Sets, das der Seitenautor als bevorzugt festgelegt hat. Ein Style-Sheet-Set ist eine Gruppe von Stylesheets mit demselben title-Attribut, z. B. <link rel="stylesheet" title="Hell" href="hell.css">. Alternative Sets werden mit rel="alternate stylesheet" eingebunden.
Das bevorzugte Set wird in dieser Reihenfolge bestimmt:
- durch ein
<meta http-equiv="Default-Style" content="Name">-Element, - durch einen HTTP-Header
Default-Stylebzw. einenLink-Header, - andernfalls durch den
titledes ersten benannten, nicht alternativen Stylesheets.
Die Eigenschaft gehörte zur alten „Style-Sheet-Sets“-API (zusammen mit selectedStyleSheetSet, lastStyleSheetSet, styleSheetSets und enableStyleSheetsForSet()). Sie war nützlich, um etwa einen Theme-Umschalter auf den Ausgangszustand zurückzusetzen. Da die API nie breit unterstützt wurde und inzwischen entfernt ist, sollte man den bevorzugten Stil heute selbst aus dem DOM ermitteln – etwa über document.styleSheets und die Eigenschaften title und disabled.
Rückgabewert
"", wenn kein bevorzugtes Set definiert ist. In Browsern ohne Unterstützung ist die Eigenschaft undefined.Beispiele
Bevorzugtes Set mit Feature-Erkennung auslesen
// HTML:
// <meta http-equiv="Default-Style" content="Hell">
// <link rel="stylesheet" title="Hell" href="hell.css">
// <link rel="alternate stylesheet" title="Dunkel" href="dunkel.css">
if ('preferredStyleSheetSet' in document) {
console.log(`Bevorzugt: ${document.preferredStyleSheetSet}`);
} else {
console.log('preferredStyleSheetSet wird nicht unterstützt');
}
Polyfill: bevorzugtes Set aus dem DOM ermitteln
const getPreferredStyleSheetSet = () => {
if (typeof document.preferredStyleSheetSet === 'string') {
return document.preferredStyleSheetSet;
}
// 1. <meta http-equiv="Default-Style">
const meta = document.querySelector('meta[http-equiv="Default-Style" i]');
if (meta?.content) return meta.content;
// 2. Erstes benanntes, nicht alternatives Stylesheet
const link = [...document.querySelectorAll('link[rel~="stylesheet"][title]')]
.find((el) => !el.relList.contains('alternate'));
return link?.title ?? '';
};
console.log(getPreferredStyleSheetSet());
Theme-Umschalter auf Autor-Voreinstellung zurücksetzen
const activateSet = (name) => {
for (const link of document.querySelectorAll('link[rel~="stylesheet"][title]')) {
// Nur Stylesheets mit passendem Titel aktivieren
link.disabled = link.title !== name;
}
};
const preferred =
document.querySelector('meta[http-equiv="Default-Style" i]')?.content ?? 'Hell';
document.querySelector('#theme-reset')?.addEventListener('click', () => {
activateSet(preferred);
console.log(`Zurückgesetzt auf: ${preferred}`);
});
// Wichtig · Fallstricke
- Veraltet und nicht standardisiert: Die Eigenschaft wurde nur von Firefox unterstützt und dort (zusammen mit der restlichen Style-Sheet-Sets-API) in Version 64 entfernt. Chrome, Safari und Edge haben sie nie implementiert. Nicht in neuem Code verwenden.
- Immer per Feature-Erkennung (
'preferredStyleSheetSet' in document) prüfen – sonst erhält manundefinedstatt einer Zeichenkette. - Die Eigenschaft ist schreibgeschützt; das aktive Set ändert man darüber nicht. Dafür diente früher
selectedStyleSheetSet, heute setzt mandisabledauf den<link>-Elementen bzw.CSSStyleSheet-Objekten. - Für Hell/Dunkel-Themes ist die Medienabfrage
prefers-color-schemebzw.window.matchMedia()meist die bessere, breit unterstützte Lösung.