home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 June / Chip_2004-06_cd1.bin / chplus / interval / clanek03.htm < prev    next >
Encoding:
Extensible Markup Language  |  2004-05-01  |  16.5 KB  |  228 lines

  1. <?xml version='1.0' encoding='windows-1250'?>
  2. <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
  3. <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='cs' lang='cs'>
  4. <head>
  5. <meta http-equiv='Content-Type' content='text/html; charset=windows-1250' />
  6. <meta http-equiv='Content-language' content='cs' />
  7. <meta http-equiv='Cache-control' content='no-cache' />
  8. <meta http-equiv='Pragma' content='no-cache' />
  9. <meta http-equiv='Expires' content='0' />
  10. <meta name='robots' content='index, follow' />
  11. <meta name='googlebot' content='index, follow, noarchive' />
  12. <meta name='description' content='Interval.cz - Internetov² magazφn o webdesignu, v²voji webov²ch aplikacφ a e-komerci. VÜe podstatnΘ o technologiφch XHTML, HTML, CSS, DHTML, JavaScript, XML, .NET, ASP, PHP, Java, J2ME, SQL, WAP...' />
  13. <meta name='keywords' content='Interval' />
  14. <meta http-equiv='imagetoolbar' content='no' />
  15. <meta http-equiv='MSThemeCompatible' content='no' />
  16. <meta name='MSSmartTagsPreventParsing' content='true' />
  17. <meta name='ICBM' content='49.1915, 16.626' />
  18. <meta name='DC.Title' content='Interval.cz' />
  19. <meta name='DC.Identifier' content='http://interval.cz' />
  20. <meta name='DC.Language' content='cs' />
  21. <link rel='alternate' type='text/xml' title='RSS' href='http://interval.cz/__rss/rss.asp' />
  22. <link rel='shortcut icon' href='favicon.ico' />
  23. <link rel='first' href='http://interval.cz/clanek.asp?article=2561' />
  24. <link rel='prev' href='http://interval.cz/clanek.asp?article=2848' />
  25. <link rel='up' href='http://interval.cz/serial.asp?serial=27' />
  26. <link rel='home' href='http://interval.cz' />
  27. <link rel='search' href='http://interval.cz/search_ex.asp' />
  28. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/html4.css' />
  29. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/basic_all.css' />
  30. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/homepage_all.css' />
  31. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/articles_all.css' />
  32. <link rel='stylesheet' type='text/css' media='print' href='__services/styles/articles_print.css' />
  33. <title>Interval.cz - denn∞ o tvorb∞ webu a e-komerci</title>
  34. </head>
  35. <body class='interval interval-articles'>
  36. <div id='page-header'><div id='interval-logo'><h1 title='Interval.cz - denn∞ o tvorb∞ webu a e-komerci (logo & index link)'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz'>Interval.cz<span></span></a></h1></div><div id='advertising-page-header'></div><div class='page-maker'> </div></div>
  37. <div id='page-topmenu'><h2 class='textversion'>Navigace</h2><div id='page-mainmenu'><h3 class='textversion'>Hlavnφ menu</h3><ul><li class='first selected'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz'>Titulnφ strana</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=14'>Webdesign</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=15'>V²voj aplikacφ</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=18'>E-komerce</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=17'>Nßstroje</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=16'>Magazφn</a></li><li class='right selected'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.inshop.cz'>Knihkupectvφ</a></li><li class='right'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interforum.interval.cz'>Interforum</a></li></ul></div><div id='page-mainmenu-maker'> </div></div>
  38. <div id='page-body'><div id='page-left'><div id='article'>
  39.  
  40.  
  41.  
  42. <h2>RoleΦky pomocφ CSS se vÜφm vÜudy</h2>
  43. <p id='prepend'>V tomto Φlßnku si ukß₧eme, jak vytvo°it pouze s pomocφ CSS "dokonalΘ" roleΦky û tedy obrßzky, kterΘ se p°i p°ejetφ kurzorem myÜi zm∞nφ na jinΘ obrßzky. Samoz°ejmostφ bude p°ednahrßnφ (preload) obrßzku a plnß p°φstupnost roleΦku v jakΘmkoliv prohlφ₧eΦi.</p>
  44.  
  45.  
  46. <p>RoleΦky se pou₧φvajφ ji₧ od dob nejstarÜφch prohlφ₧eΦ∙ a jsou obvykle °eÜeny pomocφ JavaScriptu. Vychßzφ se p°itom z podobnΘho (X)HTML k≤du:</p>
  47.  
  48. <div class='sample'>
  49. <div id="button"><a href="#"><img src="button1.gif" alt="Button" /></a></div>
  50. </div>
  51.  
  52. <p>Do strßnky je tedy vlo₧en obrßzkov² odkaz. Obrßzek, kter² je zde nahrßn, je zßrove≥ stavem roleΦku p°ed p°ejetφm myÜφ. Odkaz m∙₧e b²t vno°en i v jinΘm elementu ne₧ <code><div></code>, jß jsem ho zde vybral kv∙li jeho neutrßlnosti. P°i tradiΦnφm °eÜenφ se k tomuto k≤du p°idajφ javascriptovΘ ovladaΦe udßlostφ, kterΘ zajistφ prohozenφ obrßzku. Ne tak ale tentokrßt û my toti₧ pou₧ijeme k vytvo°enφ roleΦku pouze CSS.</p>
  53.  
  54. <h3>Princip °eÜenφ</h3>
  55. <p>Jak² je logick² postup °eÜenφ v CSS? Druh² obrßzek, kter² se mß zobrazit p°i p°ejetφ kurzorem myÜi, nastavφme jako pozadφ prvku <code><a></code>. Za normßlnφch okolnostφ tedy bude zakryt obrßzkem, kter² se vlo₧φ dφky prvku <code><img></code>. P°i najetφ kurzoru myÜi nad odkaz (stav "hover" v CSS) ale obrßzek p°esuneme za odkaz a u₧ivatel uvidφ druh² obrßzek (jako pozadφ odkazu). P°i umφst∞nφ kurzoru mimo odkaz se obrßzek op∞t p°esune nad odkaz a skryje tak jeho pozadφ.</p>
  56. <p>P°ikroΦme k praktickΘmu provedenφ. ZaΦneme tφm jednoduÜÜφm, tedy nastylovßnφm odkazu:</p>
  57.  
  58. <div class='sample'>
  59. #button a {
  60. <br />  background: url("button2.gif") no-repeat;
  61. <br />  display: block;
  62. <br />  width: 164px; height: 82px;
  63. <br />}
  64. </div>
  65.  
  66. <p>Prvnφ deklaracφ jsme p°i°adili druh² obrßzek na pozadφ odkazu. Ve zbytku pravidla jsme potom dali odkazu p°esnΘ rozm∞ry û bez nich d∞lß cel² efekt prohlφ₧eΦ∙m problΘmy. Obrßzek mß Üφ°ku 164 pixel∙ a v²Üku 82 pixel∙. Vlastnost <code>display</code> je zde proto, ₧e rozm∞ry se nemohou nastavovat °ßdkov²m prvk∙m (proto jsme z odkazu ud∞lali blokov²). TakΘ zruÜφme rßmeΦek kolem obrßzku:</p>
  67.  
  68. <div class='sample'>
  69. #button a img {
  70. <br />  border: 0; /* zruÜenφ °ßmeΦku kolem obrßzku */
  71. <br />}
  72. </div>
  73.  
  74. <p>A nynφ se ji₧ budeme v∞novat p°esunovßnφ obrßzku za odkaz, tedy vlastn∞ jeho pozicovßnφ ve t°etφm rozm∞ru. To se v CSS d∞lß vlastnosti <code>z-index</code>, kterou p°i stavu "hover" odkazu nastavφme na <samp>-1</samp>:</p>
  75.  
  76. <div class='sample'>
  77. #button a:hover img, #button a:focus img {
  78. <br />  z-index: -1;
  79. <br />  position: relative;
  80. <br />}
  81. </div>
  82.  
  83. <p>Vlastnost <code>z-index</code> je mo₧nΘ vyu₧φvat jen u pozicovan²ch prvk∙, proto obrßzek takΘ relativn∞ pozicujeme. Aby se nßm obrßzek neposunul "za dokument", musφme nastavit vlastnost <code>z-index</code> i pro nßÜ <code><div></code>, dφky Φemu₧ se obrßzek bude posouvat za n∞j:</p>
  84.  
  85. <div class='sample'>
  86. #button {
  87. <br />  position: relative;
  88. <br />  z-index: 0;
  89. <br />}
  90. </div>
  91.  
  92. <p>V prohlφ₧eΦi se zapnut²mi obrßzky nenφ rozdφl poznat. Pokud si je ale vypnete, zjistφte, ₧e by bez tohoto pravidla prvek obrßzku p°i stavu "hover" z dokumentu ·pln∞ zmizel (posunul by se pod dokument), co₧ nevypadß p°φliÜ hezky.</p>
  93. <p><em>Poznßmka</em>: Vedle pseudot°φdy "hover" jsme efekt nastavili i pro pseudot°φdu "focus". Ta je vlastn∞ obdobou "hover" p°i pohybu po strßnce pomocφ klßvesnice (aktivuje se p°i zam∞°enφ prvku kurzorem ovlßdan²m obvykle pomocφ klßvesy <kbd>TAB</kbd>).</p>
  94.  
  95. <h3>Chyba v Internet Exploreru 6</h3>
  96. <p>VÜechno by tedy u₧ m∞lo fungovat. Prohlφ₧eΦ Microsoft Internet Explorer 6 vÜak obsahuje "zajφmavou" chybu, kterß zp∙sobφ, ₧e tento k≤d nebude fungovat tak, jak oΦekßvßme. ProblΘm spoΦφvß v tom, ₧e MSIE 6 bere v ·vahu zm∞ny p°i stavu "hover" u prvk∙ vno°en²ch v odkazu jen tehdy, kdy₧ se zm∞nφ i n∞jakß vlastnost samotnΘho odkazu. (A neptejte se m∞, jak dlouhou dobu jsem strßvil objevovßnφm tΘto chyby...) Musφme tedy p°idat pravidlo, kde ud∞lßme n∞jakou neÜkodnou zm∞nu odkazu p°i stavu "hover">:</p>
  97.  
  98. <div class='sample'>
  99. #button a:hover {
  100. <br />  background-position: 0 0;
  101. <br />}
  102. </div>
  103.  
  104. <p>Jak vidφte, zm∞nili jsme hodnotu vlastnosti <code>background-position</code>. Jejφ v²chozφ hodnotou je <samp>0% 0%</samp> û ta mß ale naprosto stejn² v²znam jako <samp>0 0</samp>.</p>
  105.  
  106. <h3>Suma sumarum</h3>
  107. <p>Vytvo°ili jsme tedy roleΦek pouze pomocφ CSS, kter² sprßvn∞ funguje v prohlφ₧eΦφch MSIE 6+, Mozilla, Opera 7+ a v dalÜφch, kterΘ majφ podporu CSS na dostateΦnΘ ·rovni (budu rßd, kdy₧ zmφnφte funkΦnost roleΦku v dalÜφch prohlφ₧eΦφch v diskusi pod Φlßnkem). Ve vÜech t∞chto prohlφ₧eΦφch zßrove≥ funguje i p°ednahrßnφ druhΘho obrßzku (samoz°ejm∞, pokud zde nenφ n∞jak nestandardn∞ nastavena cache, v takovΘm p°φpad∞ zde ale obvykle nefunguje p°ednahrßnφ ani u roleΦk∙ realizovan²ch JavaScriptem).</p>
  108. <p>NßÜ odkaz bude zßrove≥ p°φstupn² jak²mkoli prohlφ₧eΦem. Nevizußlnφ prohlφ₧eΦ pou₧ije alternativnφ text z obrßzku, stejn∞ jako vizußlnφ prohlφ₧eΦ s vypnut²m zobrazovßnφm obrßzk∙ û zde se ₧ßdn² roleΦek samoz°ejm∞ nepou₧ije, ale u₧ivatel i tak bude moci odkaz bez problΘm∙ pou₧φt. Prohlφ₧eΦ bez odpovφdajφcφ podpory CSS zobrazφ pouze prvnφ obrßzek a roleΦek takΘ nepou₧ije.</p>
  109. <p>A v Φem je roleΦek vytvo°en² pomocφ CSS lepÜφ ne₧ klasick² javascriptov²? Hlavn∞ dφky n∞mu nemusφme zapojovat ₧ßdn² JavaScript a roleΦek z∙stane tam, kde je jeho mφsto, tedy v prezentaΦnφ vrstv∞ strßnky (styly). ╪eÜenφ vyu₧φvajφcφ CSS je takΘ kratÜφ (co do pou₧it²ch znak∙) ne₧ to javascriptovΘ.</p>
  110. <p>Postup vytvo°enφ roleΦku, kter² jsem vßm prßv∞ ukßzal, jsem shrnul do <a href='podklady/snizek/789/css-rollovers-1.html'>ukßzkovΘho p°φkladu</a>.</p>
  111.  
  112. <h3>Rozchozenφ roleΦk∙ v Microsoft Internet Exploreru 5.x</h3>
  113. <p>Ze zßhadn²ch d∙vod∙ vytvo°φ MSIE 5.x roleΦky jen v tom p°φpad∞, ₧e odkaz je °ßdkov² a nejsou mu nastaveny rozm∞ry û p°i stavu "hover" ale musφ b²t p°em∞n∞n na blokov² a musφ mu b²t nastaveny rozm∞ry. Ostatnφ prohlφ₧eΦe ale pot°ebujφ mφt zadanΘ rozm∞ry v obou p°φpadech, tak₧e musφme zm∞nit pravidla pro prvek <code><a></code>:</p>
  114.  
  115. <div class='sample'>
  116. #button a {
  117. <br />  background: url("button2.gif") no-repeat;
  118. <br />  di\splay: block;
  119. <br />  wid\th: 164px; heigh\t: 82px;
  120. <br />}
  121. <br />
  122. <br />#button a:hover {
  123. <br />  background-position: 0 0;
  124. <br />  display: block;
  125. <br />  width: 164px; height: 82px;
  126. <br />}
  127. </div>
  128.  
  129. <p>V prvnφm pravidle p°eΦtou deklarace vlastnostφ <code>display</code>, <code>width</code> a <code>height</code> jen ty prohlφ₧eΦe, kterΘ ovlßdajφ escape-sekvence v CSS a mezi n∞ MSIE 5.x nepat°φ. MSIE 6+, Mozilla, Opera 7+ a dalÜφ, po strßnce CSS vysp∞lΘ prohlφ₧eΦe, p°i°adφ rozm∞ry odkazu ji₧ zde. V druhΘm pravidle potom nastavujeme tyto vlastnosti i pro MSIE 5.x.</p>
  130. <p>Cel² k≤d na vytvo°enφ roleΦku fungujφcφho ve vÜech modernφch prohlφ₧eΦφch tedy vypadß takto:</p>
  131.  
  132. <div class='sample'>
  133. #button {
  134. <br />  position: relative;
  135. <br />  z-index: 0;
  136. <br />}
  137. <br />
  138. <br />#button a {
  139. <br />  background: url("button2.gif") no-repeat;
  140. <br />  di\splay: block;
  141. <br />  wid\th: 164px; heigh\t: 82px;
  142. <br />}
  143. <br />
  144. <br />#button a img {
  145. <br />  border: 0;
  146. <br />}
  147. <br />
  148. <br />#button a:hover {
  149. <br />  background-position: 0 0;
  150. <br />  display: block;
  151. <br />  width: 164px; height: 82px;
  152. <br />}
  153. <br />
  154. <br />#button a:hover img, #button a:focus img {
  155. <br />  position: relative;
  156. <br />  z-index: -1;
  157. <br />}
  158. </div>
  159.  
  160. <p>M∙₧ete se podφvat i na <a href='podklady/snizek/789/css-rollovers-2.html' title='druh² p°φklad'>kompletnφ p°φklad druhΘho roleΦku</a> nebo si stßhnout <a href='podklady/snizek/789/css-rollovers.zip'>oba p°φklady zazipovanΘ</a>.</p>
  161. <p>A to je vÜe. A₧ tedy p°φÜt∞ budete d∞lat na n∞jakΘm webu roleΦkovou navigaci, m∙₧ete s klidem vyu₧φt mo₧nostφ CSS a na JavaScript v tomto p°φpad∞ zapomenout.</p>
  162.  
  163.  
  164.  
  165. <div id='article-author'>
  166. <a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/autor.asp?author=92'>Snφ₧ek, Martin</a> (3. 4. 2004)
  167.  
  168. </div>
  169.  
  170.  
  171.  
  172. </div></div>
  173. <div id='page-right'><h2 class='textversion'>Prav² sloupek</h2>
  174. <div id='search'><h3 class='textversion'>Vyhledßvßnφ</h3><form method='get' action='http://interval.cz/search.asp'><div><input type='text' name='hledej' class='text' /><input type='submit' class='submit' value='Najdi!' /></div></form><div><a href='http://interval.cz/search_ex.asp'>RozÜφ°enΘ vyhledßvßnφ</a></div></div>
  175.  
  176.  
  177.  
  178. <div class='page-right-box book'>
  179.     <h3>Kni₧nφ novinka</h3>
  180.     <div class='page-right-box-in'>
  181.         <div class='book-top'>
  182.             <h4><a href='http://interval.cz/__redirect/redirect.asp?what=interval_booknews&url=http://interval.inshop.cz/inshop/scripts/detail.asp?ItemID=250'>Zrychlete svΘ WWW strßnky!</a></h4>
  183.         </div>
  184.     </div>
  185.     <div class='image'>
  186.         <img src='podklady/knihy/image.jpg' alt='obßlka' title='obßlka' /></a>
  187.     </div>
  188.     <div class='book-bottom'>Cena: <span class='book-price-old'>390 KΦ</span> <span class='book-price-new'>351 KΦ</span></div>
  189. </div>
  190.  
  191.  
  192.  
  193. <div class='page-right-box reading'>
  194.     <h3>NejΦten∞jÜφ</h3>
  195.     <div class='page-right-box-in'>
  196.         <ul>
  197. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3276'>Webovß grafika podle TomßÜe BarΦφka</a></li>
  198. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3301'>Kompletnφ pr∙vodce XSLT - ·vod do problematiky</a></li>
  199. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3298'>Osv∞dΦenφ z ·Φetnictvφ p°es cΘdΘΦko</a></li>
  200. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3295'>Cactus - testovanie cookies</a></li>
  201. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3302'>K Φemu je nßm MathML</a></li>
  202.         </ul>
  203.     </div>
  204. </div>
  205.  
  206.  
  207.  
  208. <div class='page-right-box cauldron'>
  209.     <h3>Diskuznφ kotel</h3>
  210.     <div class='page-right-box-in'>
  211.         <ul>
  212. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3305' title='(48 komentß°∙)'>T°etφ d∞lß byznys</a></li>
  213. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3280' title='(36 komentß°∙)'>Interval.cz a jeho Φtenß°i</a></li>
  214. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3296' title='(30 komentß°∙)'>PHP pro pokroΦilΘ - znovu t°φdy a objekty</a></li>
  215. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3301' title='(24 komentß°∙)'>Kompletnφ pr∙vodce XSLT - ·vod do problematiky</a></li>
  216. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3276' title='(21 komentß°∙)'>Webovß grafika podle TomßÜe BarΦφka</a></li>
  217.         </ul>
  218.     </div>
  219. </div>
  220.  
  221.  
  222.  
  223. <div class='page-right-box emailserv'><h3>Email servis</h3><div class='page-right-box-in'><form action='prihlaseni.asp' method='post'><div class='shell'><input class='text' type='text' name='adresa' /></div><div class='shell'><input class='radio' type='radio' value='1' name='co' checked='checked' />T²dennφ p°ehled Φlßnk∙</div><div class='shell'><input class='radio' type='radio' value='2' name='co' />HELP konference</div><div class='shell'><input class='submit' type='submit' value='P°ihlßsit' /></div></form></div></div>
  224. </div>
  225. <div class='page-maker'> </div><div class='page-maker-white'> </div></div>
  226. <div id='page-foot'><div id='page-foot-menu'><a href='http://interval.cz/reklama.asp'>Inzerce na Interval.cz</a> | <a href='http://interval.cz/redakce.asp'>Redakce Interval.cz</a> | <a href='http://interval.cz/autori.asp'>Hledßme novΘ autory</a></div><div id='issn'>ISSN 1212-8651</div><div id='page-foot-zoner'>© Zoner software, s.r.o., vÜechna prßva vyhrazena, tento server dodr₧uje <a href='http://interval.cz/privacy.asp'>prßvnφ p°edpisy</a>o ochran∞ osobnφch ·daj∙.</div></div>
  227. </body>
  228. </html>