Komischer Titel, ich weiß, aber darum gehts:
Heute habe ich mal wieder über etwas gestaunt, das der Internet Explorer nicht kann. Folgendes Szenario: Ihr habt ein Bild auf dem unter anderem ein Schriftzug steht, z. B. “Jetzt hier Registrieren!”. Weil die Schrift mit tollen Effekten und dergleichen ausgestattet ist, bindet ihr sie direkt ins Bild ein. Im Frontend wird das Bild über ein img
-Tag ausgegeben und soll jetzt verlinkt werden. “Ok..”, dachte ich mir, “..leg ich halt einen transparenten Link darüber!” – Denkste!
Hier erst einmal ein Beispiel, damit ihr auch versteht, was ich meine. Wie nehmen ein Bild und einen Link und packen einen Wrapper darum. Der Wrapper bekommt position:relative
, damit wir den Link per position:absolute
über das Bild schieben können. Der Link soll natürlich transparent sein, wir wollen ja nicht irgendwie das Bild “übermalen” sondern nur einen anklickbaren Bereich schaffen, also wird der Text versteckt.
Problembeispiel (alle IE-Versionen)
HTML
1 2 3 4 | <div class="wrapper"> <img src="http://www.getfirebug.com/img/firebug-logo.png" alt="Bild"/> <a href="http://www.getfirebug.com">Link</a> </div> |
CSS
1 2 3 4 5 6 7 8 9 10 11 12 | .wrapper { position:relative; width:293px; } a { height:70px; position:absolute; right:0; text-indent:-9999px; width:185px; top:0; } |
Ergebnis
Ich habe die wichtigen Bereiche nochmal hervorgehoben, der blaue Rahmen umrandet den Wrapper, der rote den Link.
Natürlich ist diese Denkweise nicht verkehrt, sie hat nur einen Haken: In allen von mir getesteten Versionen des Internet Explorers (IE6-9) hat das nicht funktioniert! Im IE kann man den Link einfach nicht anklicken, alle anderen Browser haben damit absolut kein Problem.
Ich dachte erst es liegt daran, dass das Bild den Link im IE irgendwie überdeckt, weil ich kein z-index
benutze. Dann habe ich versucht den Text über padding-top
und overflow-hidden
zu verstecken und dachte der IE eventuell damit besser zurecht. Nichts hat geholfen.. wenn ich den Text nicht versteckte, konnte man nur den Text anklicken, nicht aber den Rest der klickbaren Fläche. Erst als ich das Bild aus dem Quellcode entfernt hatte, konnte man ganz plötzliche die komplette transparente Fläche anklicken.
Natürlich war ich schon wieder kurz vorm Platzen.
Lösung
Ein ähnliches Problem mit nicht anklickbaren Links hatte ich zwar schon mal im IE6 aber ich hätte nie gedacht, dass IE8 und 9 hier immer noch solche Probleme haben. Aber was soll’s, eine Lösung musste her und es gibt zwei Wege, wie man das Problem umgehen kann..
- das Bild nicht als
img
-Tag einbinden, sondern dem Wrapper/Link alsbackground-image
zuweisen - dem Link ein transparentes Hintergrundbild verpassen
In meinem Fall war letztere Variante günstiger, ich würde aber prinzipiell eher zu Variante eins raten, da sie sauberer ist. Und ja, sobald der Link eine Hintergrundfarbe oder ein Hintergrundbild bekommt, kann man ihn auch im IE anklicken, verrückte Welt oder?
Beispiel mit Lösungsvariante 1
HTML
1 2 3 | <div class="wrapper"> <a href="http://www.getfirebug.com">Link</a> </div> |
CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | .wrapper { background:transparent url(http://www.getfirebug.com/img/firebug-logo.png) repeat 0 0; height:89px; position:relative; width:293px; } a { height:70px; position:absolute; right:0; text-indent:-9999px; width:185px; top:0; } |
Ergebnis
So klappts auch im IE!
PS: Firebug 1.6 wurde heute veröffentlicht, schnell runterladen oder updaten und die Beispiele damit untersuchen!