Textfragmente

Textfragmente ermöglichen das direkte Verlinken zu einem bestimmten Textabschnitt in einem Webdokument, ohne dass der Autor es mit einer ID annotieren muss, indem eine spezielle Syntax im URL-Fragment verwendet wird. Unterstützende Browser können frei wählen, wie sie den verlinkten Text hervorheben, z.B. mit einer Farbmarkierung und/oder indem sie zum Inhalt auf der Seite scrollen. Dies ist nützlich, da es Webautoren ermöglicht, tief zu verlinken, ohne auf vorhandene IDs angewiesen zu sein. Darüber hinaus können so effektivere Links zum Teilen von Inhalten erstellt werden, die Benutzer untereinander austauschen können.

Konzepte und Nutzung

Historisch gesehen war eine der wichtigsten Funktionen des Webs immer seine Fähigkeit, Links zwischen verschiedenen Dokumenten bereitzustellen – das ist, was das Web zu einem Netz macht:

Das Problem beim Verlinken zu bestimmten Dokumentfragmenten besteht darin, dass der Autor der verlinkten Seite einen Anker setzen muss, um tatsächlich darauf zu verlinken. Das zweite Beispiel oben verlinkt zu einem h2-Element mit der ID browser_compatibility:

html
<h2 id="browser_compatibility">
  <a href="#browser_compatibility">Browser compatibility</a>
</h2>

Wenn die ID geändert oder entfernt wird, wird das Dokumentfragment ignoriert und der Link führt nur zum Seitenanfang. Dies ist in Bezug auf eine reibungslose Degradation sinnvoll, doch es wäre besser, wenn der Autor des Links die volle Kontrolle darüber hätte, wohin sie verlinken, ohne auf den Seitenautor angewiesen zu sein.

Textfragmente machen dies möglich – sie erlauben es Link-Autoren, Textinhalt anstelle von Dokumentfragmenten auf flexible Weise zu spezifizieren.

Syntax

url
https://example.com#:~:text=[prefix-,]textStart[,textEnd][,-suffix]

Textfragmente sind eine Art URL-Fragment und werden nach dem # geschrieben. Die wesentlichen Teile sind:

:~:

Auch bekannt als das Fragment-Direktiv, teilt diese Zeichenfolge dem Browser mit, dass was folgt eine oder mehrere Nutzeragenten-Instruktionen sind, die während des Ladens von der URL entfernt werden, so dass Autorenskripte nicht direkt mit ihnen interagieren können. Nutzeragenten-Instruktionen werden auch Direktiven genannt.

text=

Eine Text-Direktive. Sie bietet dem Browser ein Textfragment, das definiert, welcher Text im verlinkten Dokument zu verlinken ist.

textStart

Eine Textzeichenfolge, die den Anfang des verlinkten Textes angibt.

textEnd Optional

Eine Textzeichenfolge, die das Ende des verlinkten Textes angibt.

prefix- Optional

Eine Textzeichenfolge gefolgt von einem Bindestrich, die angibt, welcher Text direkt dem verlinkten Text vorausgehen soll, wobei nur Leerzeichen dazwischen erlaubt sind. Dies hilft dem Browser, den korrekten verlinkten Text auszuwählen, wenn es mehrere Übereinstimmungen gibt.

-suffix Optional

Ein Bindestrich gefolgt von einer Textzeichenfolge, die angibt, welcher Text dem verlinkten Text direkt folgen soll, wobei nur Leerzeichen dazwischen erlaubt sind. Dies hilft dem Browser, den korrekten verlinkten Text auszuwählen, wenn es mehrere Übereinstimmungen gibt.

Unterstützende Browser werden zum ersten Textfragment scrollen und es hervorheben, dessen Direktive mit der angegebenen übereinstimmt. Beachten Sie, dass es möglich ist, mehrere Textfragmente in derselben URL zu spezifizieren, indem diese mit dem Zeichen & getrennt werden.

Nutzungshinweise

  • Die für die Werte textStart, textEnd, prefix- und -suffix verwendeten Textzeichenfolgen müssen prozentkodiert sein. Darüber hinaus erfordert der Standard, dass das URL-sichere Zeichen '-' ähnlich prozentkodiert wird.

  • Übereinstimmungen sind nicht case-sensitiv.

  • Einzelne textStart, textEnd, prefix- und -suffix Zeichenfolgen müssen vollständig innerhalb desselben Block-Level-Elements liegen, aber vollständige Übereinstimmungen können sich über mehrere Elementgrenzen erstrecken.

  • Aus Sicherheitsgründen sollten Sie, wenn Sie dieses Merkmal verwenden, um auf eine seitenfremde Seite zu verlinken, den Link in einem noopener-Kontext öffnen – Sie müssen rel="noopener" zu Ihren <a>-Elementen hinzufügen und noopener zu Ihren window.open() Aufrufen hinzufügen, wenn Sie dieses Merkmal verwenden.

  • Textfragmente werden nur bei Benutzernavigationen aufgerufen.

  • Textfragmente werden nur auf den Hauptframe angewendet; Text wird nicht innerhalb von <iframe>s durchsucht, und iframe-Navigation wird kein Textfragment aufrufen.

  • Für Websites, die sich abmelden möchten, unterstützen Chromium-basierte Browser einen Document Policy-Headerwert, den sie senden können, damit Benutzeragenten keine Textfragmente verarbeiten:

    http
    Document-Policy: force-load-at-top
    

Hinweis: Wenn das bereitgestellte Textfragment keinem Text im verlinkten Dokument entspricht oder wenn der Browser keine Textfragmente unterstützt, wird das gesamte Textfragment ignoriert und es wird zum Seitenanfang verlinkt.

Beispiele

Textfragment mit textStart

textStart und textEnd

Beispiele mit prefix- und/oder -suffix

URLs mit mehreren Textfragmenten

Sie können mehrere Textfragmente in derselben URL angeben, indem Sie diese mit dem Zeichen & trennen. Schauen wir uns ein paar Beispiele an:

Wenn Sie annehmen, dass einer oder mehrere Ihrer Textfragmente nicht hervorgehoben werden, obwohl Sie sicher sind, dass Ihre Syntax korrekt ist, könnten Sie einfach eine andere Instanz hervorheben, als die Sie erwartet haben. Es könnte hervorgehoben sein, aber außerhalb des sichtbaren Bereichs.

Styling von hervorgehobenen Textfragmenten

Browser sind frei, den hervorgehobenen Text auf beliebige, standardmäßige Weise zu gestalten. Das CSS Pseudo-Elements Module Level 4 definiert ein Pseudoelement, ::target-text, mit dem Sie benutzerdefiniertes Styling spezifizieren können.

Zum Beispiel haben wir in unserem scroll-to-text-Demo folgendes CSS:

css
::target-text {
  background-color: rebeccapurple;
  color: white;
}

Versuchen Sie, obigen Link in einem unterstützenden Browser zu folgen, um die Wirkung zu sehen.

Erkennbarkeit der Funktion

Das FragmentDirective-Objekt, auf das über die Document.fragmentDirective-Eigenschaft zugegriffen wird, kann verwendet werden, um zu testen, ob Textfragmente in einem Browser unterstützt werden.

Versuchen Sie, Folgendes in den DevTools eines unterstützenden Browsers in einem Tab mit einem oder mehreren passenden Textfragmenten auszuführen:

js
document.fragmentDirective;
// returns an empty FragmentDirective object, if supported
// undefined otherwise

Diese Funktionalität ist derzeit hauptsächlich für die Erkennung von Funktionen vorgesehen. In Zukunft könnte das FragmentDirective-Objekt zusätzliche Informationen enthalten.

Referenz

API

FragmentDirective

Ein Objekt, das die Textfragmente darstellt. Derzeit leer und hauptsächlich zur Merkmalsdetektion vorgesehen.

Document.fragmentDirective

Gibt die FragmentDirective für das aktuelle Dokument zurück.

CSS

::target-text

Repräsentiert die hervorgehobenen Textfragmente im aktuellen Dokument. Es erlaubt Autoren, das Styling von Textfragmenten anzupassen.

Spezifikationen

Specification
URL Fragment Text Directives
# fragmentdirective
CSS Pseudo-Elements Module Level 4
# selectordef-target-text

Browser-Kompatibilität

html.elements.a.text_fragments

api.FragmentDirective

css.selectors.target-text

Siehe auch