Wöchentliche Plattform-Nachrichten: Die :not()-Pseudoklasse, Video-Medienabfragen, clip-path: path()-Unterstützung

Avatar of Šime Vidas
Šime Vidas am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Hallo, wir sind zurück mit wöchentlichen Updates über die Browserlandschaft von Šime Vidas.

In der heutigen Ausgabe geht es um die CSS-Pseudoklasse :not, die komplexe Selektoren akzeptieren kann, wie man das sanfte Scrollen deaktiviert, wenn man in Chrome „Auf Seite suchen…“ verwendet, die Unterstützung von Safari für das media-Attribut bei <video>-Elementen und die lang erwartete Einführung der path()-Funktion für die CSS-Eigenschaft clip-path.

Tauchen wir in die Nachrichten ein...

Die erweiterte :not()-Pseudoklasse ermöglicht neue Arten von leistungsstarken Selektoren

Nach jahrelangem Warten wurde die erweiterte :not()-Pseudoklasse endlich in Chrome und Firefox veröffentlicht und wird jetzt in allen wichtigen Browser-Engines unterstützt. Diese neue Version von :not() akzeptiert komplexe Selektoren und sogar ganze Selektorlisten.

Sie können jetzt zum Beispiel alle <p>-Elemente auswählen, die sich *nicht* innerhalb eines <article>-Elements befinden.

/* select all <p>s that are descendants of <article> */
article p {
}

/* NEW! */
/* select all <p>s that are not descendants of <article> */
p:not(article *) {
}

In einem anderen Beispiel möchten Sie vielleicht das erste Listenelement auswählen, das *nicht* das Attribut hidden hat (oder irgendein anderes Attribut). Der beste Selektor für diese Aufgabe wäre :nth-child(1 of :not([hidden])), aber die of-Notation wird immer noch nur in Safari unterstützt. Glücklicherweise kann dieser nicht unterstützte Selektor jetzt mit nur der erweiterten :not()-Pseudoklasse neu geschrieben werden.

/* select all non-hidden elements that are not preceded by a non-hidden sibling (i.e., select the first non-hidden child */
:not([hidden]):not(:not([hidden]) ~ :not([hidden])) {
}

Der HTTP-Refresh-Header kann ein Barrierefreiheitsproblem darstellen

Der HTTP-Refresh-Header (und das entsprechende HTML-<meta>-Tag) ist ein sehr altes und weit unterstütztes nicht standardisiertes Feature, das den Browser anweist, die Seite nach einer bestimmten Zeit automatisch und periodisch neu zu laden.

<!-- refresh page after 60 seconds -->
<meta http-equiv="refresh" content="60">

Laut Googles Daten wird das <meta http-equiv="refresh">-Tag bei einem satten 2,8 % aller Seitenaufrufe in Chrome verwendet (gegenüber 4 % vor einem Jahr). All diese Websites riskieren, mehrere Erfolgskriterien der Web Content Accessibility Guidelines (WCAG) nicht zu erfüllen.

Wenn das Zeitintervall zu kurz ist und es keine Möglichkeit gibt, das automatische Aktualisieren abzuschalten, haben blinde Menschen nicht genügend Zeit, ihre Screenreader die Seite lesen zu lassen, bevor die Seite unerwartet aktualisiert wird und der Screenreader wieder von vorne zu lesen beginnt.

WCAG erlaubt jedoch die Verwendung des <meta http-equiv="refresh">-Tags speziell mit dem Wert 0, um eine clientseitige Weiterleitung durchzuführen, falls der Autor den Server nicht kontrolliert und somit keine ordnungsgemäße HTTP-Weiterleitung durchführen kann.

(via Stefan Judis)

Wie man das sanfte Scrollen für die Funktion „Auf Seite suchen…“ in Chrome deaktiviert

CSS scroll-behavior: smooth wird in Chrome und Firefox unterstützt. Wenn diese Deklaration auf das <html>-Element gesetzt wird, scrollt der Browser die Seite „auf sanfte Weise“. Dies gilt für Navigationen, die Standard-Scroll-APIs (z. B. window.scrollTo({ top: 0 })) und Scroll-Snapping-Operationen (CSS Scroll Snap).

Leider behält Chrome fälschlicherweise das sanfte Scrollen bei, auch wenn der Benutzer eine Textsuche auf der Seite durchführt („Auf Seite suchen…“-Funktion). Manche Leute empfinden das als nervig. Bis dies behoben ist, können Sie Christian Schaephers clevere CSS-Umgehung verwenden, die das sanfte Scrollen effektiv nur für die Funktion „Auf Seite suchen…“ deaktiviert.

@keyframes smoothscroll1 {
  from,
  to {
    scroll-behavior: smooth;
  }
}

@keyframes smoothscroll2 {
  from,
  to {
    scroll-behavior: smooth;
  }
}

html {
  animation: smoothscroll1 1s;
}

html:focus-within {
  animation-name: smoothscroll2;
  scroll-behavior: smooth;
}

Beachten Sie in der folgenden Demo, wie das Klicken auf die Links die Seite sanft scrollt, während die Suche nach den Wörtern „oben“ und „unten“ die Seite sofort scrollt.

Safari unterstützt weiterhin das media-Attribut bei Videoquellen

Mit dem HTML-<video>-Element ist es möglich, mehrere Videoquellen mit unterschiedlichen MIME-Typen und Kodierungen anzugeben. Dies ermöglicht es Websites, modernere und effizientere Videoformate in unterstützenden Browsern zu verwenden und gleichzeitig eine Fallback-Lösung für andere Browser bereitzustellen.

<video>
  <source src="/flower.webm" type="video/webm">
  <source src="/flower.mp4" type="video/mp4">
</video>

Früher unterstützten Browser auch das media-Attribut bei Videoquellen. Eine Webseite konnte beispielsweise ein Video mit höherer Auflösung laden, wenn die Ansichtsfenstergröße des Benutzers einen bestimmten Wert überschritt.

<video>
  <source media="(min-width: 1200px)" src="/large.mp4" type="video/mp4">
  <source src="/small.mp4" type="video/mp4">
</video>

Die obige Syntax wird heute tatsächlich immer noch in Safari unterstützt, wurde aber um 2014 aus anderen Browsern entfernt, da sie nicht als gutes Feature angesehen wurde.

Es ist nicht geeignet, um zwischen niedriger und hoher Auflösung zu wählen, da sich die Umgebung ändern kann (z. B. könnte der Benutzer das Video in Vollbildmodus schalten, nachdem es mit dem Laden begonnen hat, und dann eine hohe Auflösung wünschen). Außerdem sind Bandbreiteninformationen in Medienabfragen nicht verfügbar, aber selbst wenn sie es wären, ist der User Agent in einer besseren Position, um zu bestimmen, was angemessen ist, als der Autor.

Scott Jehl (Filament Group) argumentiert, dass die Entfernung dieses Features ein Fehler war und dass Websites responsive Videoquellen nur mit <video> ausliefern können sollten.

Für jedes Video, das wir in HTML einbetten, sind wir mit der Wahl konfrontiert, entweder Quellendateien zu liefern, die für viele Benutzergeräte potenziell zu groß oder zu klein sind ... oder auf kompliziertere serverseitige oder skriptbasierte oder Drittanbieterlösungen zurückzugreifen, um eine korrekte Größe zu liefern.

Scott hat einen Vorschlag zur Wiedereinführung von media in Video-<source>-Elementen verfasst und freut sich über Feedback.

Die CSS-clip-path: path()-Funktion wird in Chrome veröffentlicht

Sie wurde nicht im neuesten Artikel „Neu in Chrome 88“ erwähnt, aber Chrome hat gerade die path()-Funktion für die CSS-Eigenschaft clip-path veröffentlicht, was bedeutet, dass diese Funktion jetzt in allen drei großen Browser-Engines (Safari, Firefox und Chrome) unterstützt wird.

Die path()-Funktion ist im CSS Shapes-Modul definiert und akzeptiert einen SVG-Pfad-String. Chris bezeichnet dies als die ultimative Syntax für die clip-path-Eigenschaft, da sie ein Element mit „buchstäblich jeder Form“ ausschneiden kann. Hier ist zum Beispiel ein Foto, das mit einer Herzform ausgeschnitten ist