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 haben die Freiheit zu entscheiden, wie sie auf den verlinkten Text aufmerksam machen, z.B. durch eine Farbmarkierung und/oder indem sie zum Inhalt auf der Seite scrollen. Dies ist nützlich, da es Webautoren ermöglicht, tief in andere Inhalte zu verlinken, die sie nicht kontrollieren, ohne auf das Vorhandensein von IDs angewiesen zu sein. Darüber hinaus könnte es verwendet werden, um effektivere Content-Sharing-Links zu generieren, die Benutzer untereinander austauschen können.

Konzepte und Nutzung

Historisch gesehen war eine der Hauptfunktionen des Webs immer die Fähigkeit, Links zwischen verschiedenen Dokumenten bereitzustellen — das macht das Web zu einem Web:

Das Problem beim Verlinken auf spezifische Dokumentfragmente besteht darin, dass der Autor der verlinkten Seite eine Anker setzen muss, um tatsächlich darauf verlinken zu können. Das zweite Beispiel oben verlinkt ein h2-Element mit einer ID von 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 einfach nur zur Oberseite der Seite. Dies ist im Sinne der schrittweisen Degradation vernünftig, aber es wäre wohl besser, wenn der Urheber des Links die volle Kontrolle darüber hätte, wohin sie verlinken, ohne auf den Seitenautor angewiesen zu sein.

Textfragmente machen dies zur Realität — sie ermöglichen es Linkautoren, den Textinhalt anzugeben, zu dem sie verlinken möchten, anstatt Dokumentfragmenten auf flexible Weise.

Syntax

Ähnlich wie Dokumentfragmente werden Textfragmente nach einem Rautezeichen (#) an eine URL angehängt. Die Syntax ist jedoch etwas anders:

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

Die wichtigsten Teile, die Sie verstehen müssen, sind wie folgt:

:~:

Auch bekannt als das Fragment-Direktiv, diese Zeichensequenz teilt dem Browser mit, dass das, was als nächstes kommt, eine oder mehrere User-Agent-Anweisungen sind, die während des Ladens aus der URL entfernt werden, sodass Autorenskripte nicht direkt mit ihnen interagieren können. User-Agent-Anweisungen werden auch als Direktiven bezeichnet.

text=

Eine Text-Direktive. Dies stellt dem Browser ein Textfragment zur Verfügung, das definiert, zu welchem Text im verlinkten Dokument verlinkt werden soll.

textStart

Eine Textzeichenfolge, die den Beginn des verlinkten Textes angibt.

textEnd Optional

Eine Textzeichenfolge, die das Ende des verlinkten Textes angibt.

prefix- Optional

Eine Textzeichenfolge, gefolgt von einem Bindestrich, gibt an, welcher Text dem verlinkten Text unmittelbar vorausgehen soll, wobei nur Leerzeichen dazwischen erlaubt sind. Dies hilft dem Browser, den richtigen verlinkten Text auszuwählen, falls es mehrere Übereinstimmungen gibt.

-suffix Optional

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

Unterstützende Browser scrollen zu und markieren das erste Textfragment im verlinkten Dokument, das der angegebenen Direktive entspricht. Beachten Sie, dass es möglich ist, mehrere Textfragmente im selben URL zu spezifizieren, indem sie mit einem Kaufmännischen Und-Zeichen (&) getrennt werden.

Nutzungshinweise

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

  • Übereinstimmungen sind nicht groß-/kleinschreibungssensitiv.

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

  • Aus Sicherheitsgründen erfordert das Feature, dass Links in einem noopener-Kontext geöffnet werden — Sie müssen rel="noopener" zu Ihren <a>-Elementen hinzufügen und noopener zu Ihren window.open()-Aufrufen hinzufügen, wenn Sie dieses Feature nutzen.

  • Textfragmente werden nur bei benutzerinitiierten Navigationen aufgerufen.

  • Textfragmente werden nur auf den Hauptframe angewendet; Text wird nicht innerhalb von <iframe>s gesucht, 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 User Agents keine Textfragmente verarbeiten:

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

Hinweis: Wenn das bereitgestellte Textfragment mit keinem Text im verlinkten Dokument übereinstimmt oder wenn der Browser Textfragmente nicht unterstützt, wird das gesamte Textfragment ignoriert und der Anfang des Dokuments wird verlinkt.

Beispiele

Textfragment mit textStart

textStart und textEnd

Beispiele mit prefix- und/oder -suffix

URLs mit mehreren Textfragmenten

Sie können mehrere Textfragmente spezifizieren, die im selben URL markiert werden, indem sie mit Kaufmännischen Und-Zeichen (&) getrennt werden. Schauen wir uns ein paar Beispiele an:

Wenn Sie eines oder mehrere Ihrer Textfragmente nicht markiert sehen und sicher sind, dass Sie die Syntax richtig haben, könnte es sein, dass Sie eine andere Instanz markieren als die, die Sie erwartet haben. Es könnte markiert sein, aber ausserhalb des Bildschirms.

Stil der übereinstimmenden Textfragmente

Browser sind frei, den markierten Text auf beliebige Weise zu gestalten. Das CSS Pseudo-Elements Module Level 4 definiert ein Pseudo-Element, ::target-text, das es Ihnen erlaubt, das Styling anzupassen.

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

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

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

Feature-Erkennbarkeit

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

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

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

Diese Funktionalität ist derzeit hauptsächlich für die Feature-Erkennung 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 für die Feature-Erkennung vorgesehen.

Document.fragmentDirective

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

CSS

::target-text

Stellt die markierten Textfragmente im aktuellen Dokument dar. 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