Table of contents

  1. Który DOCTYPE nie jest zły?
    1. Co to ten Transitional?
    2. Strict vs Transitional
    3. Po co jest DOCTYPE?
    4. Zalecany DOCTYPE
      1. HTML 4: Strict
      2. XHTML 1: Strict lub brak
      3. XHTML 5: brak, HTML 5: prawie brak

Spoiler: należy używać wersji Strict

Większość webmasterów, o ile w ogóle stosuje DOCTYPE, bezkrytycznie kopiuje (albo akceptuje wklejoną przez narzędzia pokroju FrontPage) jego wersję Transitional (często przekręcaną na “Transistional”, “Translational”). To kiepski pomysł.

Co to ten Transitional?

HTML 4 i XHTML 1.0 mają trzy odmiany:

W3C nie rozpisuje się o wersji Transitional. Jest tylko notka w samym pliku DTD:

To jest DTD HTML 4.01 Transitional, który zawiera prezentacyjne atrybuty i elementy, które W3C zamierza wycofać, gdy wsparcie dla CSS dojrzeje. Autorzy powinni używać Strict DTD, gdy to tylko możliwe, ale mogą użyć Transitional DTD, jeżeli potrzebne jest wsparcie dla prezentacyjnych atrybutów i elementów.

HTMLXHTML
Transitional<FONT><font/>
Strict<STYLE><style/>

Zatem koncepcja, że XHTML jest od divów, a HTML od tabelek, jest bujdą na resorach. To właśnie Transitional (obydwu odmian (X)HTML) jest od śmiecenia w kodzie przez <font> i spółkę, a wersja Strict (obu odmian (X)HTML) jest zalecaną, nowocześniejszą wersją do użytku wraz z CSS. Ponieważ XHTML 1.0 miał być jak najdokładniejszą kopią HTML, powielił również jego niezalecane wersje.

Strict vs Transitional

W Strict nie ma elementów i atrybutów prezentacyjnych. Nie dawały one wiele możliwości, więc nawet niekompletny CSS1 w IE6 z powodzeniem je zastępuje. Nie ma za czym tęsknić.

W Strict usunięto atrybut target. Autorzy HTML doszli do słusznego wniosku, że ramki to zło tak samo jak nachalne otwieranie nowych okien.

Strict kładzie większy nacisk na rozdzielenie elementów blokowych i liniowych. W szczególności <blockquote><form> nie mogą zawierać samego tekstu “ot tak”, tylko muszą mieć go otoczonego elementami blokowymi jak <p> lub <div> (prawdopodobnie motywacją było zwrócenie autorom uwagi, że <p> to nie są dwa <br>y, tylko element otaczający tekst). CSS pozwala kontrolować marginesy tworzone przez <p>, więc nic strasznego się nie dzieje (poza zbędnym upychaniem gdzieś <input type=hidden>).

Jednak Transitional ma kilka rzeczy, których lepiej było nie wyrzucać z HTML Strict (i które powróciły w HTML5):

Jeśli potrzebujesz <ol start> albo preferujesz <menu>, to użycie Transitional zostanie ci wybaczone ;)

Po co jest DOCTYPE?

DOCTYPE jest pozostałością po języku SGML, z którego HTML (i w konsekwencji XML) został zgapiony. Wskazuje ścieżkę do pliku DTD, który z grubsza opisuje strukturę dokumentu (dozwolone i wymagane tagi, atrybuty oraz encje).

Teoretycznie DTD jest potrzebny przeglądarkom, aby wiedziały jak traktować tagi (np. że nie zamyka się <br> i <img>) oraz mogły rozpoznać nazwane encje w dokumencie (np. że &nbsp; to to samo co &#160;), ale w praktyce wszystkie przeglądarki mają na stałe zakodowane reguły wczytywania HTML, które nawet nie są zupełnie zgodne z DTD (choć niektóre można zmusić do pełnej interpretacji DTD, jeśli ktoś chce mieć wolniej ładującą się stronę i dodatkowy kłopot ;)

Plik DTD jest często używany przez walidatory (w szczególności ten z W3C) do sprawdzenia poprawności dokumentu, ale w tej roli wypada kiepsko — DTD nie jest w stanie wyrazić pełnej specyfikacji HTML. Jest sporo konstrukcji, które się walidują, ale są niepoprawnym HTML/XHTML, np. <a><b><a></a></b></a> jest nielegalne wg. specyfikacji, a dopuszczane przez DTD). Powstały dużo lepsze schematy opisu dokumentów (Schema, RelaxNG) i bazujące na nich lepsze walidatory.

Praktycznie jest tylko do włączenia trybu zgodności ze standardami. DOCTYPE Strict powoduje, że przeglądarki działają w trybie zgodności ze standardami. DOCTYPE Transitional też, ale tylko wtedy, gdy ma URL do DTD. Szczegóły. Dokumenty HTML bez DOCTYPE interpretowane są w trybie emulacji IE5 i dostają mizerną obsługę CSS.

Zalecany DOCTYPE

HTML 4: Strict

Ze względu na niewielkie zalety i trudność poprawnego użycia XHTML, polecam rozważyć HTML, zamiast najnowszej/najmodniejszej wersji XHTML. Pamiętaj, że składnia HTML też pozwala na pełne wykorzystanie CSS i pisanie eleganckiego kodu (nawet małymi literami…).

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

XHTML 1: Strict lub brak

Poprawne użycie XHTML wymaga przede wszystkim dwóch rzeczy:

Natomiast deklaracja XML jest zbędna, a DOCTYPE ma tylko marginalne znaczenie — w przeciwieństwie do HTML nie określa, które tagi są opcjonalnie zamykane. Jego rolą pozostaje tylko określenie encji nazwanych, ale je można zastąpić encjami numerycznymi albo znakami UTF-8.

W trybie XHTML, nawet gdy brak DOCTYPE, przeglądarki zawsze używają trybu zgodności ze standardami.
To się nie tyczy IE z tego prostego powodu, że żadna z wersji IE (do 8 włącznie) nie obsługuje XHTML w ogóle.

Mimo wszystko, dla 100% zgodności ze specyfikacją XHTML, potrzeba wstawić odpowiedni DOCTYPE (i lepiej nie pomijać deklaracji przestrzeni nazw):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1—strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

XHTML 5: brak, HTML 5: prawie brak

Dla (X)HTML5 nie powstało i nie powstanie żadne oficjalne DTD. W trybie XML nie należy wstawiać żadnego DOCTYPE. W trybie HTML wystarczy wrzucić króciutki:

<!DOCTYPE html>

aby wymusić w przeglądarkach tryb zgodności ze standardami.