Tooltipps mit CSS erstellen

Autor
Matthias Apsel (Impressum)
veröffentlicht
16.2.2010
letzte Änderung
20.2.2010

Zusammenfassung

Dieser Artikel beschreibt, wie man mithilfe von CSS Tooltipps erzeugen kann, deren Gestaltung man im Gegensatz zu den "echten" Tooltipps selbst in der Hand hat.

Grundsätzliches

Tooltipps oder auch Quickinfos sind kleine Fenster, die in der Nähe des Mauszeigers weitere Informationen zu einem Objekt anzeigen. In HTML gibt es verschiedene Möglichkeiten, Tooltipps anzuzeigen, zum Beispiel durch das title-attribut. Das Aussehen des Tooltipps wird vom Browser beeinflusst und lässt sich mit HTML oder CSS nicht verändern.

<p> ... zum Beispiel durch das <span title="weitere Informationen zu diesem Objekt">title</span>-attribut ... </p>

... zum Beispiel durch das title-attribut ...

Wie auf Tooltipps aufmerksam machen?

Der User sollte auf vorhandene Tooltipps aufmerksam gemacht werden. Dies kann zum Beispiel durch eine farbliche Veränderung oder Unterstreichung des entsprechenden Textes geschehen, da dies an einen Link erinnert. Auch eine Veränderung des Cursors ist möglich.

<p> ... zum Beispiel durch das <span class="tooltipp" title="weitere Informationen zu diesem Objekt">title</span>-attribut ... </p>
.tooltipp { color: green; text-decoration: underline; cursor: help; }

... zum Beispiel durch das title-attribut ...

Die Pseudoelemente :before und :after

Die Pseudoelemente :before und :after fügen vor oder nach einem Element beliebigen Inhalt ein, der mit content angegeben wird. Hierbei kann es sich um Text, länderspezifische Anführungszeichen, Grafiken oder Zähler handeln. Zum Beispiel ist die Nummerierung der Überschriften dieses Dokuments mit :before realisiert oder die Doppelpunkte hinter Autor mit :after. Häufig wird eine Grafik via :before vor einem Link platziert, um darzustellen, dass es sich um einen externen Link handelt.

<h1>wichtige Überschrift</h1>
h1:before { content: url(pfeil-links.gif) " "; } h1:after { content: " " url(pfeil-rechts.gif); }

Wichtige Überschrift

Mausover

Der Tooltipp soll erst erscheinen, wenn man mit der Maus über das entsprechende Objekt fährt. Dies kann durch die Verwendung der dynamischen Pseudoklasse :hover erreicht werden. Meist wird :hover für Hyperlinks eingesetzt, es ist aber für alle Elemente zugelassen.

<h1>wichtige Überschrift</h1>
h1:hover:before { content: url(pfeil-links.gif) " "; } h1:hover:after { content: " " url(pfeil-rechts.gif); }

Wichtige Überschrift

Die Bewegung ist natürlich unschön. Sie kommt zum einen durch die Verwendung von :before zustande und zum anderen durch Tricksereien, um die Grafiken auf die Höhe der Überschrift zu positionieren.

:hover:after

Durch obige Überlegungen kommen wir zu der Erkenntnis, dass :hover:after das Gewünschte leisten kann.

<p>2 ist die kleinste und gleichzeitig die einzige <span class="tooltipp" id="gerade">gerade</span> <span class="tooltipp" id="primzahl">Primzahl</span>.</p>
.tooltipp { color: green; text-decoration: underline; cursor: help; } #gerade:hover:after { content: "Eine Zahl ist gerade ..." } #primzahl:hover:after { content: "Eine Zahl, die genau ..." }

2 ist die einzige gerade Primzahl.

Positionierung des Tooltipp

Der Tooltipp muss jetzt aus dem Fließtext entfernt werden. Dies erreichen wir durch eine absolute Positionierung. Absolut positionierte Elemente liegen über den anderen Elementen. Sie werden am Elternelement ausgerichtet, falls dies auch durch eine Angabe von position positioniert wurde, sonst am Viewport.

Der Tooltipp soll sich an seinem Text ausrichten. Also muss der Text relativ positioniert werden, der Tooltipp absolut.

<p>2 ist die kleinste und gleichzeitig die einzige <span class="tooltipp" id="gerade">gerade</span> <span class="tooltipp" id="primzahl">Primzahl</span>.</p>
.tooltipp { color: green; text-decoration: underline; cursor: help; position: relative; } .tooltipp:hover:after { position: absolute; bottom: 1em; left: 1em; }

2 ist die einzige gerade Primzahl.

Gestaltung des Tooltipp

Der Tooltipp selbst kann jetzt mithilfe von CSS gestaltet werden und durch die Veränderung der Positionsangaben verschoben werden.

<p>2 ist die kleinste und gleichzeitig die einzige <span class="tooltipp" id="gerade">gerade</span> <span class="tooltipp" id="primzahl">Primzahl</span>.</p>
.tooltipp:hover:after { position: absolute; bottom: 1em; left: 1em; width: 20em; color: blue; background-color:silver; border: 1px solid red; }

2 ist die einzige gerade Primzahl.

Browsertests

Firefox 3.6
wie gewünscht
Internetexplorer 8.0
ok, vererbt die Unterstreichung von .tooltipp an .tooltipp:hover:after
IE < 8
keine Funktionalität
Safari 4.0
ok, vererbt die Unterstreichung von .tooltipp an .tooltipp:hover:after
Opera 10.10
keine Funktionalität
Google Chrome 4.0
ok, vererbt die Unterstreichung von .tooltipp an .tooltipp:hover:after

Kosmetik

Einige Browser vererben die Unterstreichung des Textes an den Tooltipp. Das ist vielleicht unerwünscht. Allerdings verschafft .tooltipp:hover:after {text-decoration: none;} keine Abhilfe.

Die Verwendung von border-bottom anstelle von text-decoration löst dieses kosmetische Problem.

<p>2 ist die kleinste und gleichzeitig die einzige <span class="tooltipp" id="gerade">gerade</span> <span class="tooltipp" id="primzahl">Primzahl</span>.</p>
.tooltipp { color: green; border-bottom: 1px dotted green; cursor: help; position: relative; }

2 ist die einzige gerade Primzahl.

Opera

Aufgrund eines Bugs zeigen die Opera-Browser < 10.5 die Tooltipps nicht an. Wenn man nicht die Position des Tooltipps, sondern seinen Abstand zum Elternelement festlegt, zeigt auch Opera die Tooltipps an.

<p>2 ist die kleinste und gleichzeitig die einzige <span class="tooltipp" id="gerade">gerade</span> <span class="tooltipp" id="primzahl">Primzahl</span>.</p>
.tooltipp:hover:after { margin-top: -2.5em; margin-left: -1em; }

2 ist die einzige gerade Primzahl.

Interessant ist die unterschiedliche Interpretation von margin-left: -1em;: Firefox in Version 3.6 geht vom linken Rand des Elternelements aus; IE, Safari, Opera und Chrome vom rechten.

Firefox margin Darstellung im Firefox 3.6

Opera margin Darstellung in Opera 10.10

Wer sich darin stört, kann für den Firefox besondere Angaben machen, etwa durch die Verwendung von
:root .tooltipp{margin-left: 1em};. Allerdings ist das meiner Meinung nach zuviel des Guten.

Nachteiliges

Bei ungünstiger Lage des Textes kann es sein, dass die Tooltipps ganz oder teilweise außerhalb des sichtbaren Bereiches liegen.

2 ist die einzige gerade Primzahl.

Eine differenzierte Gestaltung des Tooltipp-Textes etwa durch gewollte Zeilenumbrüche oder Hervorhebungen durch Fettschrift ist ebenfalls nicht möglich.

Dadurch dass kein title-Attribut verwendet wird, erreicht man, dass die Information nicht doppelt angezeigt wird. Allerdings wird sie bei ausgeschaltetem CSS überhaupt nicht angezeigt.

Eine Lösung, die dies ermöglicht, findet man beispielsweise unter http://1ngo.de/web/infobox.html, sie erfordert eine etwas andere Herangehensweise.

Referenzen

N-fobox, 21st Century Style, 16.02.2010
www.css-hack.de, 19.02.2010

Testergebnisse

Firefox 3.6
wie gewünscht
Internetexplorer 8.0
wie gewünscht
IE < 8
keine Funktionalität, da diese :after nicht interpretieren
Safari 4.0
wie gewünscht
Opera 10.10
wie gewünscht
Google Chrome 4.0
wie gewünscht