CSS image hover efekt
Prije hovera — IR (image replacement)
U tutorialu Poboljšanje sitea uz pomoć CSS-a (autor retro_one) uredno je opisana dobro strukturirana navigacija i pokazano je kako je urediti u CSS-u.
No ponekad obični fontovi i ograničenje samo na boje pozadina i
'bordera' elemenata ozbiljnom dizajneru nisu dovoljne za ostvarenje
zamišljenog izgleda. Metode za IR (image replacement) u CSS-u
već su dugo s nama, neke bolje a neke lošije, primarno zbog potrebe da
ljudi na web stranici vide fontove koje je dizajner i namijenio.
Idealni IR bi bio takav da zamijeni tekst iz nekog HTML elementa sa slikom — CSS background-image
— bez korištenja dodanih tagova (u većini slučajeva nested span elementa), a da očuva tekst tako da ih screen readeri čitaju. Jedan takav blizu idealnog je Accessible Image Replacement (Mike Rundle). Njegovu metodu koristim u ovom tutorialu.
Dva background-image
property-a
Sada, kad smo napravili IR, hover
pseudoselektorom možemo mijenjati taj element (obično link) kada se
preko njega prijeđe mišem. Na primjer, slika se može promijeniti (kako
je to ranije bilo veoma popularno JavaScriptom) tako da napišemo background-image: url(button.gif)
za element, a isto to sa drugom slikom (button_hover.gif) za element:hover
.
#mylink1 {
text-indent:-100em; /* image replacement Mike Rundle style */
text-decoration:none; /* potrebno da se skine underline */
display:block;
width:207px;
height:105px;
background: white url(button.gif) no-repeat;
}
#mylink1:hover { background-image: url(button_hover.gif); }
link test 1
Problem ove metode još jedan server request, odnosno to što
browser zatraži tu 'hover' sliku tek kad se prijeđe mišem preko nje.
Ako je slika veća, a veza na internet sporija, osjeti se jedan mali delay prije nego što se 'hover' slika pojavi i ta mala sitnica može biti veoma ružna.
Rješenje — background-position
Da izbjegnemo naknadni dohvat 'hover' slike možemo koristiti nekakav JS preload, ali postoji elegantno rješenje bez skriptiranja i (najvažnije) bilo kakvih hackova. Već smo napravili IR i time znamo veličinu elementa (linka) — kako znamo veličinu, 'zalijepimo' slike button.gif i button_hover.gif u jednu (prva na lijevoj strani, druga na desnoj) i hover efekt radimo tako da shiftamo taj background lijevo-desno sa background-position
propertyem.
button_both.gif:
#mylink2 {
text-indent:-100em;
text-decoration:none; /* potrebno da se skine underline */
display:block;
width:207px;
height:105px;
background: white url(button_both.gif) no-repeat;
}
#mylink2:hover { background-position: right; } /* oh yeah */
link test 2
Čija je to dovitljivost ne znam, naučio sam je proučavajući feature list sa Stylegala (tri kućice skroz desno, sredina).
Pros:
- no delay;
- no hacks;
- single button — single image;
- jednostavan CSS znači podržanost;
- ovisno o dizajnu može se postići relativna fleksibilnost veličine elementa.
Cons:
- Designer mora uložiti dodatan trud da 'slijepi' slike skupa.
Ako imate neka nova saznanja o tehnikama opisanim ovdje bit će mi drago da ih čujem. Oho, Red me već prosvijetlio (thnx). Poslao mi je link na ovaj CSS rollover generator na kojem koriste opisanu tehniku i zovu je sliding doors rollover (neš' ti čuda). Barem više nije anonimna :).
—Mislav