En webbplats om Doctypes/DTDs
Översikt
- Vad är en doctype?
- Varför använda en doctype?
- Strict, Transitional, Frameset – vad är skillnaden?
- HTML 4.01 eller XHTML 1.0?
- Länktips
Vad är en doctype?
En doctype, också kallad DTD, talar om av vilken typ ett dokument (t.ex. en webbsida) är och därmed hur det ska tolkas "grammatiskt". Det finns många sorters doctypes för olika ändamål men denna text är i första hand inriktad på hur de används i HTML- och XHTML-dokument. En doctype placeras alltid längst upp i dokumentet och berättar helt enkelt vilken typ av HTML eller XHTML som webbläsaren kan förvänta sig.
Vanliga doctypes på webben
- HTML 4.01 Strict
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">- HTML 4.01 Transitional
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">- HTML 4.01 Frameset
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">- HTML 5
<!DOCTYPE html>- XHTML 1.0 Strict
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">- XHTML 1.0 Transitional
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">- XHTML 1.0 Frameset
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">- XHTML 1.1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
Varför använda en doctype?
Du som har sysslat med (X)HTML vet säkert att det mycket väl går att visa ett (X)HTML-dokument som saknar en doctype i en webbläsare. Problemet är att om webbläsaren inte vet vilken typ av (X)HTML som används så måste den anta att det kan vara alla sorters (eller ingen sorts) (X)HTML. Webbläsaren måste alltså klura ut vilken typ av dokument det är samt kompensera för eventuellt felaktig kod (ja, tro det eller ej, HTML har faktiskt förändrats en del genom åren). Detta läge brukar kallas “quirks mode”.
Varför vill vi inte att webbläsaren ska ställa in sig på “quirks-mode” då? Problemet med “quirks mode” är att de olika webbläsarna kompenserar på olika sätt för att försöka fixa renderingen av sidan. Detta innebär att du själv i många fall måste kompensera för webbläsarnas tolkning av koden. Den som skriver koden vill förstås att webbsidan visas korrekt i alla webbläsare. Idag använder folk förhållandevis många olika, mer eller mindre bra, webbläsare och att kompensera för alla dessa webbläsares kompensationer kan ta mycket tid.
Om webbsidan istället har en doctype kan webbläsaren tolka dess innehåll på ett korrekt sätt. Webbläsaren läser då webbsidan i ett standard-läge (HTML och XHTML är två olika standarder framtagna av branchorganisationen World Wide Web Consortium). Webbläsaren slipper då alltså att gissa och kan därför också rendera sidan snabbare.
En annan anledning till att använda en doctype är att kod-validatorerna kräver det. För att undvika renderingsproblem rekommenderas du att alltid validerar dina (X)HTML-dokument mot någon validator, exempelvis http://validator.w3.org/. Genom att göra det (och skriva korrekt (X)HTML) undviker du eventuella problem och sparar tid på att slippa felsöka din (X)HTML-kod om något sådant skulle uppstå. Du lär dig också att skriva korrekt kod (även om validatorernas varningar och felmeddelanden tyvärr ofta är rätt kryptiska).
Strict, Transitional, Frameset - vad är skillnaden?
Det är inte alltid lätt att förstå skillnaden på dessa tre olika typer och framförallt inte vilka konsekvenser det ger att använda den ena eller den andra.
Strict
Strict-läget (också kallat “standards”-läge) bör alltid eftersträvas (undertecknad använder så gott som alltid detta läge) då det får webbläsarna att operera så nära standarden de kan (tyvärr är stödet för standarderna inte alltid 100%-igt ändå. Läs mer på http://www.webdevout.net/browser-support). Då strict-läget är mindre förlåtande än transitional-läget uppmanar det till att separera innehåll/struktur ((X)HTML), presentation (CSS) och beteende (Javascript), vilket anses vara idealet.
Följande (X)HTML-element och attribut är “deprecated”, d.v.s. utgångna, och således inte tillåtna i strict-läget:
Element
- center
- font
- iframe
- strike
- u
Attribut
- align (tillåtet på element relaterade till tabeller: col, colgroup, tbody, td, tfoot, th, thead, and tr)
- language
- background
- bgcolor
- border (tillåtet på table-elementet)
- height (tillåtet på img- och object-elementen)
- hspace
- name (tillåtet i HTML 4.01 Strict men inte tillåtet på form- och img-elementen i XHTML 1.0 Strict)
- noshade
- nowrap
- target
- text, link, vlink, and alink
- vspace
- width (tillåtet på img-, object-, table-, col- och colgroup-elementen)
Transitional
“Transitional” betyder “övergångs-” (adjektiv) på svenska och det är precis detta, övergångar från tidigare versioner av HTML till nyare, som transitional-läget är avsett att användas till. Detta läge är alltså mer förlåtande än strict-läget och tillåter element och attribut som är “deprecated” – utgågna (se listan ovan).
Transitional-läget triggar Almost standards mode i Geckobaserade webbläsare (Mozilla, Firefox, Camino, Flock etc) men i Internet Explorer triggas standard-läget.
Frameset
Frameset-läget används för framesets (ramar) och tillåter samma element och attribut som transitional-läget med har en annan innehållsmodell:
<html>
<head>
</head>
<frameset>
<frame>...</frame>
<noframes>...</noframes>
</frameset>
</html>
I frameset-innehållsmodellen ersätts alltså <body>-taggen med en <frameset>-tag.
HTML 4.01 eller XHTML 1.0?
Denna fråga har ältats mycket i webbstandards-bloggosfären. För att denna text inte ska bli allt för lång nöjer jag med att hänvisa till några externa texter angående detta:
Kontentan av dessa diskussioner är att valet mellan strict- och transitional doctype är viktigare än valet mellan HTML och XHTML. I de flesta fall bör alltså valet falla på att använda en strict doctype oavsett om den är HTML eller XHTML.
Varför inte välja XHTML 1.1 eller någon annan version av HTML?
Till skillnad mot XHTML 1.0 som får levereras som text/html, måste XHTML 1.1 levereras som application/xml och detta stöds inte av Internet Explorer. Detta kan omkringgås med s.k. “browsersniffing” där man helt enkelt tittar på vilken webbläsare som används och levererar dokumentet på olika sätt med olika doctypes beroende på webbläsare.
Det finns även äldre versioner av HTML (och tillhörande doctypes) men det finns ingen anledning att använda dessa då HTML 4.01 är en vedertagen standard.
Länktips
- World Wide Web Consortium – Den branchorganisation för webben som bl.a. sätter upp de olika webbstandarderna.
- Webbutveckling med standarder – Roger Johanssons utsökta genomgång av webbutveckling enligt webbstandarder. Roger skriver även mycket bra artiklar på sin blogg.
- Fix Your Site With the Right DOCTYPE! – En artikel om doctypes skriven av Jeffrey Zeldman som också finns översatt till svenska på http://www.seoserver.se/labb/html/doctype/.
- Web standards project – En gräsrotskampanj för webbstandarder.
- Web standards group – Allmän information om webbstandarder.
- W3C Sites – Showcase med webbsajter utvecklade enligt webbstandarder.
- Robert Nymans blogg – Ytterligare en svensk som skriver bra artiklar om webbutveckling.
- http://jigsaw.w3.org/css-validator/ – En validator för din CSS.