Unerwartet viel Gegenwind bekam ich für meinen Artikel Warum target="_blank"
nervt und verboten gehört. Ich dachte, ich würde damit offene Türen einrennen, doch anscheinend werden neue Fenster erzwingende Links (und die Menschen die sie mögen) so bald nicht aussterben. Deswegen mein Appell: Wenn target="_blank"
schon sein muss, sollten solche Links gekennzeichnet werden! Dieser Artikel erklärt, wie das mittels CSS ohne zusätzliches Markup sogar im Internet Explorer zu bewerkstelligen ist.
Wie man es nicht machen sollte
Die naheliegendste Lösung wäre es, allen Links mit target="_blank"
eine Klasse zu verpassen und über diese per CSS zu gestalten. Das hätte den Nachteil, dass dabei zusätzlicher HTML-Code anfiele, den diese Lappalie eigentlich nicht wert ist. Auch dürfte es nicht immer einfach sein, eine Extra-Klasse zu implementieren, gerade wenn man die Markierung nachrüsten will.
Angriff der CSS32-Selektoren
Mit den schicken neuen Selektoren von CSS32 (danke Greg!) kann man HTML-Elemente anhand beliebiger Attribute auswählen. Damit wird das Markieren von Links mit target="_blank"
zur Fingerübung:
a[target=_blank] { background:yellow; }
Wenn man weiß, dass man nie Links haben wird, deren target
-Attribut etwas anderes als _blank
ist (was außerhalb von Framesets die Regel sein dürfte), kann man auch einfach alle Links mit target
-Attribut markieren:
a[target] { background:yellow; }
Mit der Unterstützung für diese Attribut-Selektoren sieht es ausgesprochen gut aus. Alle gängigen Browser kommen mit diesem Teil von CSS32 klar... wie erwartet mit einer Ausnahme.
Der Internet Explorer 6
Der IE6 kann mit element[attribut]
nichts anfangen. Möchte man trotzdem bequem Links mit target="_blank"
zu markieren, kann man Javascript zu Felde führen. Einfacher macht man es sich in diesem Falle aber mit einer proprietären IE-Spezialität. Die so genannten Dynamic Properties sind eine reichlich perverse Geschichte, denn sie ermöglichen nicht weniger als Scripting in Stylesheets. So ist es natürlich ausgesprochen einfach, a[target] { background:yellow; }
für den Internet Explorer zu simulieren.
<!--[if lt IE 7]> <style type="text/css" media="screen"> a { background: expression((this.target) ? 'yellow' : 'none'); } </style> <![endif]-->
Das ist vom Standpunkt des Webstandards-Advokaten aus absolut kriminell, funktioniert aber, wie diese Demoseite zeigt prächtig und ist dabei ausgesprochen handlich.
Fazit
Mit nur wenigen Zeilen CSS (und etwas perversem IE-only-Code) lassen sich Links, die das nicht unstrittige target="_blank"
in sich tragen, gesondert auszeichnen. Das sollte man meiner Meinung nach auch dringend tun, denn nur so kann ein Nutzer wissen, ob ihn ein neues Fenster erwartet oder nicht.
Ich bleibe freilich bei meiner Meinung, dass Links, die ein neues Fenster erzeugen, aus den im vorherigen Artikel genannten Gründen eine Seuche sind. Wenn man target="_blank"
denn unbedingt benutzen muss, dann doch bitte so.
Kommentare (11)
Gerald ¶
4. August 2007, 01:30 Uhr
Jetzt mal ehrlich: Dem gemeinen IE6 Nutzer ist es schnurzegal, ob bei ihm 1 neues Fenster oder 3 Popups gleichzeitig aufgehen.
Um solche Kleinigkeiten kümmere ich mich beim IE6 echt nimmer. Es reicht schon, wenn ich per "expression" die min und max -widths und -heights für das Ding extra anpasse.
Meine Meinung ist ja überhaupt, dass Nutzern völlig veralteter Software, dies auch bildlich vor Augen geführt werden muss. Es soll ja sogar noch Leute geben, die für den IE5 und IE5.02 Mac anpassen.
Und zum eigentlichen Thema: Vollkommen Deiner Meinung mit dem _target-Käse. Ein Relikt aus Frame-Zeiten.
Siegfried ¶
4. August 2007, 09:34 Uhr
Zumindest im Firefox ist es eventuell durchaus ratsam, diese Styles in den lokalen Userstyles einzubauen. Denn so gut wie kein Webmaster denkt an Sowas.
Ich selber surfe über Privoxy und lasse mir alle target Attribute rauswerfen, noch befor sie den Browser erreichen. Klasse Sache, das :)
Orlando ¶
4. August 2007, 13:58 Uhr
Firefox- und Opera-Nutzer können sich mittels User-JavaScript von dieser Plage befreien: Remove
'target=_blank'
als Firefox-Greasemonkey-Script und Opera-UserJS. Für Safari übernimmt SafariStand die Aufgabe, neue Fenster auf neue Tabs umzubiegen.Will man Linktypen lediglich anzeigen lassen, eignet sich für Opera neben einem entsprechend angepassten Benutzerstylesheet auch das link alert-Script, welches Base64-kodierte Icons enthält und bei Bedarf einblendet.
Peter ¶
4. August 2007, 14:13 Uhr
Das sind schöne Tools. Aber dass man sich solchen Krams installieren muss, um ohne Aggression surfen zu können, ist ein wenig wie eine
-Website. Wenn dir meine Seite nicht passt, installiere einfach Tools X, Y und Z! Gute alte Zeiten...Marvin ¶
10. August 2007, 04:41 Uhr
So... ich hab dann mal ein Blogroll auf diese Seite eingerichtet. Natürlich mit Target="_blank" :)
Ich finde Target="_blank" übrigens auch sehr praktisch, immerhin möchte ich die Quellseite nicht unbedingt verlassen. Beim Firefox öffnet sich dann sowieso nur ein weiteres Tab, beim Safari nervt es aber schon ein bisschen.
Greg ¶
13. August 2007, 15:38 Uhr
Attribut-Selektoren sind in CSS3 nicht neu. In CSS2 sind sie auch schon vorhanden. Ansonsten hätte man auch keinen Grund, sich über den IE aufzuregen, denn volle CSS3-Unterstützung kann man noch von keinem Browser erwarten.
Peter ¶
13. August 2007, 15:40 Uhr
Ups... man lernt nie aus. Ist korrigiert.
Jascha ¶
25. Januar 2009, 14:23 Uhr
Mir war die Problematik ehrlich gesagt gar nicht bewusst, es kann gut sein das links mit target="_blank" durchaus störend sind, ich selbst habe aber nie etwas davon mit bekommen da Firefox wie oben bereits erwähnt Links, welche ein neues Fenster erzeugen sowieso automatisch in einem neuem Tab öffnet.
Werde in Zukunft noch einmal ausgiebig darüber nachdenken, zumindest sind sie bei mir schonmal gekennzeichnet.
Klaus ¶
4. Mai 2012, 10:22 Uhr
Den o.g. CSS-Code verwende ich bereits, um eine Image neben den externen Links zu platzieren. Hierfür suche ich jetzt eine Erweiterung: Ich habe einen Share-Button von addthis integriert und in der Javascript-Box stören diese Grafiken.
Wie kann der Code "a[target=_blank] {..}"erweitert werden, sodass die Regel nicht für eine bestimmte Ziel-URL gilt?
P.S. Die Warnung sagt zwar "Achtung: Dieser Beitrag ist alt!", vielleicht liest aber doch noch jemand mit - aktuell ist er immer noch.
Peter Kröner ¶
4. Mai 2012, 10:35 Uhr
So könnte man es angehen, allerdings klappt das nur in neueren Browsern.
Klaus ¶
4. Mai 2012, 17:04 Uhr
Herzlichen Dank, genau so funktioniert es:
a[target^="_blank"]:not([href^="http://www.addthis.com"]) {..}