Textfragmente

Textfragmente ermöglichen es, direkt auf eine bestimmte Textstelle in einem Webdokument zu verlinken, ohne dass der Autor diese mit einer ID versehen 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. durch Farbmarkierung und/oder Scrollen zum Seiteninhalt. Dies ist nützlich, da es Webinhaltsautoren ermöglicht, tiefgreifend auf fremde Inhalte zu verlinken, ohne sich auf IDs verlassen zu müssen. Darüber hinaus könnte dies verwendet werden, um effektivere Links zum Teilen von Inhalten für Nutzer zu generieren.

Konzepte und Nutzung

Historisch gesehen war eine der Hauptmerkmale des Webs immer seine Fähigkeit, Links zwischen verschiedenen Dokumenten bereitzustellen — das ist es, was das Web zum Web macht:

Das Problem beim Verlinken auf spezifische Dokumentfragmente ist, dass der Autor der verlinkten Seite einen Anker setzen muss, um tatsächlich verlinken zu können. Das obige zweite Beispiel verlinkt auf 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 zum Anfang der Seite. Dies ist insofern vernünftig, als dass es eine angemessene Verschlechterung der Funktionen darstellt, aber es wäre besser, wenn der Autor des Links volle Kontrolle darüber hätte, wohin er verlinkt, ohne auf den Seitenautor angewiesen zu sein.

Textfragmente machen dies möglich — sie erlauben es Linkautoren, Textinhalte statt Dokumentfragmente zum Verlinken anzugeben.

Syntax

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

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

Die wichtigsten Teile, die es zu verstehen gilt, sind wie folgt:

:~:

Auch bekannt als das Fragmentdirektiv, teilt diese Zeichenfolge dem Browser mit, dass das Folgende eine oder mehrere Benutzeranweisungen sind, die beim Laden aus der URL entfernt werden, damit Autorenskripte nicht direkt damit interagieren können. Benutzeranweisungen werden auch Direktiven genannt.

text=

Eine Textdirektive. Diese liefert dem Browser ein Textfragment, das definiert, welcher Text im verlinkten Dokument verlinkt werden soll.

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 unmittelbar vor dem verlinkten Text stehen soll, wobei dazwischen nur Leerzeichen 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 unmittelbar nach dem verlinkten Text stehen soll, wobei dazwischen nur Leerzeichen erlaubt sind. Dies hilft dem Browser, den richtigen verlinkten Text auszuwählen, falls es mehrere Übereinstimmungen gibt.

Unterstützende Browser scrollen zum ersten Textfragment im verlinkten Dokument, das der angegebenen Direktive entspricht, und heben es hervor. Beachten Sie, dass es möglich ist, mehrere Textfragmente im Rahmen derselben URL hervorzuheben, indem sie mit dem Zeichen "&" verbunden werden.

Nutzungshinweise

  • Textzeichenfolgen, die für die Werte textStart, textEnd, prefix- und -suffix verwendet werden, müssen prozentcodiert sein. Darüber hinaus verlangt der Standard, dass der URL-sichere Bindestrich '-' ebenfalls prozentcodiert wird.

  • Übereinstimmungen sind nicht case-sensitiv.

  • Einzelne textStart, textEnd, prefix- und -suffix Zeichenfolgen müssen vollständig innerhalb desselben block-level element liegen, aber vollständige Übereinstimmungen können über mehrere Elementgrenzen hinweg gehen.

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

  • Textfragmente werden nur bei nutzerinitiierten Navigationen aufgerufen.

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

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

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

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

Beispiele

Textfragment mit textStart

textStart und textEnd

Beispiele mit prefix- und/oder -suffix

URLs mit mehreren Textfragmenten

Sie können mehrere Textfragmente, die in derselben URL hervorgehoben werden sollen, durch Verknüpfen mit dem Zeichen "&" angeben. Schauen wir uns ein paar Beispiele an:

Wenn eines oder mehrere Ihrer Textfragmente nicht hervorgehoben werden und Sie sicher sind, dass Sie die Syntax korrekt haben, heben Sie möglicherweise eine andere Instanz hervor als erwartet. Sie könnte hervorgehoben sein, aber außerhalb des Bildschirms liegen.

Stil der hervorgehobenen Textfragmente

Browser sind frei, den hervorgehobenen Text auf irgendeine Standardweise zu gestalten. Das CSS Pseudo-Elements Module Level 4 definiert ein Pseudo-Element, ::target-text, das die Möglichkeit bietet, eine benutzerdefinierte Gestaltung festzulegen.

Zum Beispiel verwenden 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 folgen, um den Effekt zu sehen, den dies hat.

Erkennbarkeit der Funktion

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

Versuchen Sie, das folgende in den Devtools eines unterstützenden Browsers in einem Tab mit einem oder mehreren hervorgehobenen 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 Funktionserkennung 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 Funktionserkennung gedacht.

Document.fragmentDirective

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

CSS

::target-text

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

api.FragmentDirective

css.selectors.target-text

Siehe auch