Start · Sprachen · JavaScript · Referenz · CSSViewTransitionRule.navigation

CSSViewTransitionRule.navigation

Eigenschaft

Schreibgeschützte Eigenschaft, die den Wert des <code>navigation</code>-Deskriptors einer <code>@view-transition</code>-Regel als String liefert, z. B. <code>"auto"</code> oder <code>"none"</code>.

seit JavaScript Chrome/Edge 126+, Safari 18.2+; Firefox: noch nich Kategorie: webapi

Signatur

CSSViewTransitionRule.navigation

Beschreibung

Die Eigenschaft navigation der Schnittstelle CSSViewTransitionRule gibt den Wert des gleichnamigen Deskriptors der CSS-At-Regel @view-transition zurück. Dieser Deskriptor legt fest, ob ein Dokument an dokumentübergreifenden View Transitions (Cross-Document View Transitions) teilnimmt, also ob beim Navigieren zwischen zwei Seiten desselben Ursprungs ein animierter Übergang stattfindet.

Mögliche Werte sind "auto" (das Dokument nimmt an View Transitions bei Navigationen desselben Ursprungs teil) und "none" (keine Teilnahme). Damit ein Übergang tatsächlich läuft, müssen beide Dokumente – das alte und das neue – navigation: auto setzen.

Die Eigenschaft ist nur lesbar. Nützlich ist sie vor allem für Diagnose-Werkzeuge, Tests oder Skripte, die prüfen wollen, ob eine Seite per CSS für dokumentübergreifende Übergänge vorbereitet ist. Um das Verhalten zu ändern, muss die Regel selbst ersetzt oder entfernt werden, etwa über CSSStyleSheet.deleteRule() und insertRule().

Rückgabewert

Typ
string
Beschreibung
Der serialisierte Wert des navigation-Deskriptors, typischerweise "auto" oder "none". Fehlt der Deskriptor in der Regel, wird laut Spezifikation ein leerer String zurückgegeben.

Beispiele

Wert aus einem konstruierten Stylesheet auslesen

const sheet = new CSSStyleSheet();
sheet.replaceSync('@view-transition { navigation: auto; }');

const rule = sheet.cssRules[0];
console.log(rule instanceof CSSViewTransitionRule);
console.log(rule.navigation);

// Stylesheet aktivieren, damit die Regel wirkt
document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];
true auto

Prüfen, ob die Seite für dokumentübergreifende Übergänge vorbereitet ist

const collectViewTransitionRules = (rules, found = []) => {
  for (const rule of rules) {
    if (rule instanceof CSSViewTransitionRule) {
      found.push(rule);
    } else if (rule.cssRules) {
      // Verschachtelte Regeln, z. B. in @media oder @supports
      collectViewTransitionRules(rule.cssRules, found);
    }
  }
  return found;
};

const isCrossDocumentEnabled = () => {
  if (typeof CSSViewTransitionRule === 'undefined') return false;
  const rules = [];
  for (const sheet of document.styleSheets) {
    try {
      collectViewTransitionRules(sheet.cssRules, rules);
    } catch {
      // Fremd-Stylesheets ohne CORS werfen SecurityError
    }
  }
  return rules.some((rule) => rule.navigation === 'auto');
};

console.log('Cross-Document View Transitions:', isCrossDocumentEnabled());
Cross-Document View Transitions: true

Übergänge zur Laufzeit deaktivieren (Regel ersetzen)

const sheet = new CSSStyleSheet();
sheet.replaceSync('@view-transition { navigation: auto; }');
document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];

const disableTransitions = () => {
  // navigation ist schreibgeschützt – daher Regel austauschen
  sheet.deleteRule(0);
  sheet.insertRule('@view-transition { navigation: none; }', 0);
  console.log('Neuer Wert:', sheet.cssRules[0].navigation);
};

disableTransitions();
Neuer Wert: none

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung wie rule.navigation = 'none' hat keine Wirkung (im Strict Mode gibt es einen TypeError). Zum Ändern die Regel ersetzen oder in eine @media-Abfrage einbetten, z. B. @media (prefers-reduced-motion: no-preference).
  • Beide Seiten nötig: Ein Übergang läuft nur, wenn altes und neues Dokument navigation: auto deklarieren und die Navigation innerhalb desselben Ursprungs bleibt.
  • Verschachtelung: @view-transition-Regeln können in @media- oder @supports-Blöcken stehen. Beim Durchsuchen von cssRules deshalb rekursiv vorgehen.
  • Cross-Origin-Stylesheets: Wer cssRules fremder Stylesheets ohne CORS-Freigabe liest, bekommt einen SecurityError. Den Zugriff daher in try…catch kapseln.
  • Browser-Unterstützung: Verfügbar in Chromium-Browsern ab Version 126 und in Safari ab 18.2. Firefox unterstützt dokumentübergreifende View Transitions bisher nicht. Vor der Nutzung mit typeof CSSViewTransitionRule !== 'undefined' prüfen. Browser ohne Unterstützung ignorieren die At-Regel, die Seite funktioniert dort aber weiter (progressive Verbesserung).