Textfragmente

Textfragmente ermöglichen das direkte Verlinken auf einen bestimmten Textabschnitt in einem Webdokument, ohne dass der Autor diesen mit einer ID versehen muss, indem eine spezielle Syntax im URL-Fragment verwendet wird. Unterstützende Browser können frei entscheiden, wie sie den verlinkten Text hervorheben, z. B. durch Farbmarkierungen und/oder das Scrollen zum Inhalt der Seite. Dies ist nützlich, da es Webcontent-Autoren ermöglicht, Deep-Links zu Inhalten zu erstellen, die sie nicht kontrollieren, ohne auf IDs angewiesen zu sein, um dies zu ermöglichen. Darüber hinaus könnten damit effektivere Content-Sharing-Links generiert werden, die von Benutzern miteinander geteilt werden können.

Konzepte und Nutzung

Historisch gesehen war eine der Hauptfunktionen des Webs schon immer seine Fähigkeit, Verknüpfungen zwischen verschiedenen Dokumenten bereitzustellen – das ist es, was das Web zu einem Netz macht:

Das Problem beim Verlinken auf spezifische Dokumentenfragmente besteht darin, dass der Autor der verlinkten Seite einen Anker setzen muss, um tatsächlich dorthin zu verlinken. Das zweite Beispiel oben verlinkt auf ein 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 Dokumentenfragment ignoriert, und der Link verweist lediglich auf den Anfang der Seite. Dies ist im Sinne einer robusten Degradation sinnvoll, aber es wäre besser, wenn der Autor des Links volle Kontrolle darüber hätte, wohin er verlinkt, ohne von der Seitengestaltung abhängig zu sein.

Textfragmente machen dies möglich – sie erlauben es Linkautoren, einen Textinhalt anzugeben, auf den verlinkt werden soll, anstatt Dokumentenfragmente in einer flexiblen Weise zu verwenden.

Syntax

Ähnlich wie bei Dokumentenfragmenten werden Textfragmente nach einem Hash-Symbol (#) an eine URL angehängt. Allerdings ist die Syntax ein wenig anders:

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

Die Schlüsselelemente sind wie folgt:

:~:

Auch bekannt als Fragment-Direktive, informiert diese Zeichenfolge den Browser darüber, dass die folgenden Inhalte eine oder mehrere Benutzeragent-Anweisungen beinhalten, die während des Ladens von der URL entfernt werden, sodass Skripte des Autors nicht direkt mit ihnen interagieren können. Benutzeragent-Anweisungen werden auch Direktiven genannt.

text=

Eine Text-Direktive. Sie definiert ein Textfragment, das an den Browser übermittelt wird, und legt fest, welcher Text im verlinkten Dokument hervorgehoben werden soll.

textStart

Eine Textzeichenfolge, die den Anfang des verlinkten Abschnitts definiert.

textEnd Optional

Eine Textzeichenfolge, die das Ende des verlinkten Abschnitts definiert.

prefix- Optional

Eine Textzeichenfolge gefolgt von einem Bindestrich, die angibt, welcher Text unmittelbar vor dem verlinkten Abschnitt erscheinen soll. Dies hilft dem Browser, den korrekten Textabschnitt auszuwählen, wenn es mehrere Übereinstimmungen gibt.

-suffix Optional

Ein Bindestrich gefolgt von einer Textzeichenfolge, die angibt, welcher Text unmittelbar nach dem verlinkten Abschnitt erscheinen soll. Dies hilft dem Browser, den korrekten Textabschnitt auszuwählen, wenn es mehrere Übereinstimmungen gibt.

Unterstützende Browser scrollen zu und heben das erste Textfragment im verlinkten Dokument hervor, das mit der angegebenen Direktive übereinstimmt. Es ist möglich, mehrere Textfragmente in derselben URL anzugeben, indem sie mit einem &-Zeichen getrennt werden.

Nutzungshinweise

  • Textzeichenfolgen, die für die Werte von textStart, textEnd, prefix- und -suffix verwendet werden, müssen prozentkodiert werden. Außerdem verlangt der Standard die Zeichen '-' als URL-sichere Zeichen ebenfalls zu prozentkodieren.

  • Übereinstimmungen sind Groß-/Kleinschreibung-unabhängig.

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

  • Aus Sicherheitsgründen erfordert die Funktion, dass Links in einem noopener-Kontext geöffnet werden – es muss rel="noopener" zu Ihren <a>-Elementen hinzugefügt werden, sowie noopener in Ihren window.open()-Aufrufen.

  • Textfragmente werden nur bei durch den Nutzer initiierten Navigationsaufrufen ausgelöst.

  • Textfragmente werden nur auf das Haupt-Frame angewendet; Text wird nicht in <iframe>s durchsucht, und die Navigation in iframe-Elementen führt kein Textfragment aus.

  • Für Seiten, die sich abmelden möchten, unterstützen Chromium-basierte Browser einen Document-Policy-Headerwert, der übermittelt werden kann, um zu verhindern, dass Benutzeragenten Textfragmente verarbeiten:

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

Hinweis: Wenn das angegebene Textfragment mit keinem Text im verlinkten Dokument übereinstimmt oder wenn der Browser Textfragmente nicht unterstützt, wird das gesamte Textfragment ignoriert, und der Link verweist lediglich auf den Anfang des Dokuments.

Beispiele

Einfaches 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, wobei diese durch das Zeichen & getrennt werden. Hier sind ein paar Beispiele:

Wenn eines oder mehrere Ihrer Textfragmente nicht hervorgehoben werden und Sie sicher sind, dass die Syntax korrekt ist, könnten Sie ein anderes Vorkommen als erwartet hervorgehoben haben. Es könnte hervorgehoben sein, aber außerhalb des sichtbaren Bereichs liegen.

Styling von hervorgehobenem Text

Browser sind frei in der Wahl der Standardgestaltung für hervorgehobenen Text. Das CSS Pseudo-Elements Module Level 4 definiert ein Pseudo-Element, ::target-text, das es ermöglicht, eine individuelle Gestaltung anzugeben.

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

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

Folgen Sie dem Link oben in einem unterstützenden Browser, um die Umsetzung zu sehen.

Funktionsdetectierung

Das FragmentDirective-Objekt, das über die Eigenschaft Document.fragmentDirective zugänglich ist, kann genutzt werden, um zu testen, ob Textfragmente in einem Browser unterstützt werden.

Führen Sie Folgendes in den DevTools eines unterstützenden Browsers aus, in einem Tab mit einem oder mehreren Übereinstimmungen für Textfragmente:

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

Diese Funktionalität ist derzeit hauptsächlich zur Funktionsdetektion gedacht. In Zukunft könnte das FragmentDirective-Objekt zusätzliche Informationen enthalten.

Referenz

API

FragmentDirective

Ein Objekt, das die Textfragmente repräsentiert. Derzeit leer und hauptsächlich für Funktionsdetektion vorgesehen.

Document.fragmentDirective

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

CSS

::target-text

Repräsentiert die hervorgehobenen Textfragmente im aktuellen Dokument. Ermöglicht es Autoren, die Gestaltung der Textfragmente 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

BCD tables only load in the browser

api.FragmentDirective

BCD tables only load in the browser

css.selectors.target-text

BCD tables only load in the browser

Siehe auch