Tooltip CSS

W tej części kursu CSS dowiemy się w jaki sposób utworzyć Tooltip wykorzystując do tego celu wyłącznie język CSS.

Czym jest Tooltip?

To dodatkowa informacja dla użytkownika, która pojawiaj się w określonych sytuacjach, np. w momencie gdy użytkownik najedzie kursorem myszki na dany element HTML.

Naszym celem będzie stworzenie układu elementów HTML, który został przedstawiony poniżej:

Pierwsza wersja naszego układu elementów HTML będzie zawierała pewną niedogodność, którą postaramy się wyeliminować w ostatnim kroku tej części kursu CSS.

Budowę Tooltip zaczniemy od umieszczenia odpowiednich elementów HTML w części body dokumentu HTML.

<body>

  <ul>
    <li>
      <a href="#">Strona - 1</a>
    </li>

    <li>
      <a href="#">Strona - 2</a>
    </li>

    <li>
      <a href="#">Strona - 3</a>
    </li>

    <li>
      <a href="#">Strona - 4</a>
    </li>
  </ul>

</body>

Do części body dodaliśmy listę ul, która stanowi strukturę pionowego menu, z którą mogliśmy zapoznać się w dziale drugim. Do naszych elementów HTML dodamy właściwości CSS, które mogliśmy poznać w poprzednich częściach tego kursu CSS.

Tworzymy następujące reguły CSS:

ul {
  list-style-type:none;
  margin:0;
  padding:0;
  width:300px;
  border:3px solid #FDD700;
}

ul li a {
  display:block;
  padding:15px;
  border-top:1px solid #FDD700;
  color:#00F;
  text-align:center;
  text-decoration:none;
  background-color:#EEE;
}

ul li:first-child a {
  border-top:none;
}

ul li a:hover {
  background-color:#FFF;
}

Rezultat:

Naszym celem jest dodanie, do przedstawionego układu elementów HTML, dodatkowego elementu, który będzie widoczny w momencie gdy najedziemy kursorem myszki na element li. Ten dodatkowy element HTML będzie zawierał w sobie krótką informację w postaci tekstu.

Dodajemy elementy div do elementów li, w których to elementach div umieszczamy interesujący nas tekst, który będzie informacją o tym, co możemy zobaczyć na danej stronie, do której prowadzi odnośnik, czyli element a, który znajduje się w danym elemencie li.

<body>

  <ul>
    <li>
      <a href="#">Strona - 1</a>
      <div>Znajdziesz tutaj zagadnienia dotyczące...</div>
    </li>

    <li>
      <a href="#">Strona - 2</a>
      <div>Zobaczysz tutaj ciekawe przykłady, które dotyczą...</div>
    </li>

    <li>
      <a href="#">Strona - 3</a>
      <div>Poznasz tutaj ciekawe historie, które...</div>
    </li>

    <li>
      <a href="#">Strona - 4</a>
      <div>Zobaczysz tutaj zdjęcia ciekawych...</div>
    </li>
  </ul>

</body>

Rezultat:

  • Strona - 1
    Znajdziesz tutaj zagadnienia dotyczące...
  • Strona - 2
    Zobaczysz tutaj ciekawe przykłady, które dotyczą...
  • Strona - 3
    Poznasz tutaj ciekawe historie, które...
  • Strona - 4
    Zobaczysz tutaj zdjęcia ciekawych...

Tworzymy następujące reguły CSS, które umożliwią nam utworzenie docelowego Tooltip.

ul li {
  position:relative;
}

ul li div {
  width:100%;
  line-height:2em;
  padding:15px;
  border:1px solid #000;
  background-color:#FAFAFA;
  position:absolute;
  top:0;
  left:105%;
}

Rezultat:

  • Strona - 1
    Znajdziesz tutaj zagadnienia dotyczące...
  • Strona - 2
    Zobaczysz tutaj ciekawe przykłady, które dotyczą...
  • Strona - 3
    Poznasz tutaj ciekawe historie, które...
  • Strona - 4
    Zobaczysz tutaj zdjęcia ciekawych...

Do elementu li została dodana właściwość position:relative; dzięki czemu każdy element HTML, który znajdzie się w zawartości elementu li, oraz który będzie zawierał w sobie właściwość position:absolute; będzie pozycjonowany względem elementu li. Wspomnianym elementem, w naszym układzie elementów HTML, jest element div, ponieważ do tego elementu dodaliśmy właściwość position wraz z wartością absolute. Do wspomnianego elementu div dodaliśmy również właściwość left:105%; która odsunęła element div o 105% wartości szerokości jego elementu potomka, który posiada w sobie właściwość position:relative; czyli elementu li.

Czas sprawić, aby element div nie był wyświetlany. Efekt ten uzyskamy za pomocą właściwości display:none; Do naszego kodu dodamy również regułę CSS, która sprawi, że element div będzie dla nas widoczny, tylko w sytuacji gdy najedziemy kursorem myszki na jego rodzica, czyli na element li. Wspomniany efekt uzyskamy za pomocą reguły ul li:hover div oraz właściwości display:block;.

ul li div {
  width:100%;
  line-height:2em;
  padding:15px;
  border:1px solid #000;
  background-color:#FAFAFA;
  position:absolute;
  top:0;
  left:105%;
  display:none;
}

ul li:hover div {
  display:block;
}

Rezultat:

  • Strona - 1
    Znajdziesz tutaj zagadnienia dotyczące...
  • Strona - 2
    Zobaczysz tutaj ciekawe przykłady, które dotyczą...
  • Strona - 3
    Poznasz tutaj ciekawe historie, które...
  • Strona - 4
    Zobaczysz tutaj zdjęcia ciekawych...

Niby wszystko jest w porządku, ponieważ utworzyliśmy układ elementów HTML, który został zaprezentowany na początku tej części kursu CSS, lecz nie do końca wszystko jest ok.

Problemem może być element div, który został umieszczony w elemencie li, oraz który został w tym elemencie ukryty za pomocą właściwości display:none; Dla niektórych robotów, które indeksują naszą stronę internetową, nasz układ elementów HTML może być mało "przyjazny", dlatego czas go trochę zmodyfikować.

W języku HTML 5 istnieje atrybut, który nazywa się data. Za pomocą niego możemy określić własny atrybut dla danego elementu HTML, wystarczy że po słowie data oraz myślniku, utworzymy własną nazwę dla naszego atrybutu, w którym będziemy chcieli umieścić jakąś informację i właśnie tą czynność wykonamy dla naszego układu elementów HTML.

<body>

  <ul>
    <li data-tooltip="Znajdziesz tutaj zagadnienia dotyczące...">
      <a href="#">Strona - 1</a>
    </li>

    <li data-tooltip="Zobaczysz tutaj ciekawe przykłady, które dotyczą...">
      <a href="#">Strona - 2</a>
    </li>

    <li data-tooltip="Poznasz tutaj ciekawe historie, które...">
      <a href="#">Strona - 3</a>
    </li>

    <li data-tooltip="Zobaczysz tutaj zdjęcia ciekawych...">
      <a href="#">Strona - 4</a>
    </li>
  </ul>

</body>

Czas zmodyfikować nieco nasze reguły CSS, aby uzyskać finalny efekt. Zapominamy o regułach CSS, które dotyczyły elementu div. Właściwości CSS z reguły ul li div przenosimy do nowej reguły CSS:

ul li:hover:before {
  content:attr(data-tooltip);
  width:100%;
  line-height:2em;
  padding:15px;
  border:1px solid #000;
  background-color:#FAFAFA;
  position:absolute;
  top:0;
  left:105%;
}

Reguła ul li:hover:before dodaje dodatkowy element HTML do początkowej zawartości elementu li będącego potomkiem elementu ul, gdy na dany element li najedziemy kursorem myszki. Zawartością dodatkowego elementu HTML będzie tekst, jaki umieściliśmy w atrybucie data-tooltip, stąd też zapis content:attr(data-tooltip);

Rezultat:

Kod całego dokumentu HTML został umieszczony poniżej:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Darmowy Kurs CSS</title>

    <style>
      ul {
        list-style-type:none;
        margin:0;
        padding:0;
        width:300px;
        border:3px solid #FDD700;
      }

      ul li {
        position:relative;
      }

      ul li a {
        display:block;
        padding:15px;
        border-top:1px solid #FDD700;
        color:#00F;
        text-align:center;
        text-decoration:none;
        background-color:#EEE;
      }

      ul li:first-child a {
        border-top:none;
      }

      ul li a:hover {
        background-color:#FFF;
      }

      ul li:hover:before {
        content:attr(data-tooltip);
        width:100%;
        line-height:2em;
        padding:15px;
        border:1px solid #000;
        background-color:#FAFAFA;
        position:absolute;
        top:0;
        left:105%;
      }
    </style>
  </head>

  <body>

    <ul>
      <li data-tooltip="Znajdziesz tutaj zagadnienia dotyczące...">
        <a href="#">Strona - 1</a>
      </li>

      <li data-tooltip="Zobaczysz tutaj ciekawe przykłady, które dotyczą...">
        <a href="#">Strona - 2</a>
      </li>

      <li data-tooltip="Poznasz tutaj ciekawe historie, które...">
       <a href="#">Strona - 3</a>
      </li>

      <li data-tooltip="Zobaczysz tutaj zdjęcia ciekawych...">
        <a href="#">Strona - 4</a>
      </li>
    </ul>

  </body>
</html>

W następnej części kursu utworzymy Animowany Tooltip CSS3, który dodamy do pionowego menu, które utworzyliśmy w dziale drugim tego kursu CSS.