Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

User Preferences API

Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.

Die Benutzerpräferenzen-API ermöglicht es Seitenautoren, die einstellungsbezogenen Media Query-Einstellungen der Benutzer programmgesteuert zu überschreiben.

Konzepte und Verwendung

Unterstützende Benutzeragenten definieren Werte für die CSS-Media-Queries prefers-color-scheme, prefers-contrast, prefers-reduced-motion, prefers-reduced-transparency und prefers-reduced-data. Das PreferenceManager-Objekt bietet programmgesteuerten Zugriff auf diese Präferenzen, sodass Seitenautoren Präferenzänderungen überwachen und überschreiben können.

Beispiele

Umschaltung für den Dunkelmodus

Der folgende Code implementiert eine minimale Umschaltung für den Dunkelmodus.

HTML

Das HTML enthält ein Formular mit drei Optionsfeldern. Diese Optionsfelder setzen das color-scheme-Feld entweder auf system, light oder dark.

html
<!doctype html>
<html lang="en-US">
  <head>
    <meta name="color-scheme" content="light dark" />
  </head>
  <body>
    <form>
      <label>
        <input type="radio" name="color-scheme" value="light" />
        Light
      </label>
      <label>
        <input type="radio" name="color-scheme" value="dark" />
        Dark
      </label>
    </form>
  </body>
</html>

JavaScript

Das JavaScript registriert Event-Listener für Änderungen bei allen Elementen, die color-scheme heißen. Ist der Wert system, entfernt der Handler die Farbschemasüberschreibung. Andernfalls fordert er eine Farbschemasüberschreibung mit dem Wert des Eingabeelements an.

js
if (navigator.preferences) {
  const inputs = {
    light: document.querySelector('[name="color-scheme"][value="light"]'),
    dark: document.querySelector('[name="color-scheme"][value="dark"]'),
  };

  inputs[navigator.preferences.colorScheme.value].checked = true;

  inputs.light.addEventListener("change", () => {
    navigator.preferences.colorScheme.requestOverride("light");
  });
  inputs.dark.addEventListener("change", () => {
    navigator.preferences.colorScheme.requestOverride("dark");
  });

  navigator.preferences.colorScheme.addEventListener("change", () => {
    inputs[navigator.preferences.colorScheme.value].checked = true;
  });
} else {
  document.body.append(
    "Your browser doesn’t support the navigator.preferences API",
  );
}

Ergebnis

Spezifikationen

Specification
Media Queries Level 5
# preferences-attribute

Browser-Kompatibilität

api.Navigator.preferences

api.PreferenceManager

api.PreferenceObject