XHTML — buďte striktní
Marek Prokop, vydáno/aktualizováno: 14.1.2002/06.10.2003
Moderní web směřuje k důslednému oddělení formy od obsahu. Prezentační prvky a atributy HTML vyklízejí pole kaskádovým stylů. Své nejdůslednější vyjádření nachází tento trend ve "striktních" variantách norem HTML 4 a zejména XHTML 1.
O XHTML jsem psal v Sově již dvakrát a v tom druhém případě jsem vám v článku Jak přejít na XHTML [1] popsal způsob, jak přetvořit stránky v HTML 4 a nižším do XHTML. To jsem ovšem uvažoval měkčí, přechodnou normu XHTML Transitional. Chcete-li být opravdu důslední, můžete spolu s námi zkusit tvrdou normu XHTML Strict.
Pokud již máte stránku splňující normu XHTML Transitional, bude začátek velmi snadný. V první řádce změňte typ dokumentu z
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
na
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
Hned poté si můžete zkusit správnost stránky ověřit validátorem W3C [2] a pravděpodobně zjistíte, že vás čeká ještě plno práce. Abych vám ji usnadnil, shrnu postupně všechna pravidla XHTML Strict, kterými se liší od normy XHTML Transitional.
Zakázané značky
Z XHTML Strict jsou oproti ostatním, mírnějším normám zcela vypuštěny tyto značky:
applet
— Java appletbasefont
— základní font dokumentucenter
— horizontálně centrovaný blokdir
— seznam adresářůfont
— nastavení písmaiframe
— vložený (inline) rámecisindex
— jednořádkový vstupmenu
— nabídkový seznamnoframes
— alternativní obsah rámcůs
— přeškrtnutý textstrike
— přeškrtnutý textu
— podtržený text
Některé z nich jsou používány málokdy (basefont
, dir
, menu
, isindex
), avšak používáte-li k centrování značku <center>
a písmo nastavujete zásadně značkami <font>
a <u>, máte smůlu a bude se muset konečně pustit do studia a zejména praktického nasazení kaskádových stylů (CSS).
Jestliže používáte rámce, musíte v dokumentu obsahujícího framset použít normu XHTML Frameset, tj. deklarovat typ dokumentu takto:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "DTD/xhtml1-frameset.dtd">
Prvek <iframe>
je třeba nahradit prvkem <object>
, ale pozor, jeho možnosti a chování nejsou zcela totožné.
Zakázané atributy
Odstraněním zakázaných značek, resp. jejich nahrazením značkami povolenými a CSS vaše práce zdaleka nekončí. Zbývající povolené značky totiž mají mnoho zakázaných atributů. Většinou jsou to tzv. prezentační atributy, tj. ty, jejichž jediným účelem je ovlivnit vzhled dokumentu. Podle této vlastnosti si je můžete snadněji zapamatovat.
V uspořádání podle značek se jedná o tyto atributy:
- <a> — target
- <area> — target
- <base> — target
- <link> — target
- <body> — alink, background , bgcolor, link, text, vlink
- <table> — bgcolor
- <td> — bgcolor, nowrap
- <th> — bgcolor, nowrap
- <tr> — bgcolor
- <img> — border, name
- <li> — type, value
- <object> — border
- <ol> — start, type
- <ul> — type
- <br> — clear
- <script> — language
- <hr> — noshade
- <form> — name, target
Ve většině případů lze zákaz těchto atributů vyřešit jejich náhradou za CSS. Jsou však i výjimky:
Pokud zobrazujete dokument v rámcích, asi vám bude chybět atribut
target
značek<a>
a<form>
. Náhrada je možná pouze klientským skriptem.Pokud v nějakém skriptu používáte atribut name značky
<form>
či<img>
, budete ho muset nahradit atributemid
.Atribut
language
značkyscript
náhradu nemá. U této značky však nesmíte zapomenout na povinný atributtype
.Na prvek
<hr>
CSS příliš nepůsobí (alespoň v IE), takže pokud vám vadím jeho implicitně stínovaná podoba, která šla v normě Transitional odstranit atributemnoshade
, raději ho zcela vypusťte a nahraďte CSS vlastnostíborder
jiného prvku.
Nezapomeňte, že do XHTML Strict nepatří také žádné z proprietárních značek a atributů, které by vám validátor nepustil ani v normách Transitional. Pokud tedy máte např. v <body>
atribut marginwidth
, budete se s ním muset rozloučit.
Struktura dokumentu
Ještě záludnější než zakázané značky a atributy jsou pravidla, která norma XHTML Strict klade na strukturu dokumentu. Mate-li např. běžný text (jazykem XML #PCDATA
) vložený přímo do <body>
, se zlou se u validátoru potážete.
Platí totiž, že prvky blockquote
, body
, form
a noscript
nesmí bezprostředně obsahovat #PCDATA
(běžný text) a prvky a
, abbr
, acronym
, b
, bdo
, big
, br
, button
, cite
, code
, dfn
, em
, i
, img
, input
, kbd
, label
, map
, object
, q
, samp
, select
, small
, span
, strong
, sub
, sup
, textarea
, tt
a var
.
V praxi to zejména znamená uzavřít veškerý text včetně obrázků (img
), umístěný dosud přímo v <body>
, do odstavců (p
) či jiných vhodných blokových prvků a totéž učinit u formuláře (form
) se všemi jeho prvky (input
, button
, atd.) i textem.
Samozřejmě pravidla strukturování kódu známá z norem (X)HTML Transitional, např. že nelze vkládát blokové prvky do prvků řádkových, platí i XHTML Strict.
Závěr
Pokud vás rozsah úprav nutných k přechodu z XHTML Transitional na XHTML Strict k smrti vyděsil, nejlépe asi uděláte, když myšlenky na převod existujících stránek pustíte z hlavy. Úpravy totiž mohou být opravdu velmi pracné a praktické přínosy sporné.
Na druhou stranu se vám určitě vyplatí pravidla XHTML Strict prostudovat a v nově tvořených stránkách je co nejvíce respektovat. Přiblížíte se tak ideálu oddělení formy od obsahu a podstatně si usnadníte přechod na některé budoucí normy, které jistě budou blíže pojetí XHTML Strict, než současným přechodným normám (X)HTML Transitional.