Voor de mensen die niet weten waar dit over gaat: Als je in IE6 de cache uit hebt staan, zoals de meeste mensen die webdevelopen in IE6 en vast ook vele anderen, reloaden -dus knipperen- de achtergrondplaatjes van block-style a elementen met de pseudoclasses :hover en :active, bij rollover en activate events.
Naar aanleiding van de HTC-hype alhier kwam ik ineens op het idee om voorgoed met dat geknipper klaar te zijn zonder daarmee andere browsers overhead te bezorgen.
Door middel van een htc behavior die in de CSS gedefineerd staat (die non-IE browsers dus negeren), wordt aan de buttons een script gekoppeld die bij de eerste rollover de 'standaard' pseudo-classes verwijderd.
Daarvoor in de plaats wordt een img element ingevoegd met dezelfde naam als de oorspronkelijke :hover background-image.
De onmouseout handler zorgt ervoor dat de .src van de 'replacement'-image swapped naar de 'idle' afbeelding. Een soortgelijke constructie is er voor de onactivate en deactive events.
(noot: scroll naar beneden voor nieuwste versie van htc)
Om het verschil te zien moet je wel IE6 hebben en je cache settings op "Every visit to the page"/"Elk bezoek aan de pagina" hebben staan. Een schoonheidsfoutje dat er nog wel in zit is dat de knop bij elke eerste rollover nog een laatste keer knippert, maar dat is eenvoudig uit te halen door een extra behavior aan de body te hangen die bij het onload event de reparatiewerkzaamheden al gaat verrichten.
Met fix: Hier
HTC: Hier
CSS: Hier
Zonder fix : Hier
of was dit er al
(ps ik weet niet of het nou #home.fix of .fix#home ,oet zijn maar het schijnt allebei te werken
)
[edit]
hmmz hij heeft wel wat meer kuren in de online versie zie ik nou. ik ga ff zo'n onload ding proberen, kijken of dat helpt
Naar aanleiding van de HTC-hype alhier kwam ik ineens op het idee om voorgoed met dat geknipper klaar te zijn zonder daarmee andere browsers overhead te bezorgen.
Door middel van een htc behavior die in de CSS gedefineerd staat (die non-IE browsers dus negeren), wordt aan de buttons een script gekoppeld die bij de eerste rollover de 'standaard' pseudo-classes verwijderd.
Daarvoor in de plaats wordt een img element ingevoegd met dezelfde naam als de oorspronkelijke :hover background-image.
De onmouseout handler zorgt ervoor dat de .src van de 'replacement'-image swapped naar de 'idle' afbeelding. Een soortgelijke constructie is er voor de onactivate en deactive events.
HTML:
1
2
3
4
5
| <td class="navcell"> <a id="home" class="fix" href="#home"> <span class="fir">Home</span> </a> </td> |
Cascading Stylesheet:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| .fix, .fixed{ width: 52px; height: 16px; margin: 0px; border: 1px; padding: 0px; line-height: 0px; font-size: 0px; } .navcell { background-image: url(leeg.gif); } .fir {display:none;} .navcell a { width: 52px; height: 16px; display:block; behavior: url(iecff.htc); } #home.fix {background-image: url(home.gif);} #home.fix:hover {background-image: url(home_down.gif);} #home.fix:active{background-image: url(home_act.gif);} |
(noot: scroll naar beneden voor nieuwste versie van htc)
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
| <attach event="onmouseover" handler="hover" /> <attach event="onmouseout" handler="unhover" /> <attach event="onactivate" handler="activate" /> <attach event="ondeactivate" handler="deactivate" /> <script type="text/javascript"> g_sState = "idle"; function hover() { if(element.id) { if(element.childNodes.length == 1) { oImg = document.createElement("img"); oImg.src = element.id+"_down.gif"; oImg.style.borderWidth = "0px"; element.appendChild(oImg); element.className = "fixed"; } else { if(g_sState == "idle") { g_sState = "hover"; element.childNodes[1].src = element.id+"_down.gif"; } } } } function unhover() { if(element.childNodes.length == 2) { if(g_sState == "hover") { element.childNodes[1].src = element.id+".gif"; g_sState = "idle" } } } function activate() { if(element.childNodes.length == 2) { element.childNodes[1].src = element.id+"_act.gif"; g_sState = "active"; } } function deactivate() { if(element.childNodes.length == 2) { element.childNodes[1].src = element.id+".gif"; g_sState = "idle"; } } </script> |
Om het verschil te zien moet je wel IE6 hebben en je cache settings op "Every visit to the page"/"Elk bezoek aan de pagina" hebben staan. Een schoonheidsfoutje dat er nog wel in zit is dat de knop bij elke eerste rollover nog een laatste keer knippert, maar dat is eenvoudig uit te halen door een extra behavior aan de body te hangen die bij het onload event de reparatiewerkzaamheden al gaat verrichten.
Met fix: Hier
HTC: Hier
CSS: Hier
Zonder fix : Hier
of was dit er al
(ps ik weet niet of het nou #home.fix of .fix#home ,oet zijn maar het schijnt allebei te werken
[edit]
hmmz hij heeft wel wat meer kuren in de online versie zie ik nou. ik ga ff zo'n onload ding proberen, kijken of dat helpt
[ Voor 31% gewijzigd door Genoil op 01-03-2004 11:47 ]