Die :target-Pseudoklasse ist Bestandteil des derzeitigen Entwurfs von CSS 3 und Teil einer ganzen Reihe neuer Selektoren. Werfen wir einen Blick auf zukünftige Einsatzszenarien.
Zu Beginn die Spezifikation. Ins Deutsche übersetzt erläutert der derzeitige Stand der Spezifikation :target wie folgt:
“Manche URIs beziehen sich auf eine Stelle innerhalb einer Ressource. Diese Art eines URI endet mit einem “Nummernzeichen” (#), gefolgt von einem Ankeridentifikator (der Fragmentidentifikator).
URIs mit Fragmentidentifikatoren linken zu einem bestimmten Element innerhalb des Dokuments, das als Zielelement bekannt ist. Hier ist zum Beispiel ein URI, der in einem HTML-Dokument auf einen Anker namens section_2 zeigt:
http://example.com/html/top.html#section_2
Ein Zielelement kann durch die :target-Pseudoklasse repräsentiert werden. Wenn der URI des Dokuments keinen Fragmentidentifikator besitzt, hat das Dokument kein Zielelement.”
Praktische Anwendungen
Die Beispiele demonstrieren unterschiedliche Einsatzmöglichkeiten der :target-Pseudoklasse. Allerdings wird :target derzeit nur von neueren Gecko- (wie Firefox 1.5) und KHTML-Browsern (wie Safari) unterstützt.
Beispiel 1: Hervorheben
Der einfachste Fall für die Verwendung von :target besteht in einer simplen Umformatierung und Hervorhebung des Zielelements. Weniger technisch ausgedrückt: Nehmen wir an, wir versehen einige Absätze eines Dokuments mit IDs zur internen Referenzierung.
<p id="einleitung">Lorem ipsum [...]</p>
Damit können wir diese bei Aufruf entsprechend anders gestalten, zum Beispiel in roter Farbe:
p:target { color: #F00; }
Sind unsere Absätze normalerweise schwarz, so sorgt die :target-Pseudoklasse bei Aufruf des Dokuments mit einem beliebigen Fragmentidentifikator, der einen Absatz betrifft, dafür, dass der jeweils betroffene Abschnitt rot koloriert wird. Siehe Beispielseite.
Der über den Link aufgerufene Absatz wird rot hervorgehoben
Beispiel 2: Ein- und Ausblenden
Interessanter ist es, bestimmte Seitenelemente erst anzuzeigen, wenn diese mit einem internen Anker aufgerufen werden. Nehmen wir hierfür ein Element mit der ID hinweis:
<div id="hinweis">Dies ist ein Hinweis.</div>
Zuerst einmal blenden wir dieses Element aus. Dazu genügt der Einsatz einer simplen Regel:
div#hinweis { display: none; }
Verweist jemand direkt auf das Zielelement #hinweis, können wir den div-Container über :target wieder einblenden. Bei der Gelegenheit gestalten wir ihn auch gleich etwas prominenter, indem wir ein “em” Innenabstand injizieren:
div#hinweis:target { display: block; padding: 1em; }
Das Ergebnis kann ebenfalls auf der Beispielseite betrachtet werden, jeweils mit und ohne Fragmentidentifikator #hinweis.
Diese Einsatzart der :target-Pseudoklasse birgt einige weitere interessante Spielarten. So könnte unser Hinweiselement auch noch einen Link auf dasselbe Dokument beinhalten – sofern nicht erneut mit dem Identifikator hinweis versehen -, um den Text wieder auszublenden. Durch Klick auf einen solchen Link greift der Selektor div#hinweis:target nicht mehr (die Beispielseite illustriert auch diesen Fall). Sieht dynamisch aus, ist aber “nur” CSS.
Beispiel 3: Umfassende Layoutänderung
:target kann selbstverständlich noch “radikaler” eingesetzt werden, indem man den Fokus – also das Zielelement – entsprechend groß wählt und die Formatierung umfassender ändert. Der folgende Ansatz soll dies veranschaulichen. Wir schenken dem html-Element eine ID:
<html id="alternative"></html>
…und gestalten das dazugehörige Dokument bei Aufruf mitsamt Fragmentidentifikator #alternative um. Der Selektor selbst muss die ID alternative nicht beinhalten, wichtig ist nur, daß dem html-Element eine solche zugewiesen wurde und der Selektor natürlich :target beinhaltet.
html:target { color: #060; font-size: 2em; }
Das Ergebnis ist ein einfacher CSS-“Stylesheet-Switcher”, der unsere Beispielseite mit großer, grüner Schrift präsentiert.
CSS-“Stylesheet-Switcher”
Aber Vorsicht. Das obige Beispiel geht mit IDs nicht wirklich korrekt um, da das html-Element die ID alternative eigentlich nur erfordert, wenn wir :target anwenden wollen. Obwohl es permanent als “alternativ” gekennzeichnet ist, ist es dies von der Semantik her jedoch nur zwischenzeitlich.
Sowohl Beispiel 2 als auch 3 sind zudem erstmal als “Spielerei” zu betrachten und vor einem praktischen und großflächigen Einsatz vor allem auf die Zugänglichkeit zu prüfen. Elemente, die wie dargestellt über display: none; aus- und einen die :target-Pseudoklasse beinhaltenden Selektor wieder eingeblendet werden, sind in Bildschirmlesesoftware genauso vorhanden wie jetzt noch im Internet Explorer – gar nicht. Wenn dies nicht verantwortet werden kann, bleibt nur das Warten auf den Reader-Medientyp und den Internet Explorer 7. Sofern er :target unterstützen wird.
Links zum Thema:
Erstveröffentlichung 19.01.2006