CSS Tipp: Klickbare Tooltips nur mit CSS3

Die kleinen Info-Boxen versorgen uns, nach dem wir mit der Maus drüber gefahren sind, mit noch mehr Informationen. Wie sich das nun mit CSS auch mit klicken realisieren lässt möchte ich in diesem Artikel zeigen.

Es ist bereits bekannt dass man mit Hilfe des CSS3-Selektors :checked unterscheiden kann ob ein Element angeklickt ist oder nicht. So kann ein Text-Element zwei verschiedene Zustände einnehmen zum Beispiel kursiv und nicht kursiv. Diese Eigenschaft können wir uns auch hier zu Nutze machen.

Demo oder Download

 

Ein Tooltip

Bevor wir ein Tooltip mit einem Klick sichtbar machen können, benötigen wir erstmal eines. Hier für benutzen wir ein einfaches HTML-Gerüst.

HTML

<div class=“tooltips“>
    Beispieltext
    <span>Beschreibung mit <a href=“#“ target=“_blank“>Link</a>!</span>
</div>Code-Sprache: HTML, XML (xml)

Da ich zusätzlich ermöglichen möchte das Texte formatiert und Links in den Tooltips eingefügt werden können, arbeite ich mit einem span Element. Oft wird der Inhalt einer Tooltip-Box aus dem title Text gelesen.

CSS

Kommen wir nun zum CSS unserer Tooltip-Box. Damit sich ein Info-Text vom restlichen Text abhebt, habe ich es gepunktet unterstrichen.

.tooltips {
    position: relative;
    display: inline;
    cursor: help;
    border-bottom:1px dotted;
}
.tooltips span {
    position: absolute;
    width:140px;
    color: #FFFFFF;
    font-size:0.8em;
    background: #000000;
    text-align: center;
    visibility: hidden;
    padding:5px 8px;
    border-radius: 6px;
}
.tooltips span:after {
    content: “;
    position: absolute;
    top: 100%;
    left: 50%;
    margin-left: -8px;
    width: 0; height: 0;
    border-top: 8px solid #000000;
    border-right: 8px solid transparent;
    border-left: 8px solid transparent;
}Code-Sprache: CSS (css)

Den letzten Teil habe ich bewusst weg gelassen, da er nur dafür sorgt dass die Box bei einem :hover-Event angezeigt wird.

Klick-Events mit CSS

Kommen wir nun zum knackpunkt oder ehr »klickpunkt« unseres Artikels. Lange Zeit war es nur mit Java-Script möglich ein Klick-Event auszulösen und darauf eine Aktion auszuführen. Seit CSS3 ist es möglich mit dem Checkbox-Hack zwischen einen angeklickten und nicht angeklickten Zustand zu unterscheiden. Wie praktisch!

Wie das ganze funktioniert

Der Trick funktioniert ganz einfach: Wir haben eine Checkbox mit zwei Zuständen. Die Zustände lassen sich nicht nur direkt sondern auch über ein Text-Label verändern.

Wir fügen also eine Checkbox und Label zu unserem HTML-Gerüst dazu. Somit sieht unser HTML nun so aus:

<i class=“tooltips“>
    <input type=“checkbox“ id=“clickevent_1″>
    <label for=“clickevent_1″>
        Beispieltext
    </label>
    <span>
        Beschreibung mit <a href=“#“ target=“_blank“>Link</a>!
    </span>
</i>Code-Sprache: HTML, XML (xml)

Wichtig: Es müssen immer verschiedene id’s gewählt werden.

CSS ergänzen

Es fehlen noch zwei Sachen die wir zum vorherigen CSS hinzufügen müssen. Als erstes sorgen wir dafür das unsere Checkbox nicht sichtbar ist. Im zweiten Teil fangen wir dann den Zustand checked ab und sorgen mit Hilfe des Nachbar-Selektors ~ dafür dass auf der selben Ebene das span Element sichtbar gemacht wird.

.tooltips input {
    display:none;
}

.tooltips input:checked ~ span {
    visibility: visible;
    opacity: 0.8;
    bottom: 25px;
    width:150px;
    left: 50%;
    margin-left: -82px;
    z-index: 999;
}Code-Sprache: CSS (css)

:focus als Alternative

Mit Hilfe des focus können wir dafür sorgen das die Tooltip-Box wieder verschwindet, sobald man außerhalb des Text-Labels geklickt hat. Dafür müssen wir in unserem CSS nur das :checked in ein :focus ändern – schon funktioniert es.

Nachteil dieser Methode ist, dass die Links darin nicht mehr anklickbar sind.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

6 Kommentare
  1. Fabian sagt:

    Hallo,
    neuer Versuch:
    Ich möchte innerhalb des span-tags noch einen weiteren span-Bereich einfügen z.B. weil ich einen Bereich innerhalb des Tooltips als Inline-Blockelement haben möchte. Wie schaffe ich es, dass er mir die Formatierung nicht nur dann akzeptiert, wenn ich sie als style direkt in den inneren span-Tag schreibe, sondern auch aus der CSS-Datei heraus?
    Danke!

    • Finn Dohrn sagt:

      Ah nun verstehe ich. :) Das müsste eigentlich durch den Selektor .tooltips span > span funktionieren. Sollte das so Problemen führen, weil er das auch auf das „vordere“ span Element ausübt, dann setze ein DIV Element in die Bubble und setze verwende den Selektor: .tooltips span div { display:inline; }. Durch das display:inline wandeln wir das Blockelement DIV dann einfach um. Kannst es ja mal probieren. :)

  2. Fabian sagt:

    Hallo,
    danke für den Beitrag, der mir schon viel weitergeholfen hat. Ein kleines Problem habe ich, wenn ich innerhalb des -Tags noch einen weiteren -Bereich einfüge, z.B. weil ich einen Bereich im Tooltip als Inline-Blockelement haben möchte. Wie schaffe ich es, dass er mir die Formatierung nicht nur dann akzeptiert, wenn ich sie als style direkt in die Seite schreibe, sondern auch aus der CSS-Datei heraus?
    Danke und viele Grüße,
    Fabian

    • Finn Dohrn sagt:

      Hallo! Leider sind einige Sachen in deinem Kommentar verschwunden: „-Tags“ und „-Bereich“. So verstehe ich leider nicht, was du erreichen willst. Den Style der Toolstips kannst du über die Klasse .tooltips in einer extra CSS Datei verändern.

  3. Christine sagt:

    Hallo,
    vielen Dank für den tollen Aritkel. Ich habe es eben eingebaut und es funktioniert eigentlich auch alles ganz super. Allerdings wüeder ich den Teil gerne nach unten aufklappen lassen und nicht nach oben. Ich habe schon versucht den Code entsprechen anzupassen aber schaffe es einfach nicht. Haben Sie hier auch eine Lösung?

    LG

    Christine

    • Finn Dohrn sagt:

      Hallo Christine,

      du musst nur diesen Teil hier im CSS umschreiben:

      .tooltips input:checked ~ span {
      visibility: visible;
      opacity: 0.8;
      bottom: -55px;
      width: 150px;
      left: 50%;
      margin-left: -82px;
      z-index: 999;
      }

      tooltips span:after {
      content: “;
      position: absolute;
      bottom: 100%;
      left: 50%;
      margin-left: -8px;
      width: 0;
      height: 0;
      border-bottom: 8px solid #000000;
      border-right: 8px solid transparent;
      border-left: 8px solid transparent;
      }

      Dann müsste die Box unten sein. :)

      Liebe Grüße, Finn