IE:hover {také-pro:IE5;}
Jedná se o doplnění článku IE:hover {nyní:jednodušeji;}, tentokrát i s podporou IE 5.0 a 5.5!
Kdo nevěří, ať tam běží – aneb pár dnů laborování přineslo své ovoce. A to takové, že jsem po alchymii s evaly a oddělováním separátních funkcí a ovladačů událostí pro eliminaci anonymní definice funkce (kde IE 5.x kolabovalo na složených závorkách) vše vzdal, a nechal to na původním autorovi ;)
Dobře jsem udělal, když někdo umí, tak umí, za pár minut bylo řešení na světě. Jednoduché, chytré, lišácké. To bych na to mohl koukat do zimy, a nepřišel bych na to…
element {
background-color: expression(
this.onmouseover = new Function("this.className += ' hover';"),
this.onmouseout = new Function("this.className = this.className.replace(' hover', '')")
);
}
Je tady i upravená ukázka.
Hodně zábavy s implementací!
Středa, 20. 7. 2005 6.31 | Trvalý odkaz | Trackback






[1] Titlak
Tak som to vyskusal a je to uplne super. Dik za dobre riesenie.
20. 7. 2005 8.47
[2] tark
WOW !! Dík ;)
20. 7. 2005 10.50
[3] HejTi
Též děkuji za řešení – o něco podobného jsem se pokoušel loni o prázdninách – dělal jsem to pomocí behavior – fungovalo to, akorát MSIE 6 vždycky vyhodilo hlášku, že stránka obsahuje nebezpečný odkaz, takže jsem to vyhodil jako nepoužitelné řešení. Tohle je ale daleko lepšejší:)
Rád bych si našel čas na implementaci tohoto řešení do pixyho menu: http://pixy.cz/…csshiermenu/ ale pokud mě někdo předběhne, nebudu se zlobit:)
Jinak jsem to zkoušel a fungovalo mi to v MSIE 5+ – čtyřka bohužel ne, ale to už stejně nevadí.
20. 7. 2005 10.54
[4] TimJ
Má někdo možnost vyzkoušet náročnost této fičurky na slabším starším stroji? Stejně většinou IE5 bejvá právě na starejch mašinách…
20. 7. 2005 10.57
[5] halogan
Nevim proc, ale na IE6 tady to jaksi nefunguje (ukazka). Nevim, zda to neni nejakym zakazem, ale to asi tezko :/
20. 7. 2005 21.27
[6] Jan Brašna
[5] Tak zjišťuj. Mně to jde i na nejnižší nastavení zabezpečení.
20. 7. 2005 22.41
[7] Jan Brašna
[4] Na P166, asi 64MB RAM, W98SE, IE 5.5 žádný problém.
21. 7. 2005 15.35
[8] Zdenous
Tak tohle je parada. Diky.
21. 7. 2005 22.27
[9] Jan Bláha
Díky moc, tohle se mi určitě bude hodit!
22. 7. 2005 8.36
[10] Shaman
Bezva, takhle už to má smysl, bez té 5.5 to moc byužití nemělo…
22. 7. 2005 9.20
[11] Fred
Kdo by to byl řekl new Function, dobrý.
22. 7. 2005 12.49
[12] Jan Brašna
[10] Jasně, ale stejně to Honzo musíš mít vše funkční (flyout/dropdown a podobné) i bez tohoto, tudíž aby se dalo víceúrovňovou navigací dostat i z první úrovně…
[11] Mi povídej… Jsem do toho zíral snad 5 hodin a zkoušel stašný kejkle, pak jsem se musel smát, když jsem viděl tohle ;)
22. 7. 2005 15.24
[13] Fred
Taky jsem stím dělal hrozný hara-kiri a pár drobností tam možná být vůbec nemusí. Ten regulár a ta background-color. Ta new Function mě fakt dostala. Místo background-color může být cokoliv, tím pádem pokud někdo není purista na validnost css může to natvrdo narvat do stylu třeba takhle hover:expression(this.onmouseover=new Function(„this.className+=' hover';“),this.onmouseout=new Function(„this.className=''“)); jiné prohlížeče než IE neví co to je a tak to přeskočí a funguje to taky.
22. 7. 2005 16.52
[14] Fred
PArdon chyba, zkopíroval jsem nahoru nefumční polotovar, má to být takhle hover:expression(this.onmouseover=new Function(„this.className=‚hover‘;“),this.onmouseout=new Function(„this.className='';“));
22. 7. 2005 16.54
[15] Jan Brašna
[13][14] Regulár tam být musí, neboť ty třídu nastavuješ a rušíš, kdežto ten kód výše ji přidává a ubírá (nezapomínej na vícenásobné třídy). Ale s tou vlastností máš pravdu, stejně se jedná o stylopis-nestylopis, tam to nevadí.
PS: Na vložení kódu tady máme nástrojů, zkus je používat ;)
22. 7. 2005 20.30
[16] Arkady
ad [3] to je tim ze pri vetsim zabezpeceni IE jsou soubory .htc nutne potvrdit…jednoducha obezlicka, staci nastavit na webserveru spravne zasilani mime type pro soubory htc: text/x-component pak uz by behaviours v htc souborechto mely fachcit bez vyhazovani varovnych hlaseni
27. 7. 2005 10.28
[17] Jan Brašna
[16] Na to jsem upozorňoval již v minulé části, je tomu tak od SP2.
27. 7. 2005 11.19
[18] Jan Brašna
Super, tak to zatím funguje i v IE7b1 (neboť zde pochopitelně stále chybí podpora většiny selektorů a pseudotříd).
29. 7. 2005 2.26
[19] peta
Expression, jak je napsane, je pomale. Pro UL LI verzi jsem pouzil toto:
Zajimave na tom je, ze mi to funguje svizne, kdyz se to pri hover anuluje.
13. 11. 2005 19.02
[20] los.
Super riešenie, ale ako už napísal peta, takýto expression je príliš pomalý, pretože sa vykonáva napríklad aj pri každom pohnutí myšou nad elementom. Pritom by stačilo, keby sa vykonal iba raz.
Veľké zrýchlenie sa dá dosiahnuť pridaním prvého a posledného riadku v expression nasledovne:
31. 12. 2005 16.50
[21] peta
Chyba, viz LOS… Ten script vyzkousim, prave predelavam editor menu… Ale, co jsem si vsiml, tam se pri kazdem pohybu mysi soucasne udela this.classname+= coz v dusledku znamena, ze nejdriv se udela xxx hover… pak xxx hover hover xxx hover hover hover a nakonec se replacuje treba retezec o 10.000 znacich :)
17. 1. 2006 14.03
[22] Jan Brašna
Fajn, určitě dejte vědět, pokud někdo dáte dohromady efektivnější a korektnější řešení.
17. 1. 2006 17.40
[23] peta
>>jan To od losa je podle mne hotove. Jsem to asi 2 dny po tom vyzkousel a v poho, funguje to skvele. v podstate misto NAN by mohl pouzit Boolean(), ale to neni podstatne. Jenom to pricitani hoveru si nejsem ted uplne jist, co to presne dela, aby fakt nevznikal retezec prvniclass x x x x x
25. 1. 2006 9.43
[24] Blog nadšeného kodéra » Hover efekt v IE
[…] Pravděpodobným autorem článku je Klaus Hartl, zajímavé mohou být i komentáře pod článkem Honzy Brašny. […]
9. 5. 2006 8.54
[25] peta
ted jsem zrovna resil neco podobne, opet. Potreboval jsem nahradit className. Pouzil jsem regularni vyraz podobny tomuto: reg = new RegExp(„(^“+classN+" )|( „+classN+“ )( „+classN+“$)|(^„+classN+“$)„,“g"); o.className.replace(reg,'');
k regularnimu vyrazu: chci nahradit vsude, kde se dana classname vyskytuje, ale nechci prepsat treba dalsi classname, treba: classN = aaa class = „aaa aaa bbbaaa aaabbb bbbaaabbb aaa“
a ja potrebuji odstranit jen svoje aaa, tj.
Nijak to nejde zkratit, aspon jsem nad tim jeste nepremyslel.
… je to komentar k napadu LOSa a prikazu replace. ten totiz pocita s tim, ze pridava class „hover“ na konec retezce a dalsi 3 pripady uplne ignoruje. Vysledkem muze byt nefunkcnost v pripade, ze je class prazdne, treba. Pak se mu to ta, muze zdvojit.
4. 8. 2007 18.10