Wyskakująca ikonka na hover



Wyskakująca ikonka na hover

W dzisiejszym artykule znów powracamy do CSS-ów. Co prawda nie będzie to kolejna demonstracja możliwości CSS3 (artykuł o tym zapewne już wkrótce :) ), ale dzisiaj zaprezentuję moim zdaniem równie ciekawą, acz prostą technikę pozwalającą dodać trochę życia do linków – np. w menu.

Efektem końcowym będzie tzw. efekt bańki (ang. bubble) po najechaniu na link. Dodatkowo by uzyskać efekt wyskakującej ikonki na zdarzenie hover, posłużymy się techniką zwaną „sprite”.

Zobacz DEMO

Zacznijmy od HTML

Wyjściowa struktura dokumentu HTML jest stosunkowo prosta – mamy listę w której znajdują się cztery linki, z którymi będziemy pracować dalej:

  1.  <div id="content">
  2.  
  3.   <ul id="links">
  4.     <li>
  5.    <a class="icon pierwszy" href="#">Pierwszy mamut</a>
  6.     </li>
  7.     <li>
  8.    <a class="icon drugi" href="#">Drugi mamut</a>
  9.     </li>
  10.     <li>
  11.    <a class="icon trzeci" href="#">Trzeci mamut</a>
  12.     </li>
  13.     <li>
  14.    <a class="icon czwarty" href="#">Czwarty mamut</a>
  15.     </li>
  16.   </ul>
  17.  
  18.  </div>

Przygotowanie ikonek

Na potrzeby naszej listy będziemy potrzebować 8 ikonek. 4 małych i 4 dużych. Zasada jest taka, że po najechaniu na link mała ikonka zostanie zastąpiona dużą.

Aby jednak nie tworzyć 8 plików i niepotrzebnie nie podmieniać ich po najechaniu, można zastosować sprite i umieścić je wszystkie w jednym pliku. Dzięki temu zabiegowi nie musimy wysyłać 8 żądań, sumaryczna wielkość jednego pliku jest mniejsza niż 8 osobnych, a dodatkowo unikamy sytuacji, gdy na zdarzeniu hover użytkownik musi czekać na przeładowanie/wczytanie się ikonki.

Wynikowy plik graficzny wyglada następująco:

plik sprite na potrzeby tutorialu dla alchemycode

Połączenie elementów w CSS

Skoro mamy już gotowy dokument HTML i przygotowany odpowiednio plik graficzny zawierający wszystkie ikonki, czas połączyć oba te elementy, by uzyskać pożądany elekt.

W pierwszej kolejności definiujemy style by nasza lista była położona horyzontalnie. Następnie wszystkim linkom o klasie „icon” ustawiamy za tło nasz plik graficzny, dodatkowo ustawiając im stalą szerokość i wysokość, która jest równa rozmiarowi dużej ikonki.

  1.  #links {
  2.   list-style: none;
  3.   margin: 0px;
  4.   padding: 0px;
  5.  }
  6.  
  7.  #links li {
  8.   display: inline-block;
  9.   margin: 0px;
  10.   padding: 0px;
  11.  
  12.  }
  13.  
  14.  #links li a.icon {
  15.   background: url(images/sprite.jpg) no-repeat;
  16.   display: block;
  17.   width: 128px;
  18.   height: 130px;
  19.   text-indent: -9999px;
  20.  }

Skoro już mamy ustawiony obszar widzialny dla linków (zdefiniowana wcześniej wysokość i szerokość z tłem graficznym), jedyne co pozostaje to ustalić współrzędne dla każdej ikonki, tego obszaru widzialnego.

  1.  #links li a.pierwszy {
  2.   background-position: -128px 0px;
  3.  }
  4.  #links li a.drugi {
  5.   background-position: -128px -140px;
  6.  }
  7.  #links li a.trzeci {
  8.   background-position: -128px -275px;
  9.  }
  10.  #links li a.czwarty {
  11.   background-position: -128px -410px;
  12.  }

I na koniec definiujemy style dla hover, czyli tak naprawdę przesuwamy obszar widzialny pliku graficznego na miejsce w którym znajduje się powiększona wersja każdej z ikonek.

  1.  #links li a.pierwszy:hover {
  2.   background-position: 0px 0px;
  3.  }
  4.  #links li a.drugi:hover {
  5.   background-position: 0px -140px;
  6.  }
  7.  #links li a.trzeci:hover {
  8.   background-position: 0px -275px;
  9.  }
  10.  #links li a.czwarty:hover {
  11.   background-position: 0px -410px;
  12.  }

Zobacz DEMO

I to tyle! tak naprawdę zaledwie kilka linijek styli i odpowiednio spreparowany plik graficzny i możemy uzyskać dość ciekawy efekt, naprawdę małym kosztem, a tym samym dostać +1 do usability :)

Related Posts with Thumbnails
Prześlij dalej:
Digg Google Bookmarks reddit Mixx StumbleUpon Technorati Yahoo! Buzz DesignFloat Delicious BlinkList Furl

10 komentarze do “Wyskakująca ikonka na hover”

commenter

Fajny sposób. Właśnie najlepsze w tym jest to, że to jest wszystko w jednym pliku (chodzi o te mamuty).

Super podpowiedź. Idąc krok dalej można wszystkie sprites umieścić w jednym pliku… oszczędzamy w ten sposób na wywołaniach i ilości podlinkowanych plików…. warto popatrzeć czasem w źródła dużych portali – wiele guziczków, teł itp jest w ten sposób coraz częściej robione :)

commenter

faktycznie wiele portali wykorzystuje sprite :)

hmm pod chromem nic sie nie dzieje :D

commenter

odpalam chrome (v. 5.0.375.127) i się jednak dzieje tak jak powinno :)

Super trik :) dzięki :)

Fajny, prosty artykuł, tylko powiedz mi po co jest użyty „text-indent:-9999px;” a i można by jeszcze do stylów „a” dodać „outline: none” żeby przy klikaniu ramka nie wyjeżdżała za ekran.

commenter

Przecież to jest zwyczajny rollover w znaczniku a z hover’em posiadający atrybut
background-positionna minusie. W sumie tak jak użytkownika Maciek też jestem ciekaw po co użyłeś text-indent: -9999px;

commenter

I wszystko się zgadza rollover na linku z przesunięciem obszaru widzialnego grafiki w tle – dokładnie tak jak zostało to opisane :)
Jeżeli chodzi o text-indent: to zauważmy że linki posiadają tekst: Pierwszy mamut, Drugi mamut itd – zastosowanie tego atrybutu pozwoli na przesunięcie tego tekstu, czyniąc go niewidocznym dla użytkownika, a jednocześnie widocznym dla wyszukiwarek.

Fajnie było by dołączyć do tego opcję :visited po której otwierał by się obrazek na środku ekranu w pełnym rozmiarze.

Zostaw komentarz:

Imię (wymagane):
Email:
Strona www:
Komentarz (wymagany):
XHTML: W komentarzach możesz korzystać z nastepujących tagów: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
-