Menu

Doctype w HTML: co robi <!DOCTYPE html> i gdzie go umieścić

<!DOCTYPE html> to pierwsza linia każdego dokumentu HTML. Mówi przeglądarce, żeby renderowała stronę w trybie standardów zamiast w trybie quirks. Poznaj składnię, skutki starych doctype'ów i sposób sprawdzenia trybu.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Czym jest <!DOCTYPE html>

<!DOCTYPE html> to deklaracja typu dokumentu: pierwsza linia pliku HTML, przed znacznikiem <html>. Mówi przeglądarce "to jest nowoczesny dokument HTML", a przeglądarka odpowiada renderowaniem strony w trybie standardów, zgodnie z aktualnymi specyfikacjami HTML i CSS.

Ta jedna linia to cały doctype HTML5. Nie ma znacznika zamykającego i nic więcej nie trafia do środka.

Zasady składni

  • Jest na samym początku. Przed nim mogą być tylko białe znaki i komentarze. Jakikolwiek tekst lub znacznik przed doctype sprawia, że przeglądarka go ignoruje.
  • Wielkość liter nie ma znaczenia. <!DOCTYPE html> i <!doctype html> są identyczne. Wybierz jeden styl i się go trzymaj.
  • To nie jest element. Nie ma </!DOCTYPE> i nie można mu dodać class ani innych atrybutów.
  • Słowo po DOCTYPE musi brzmieć html. <!DOCTYPE html5> to nie nowsza wersja; przeglądarka traktuje taką stronę tak, jakby nie miała poprawnego doctype.
  • Jeden na dokument. Strony budowane z kilku plików (szablony, dołączane fragmenty) i tak zwracają pojedynczy doctype na początku końcowego HTML.

Tryb standardów i tryb quirks

Przeglądarki mają trzy tryby renderowania, a doctype wybiera jeden z nich:

TrybCo go włączaCo się zmienia
Tryb standardów<!DOCTYPE html> i inne nowoczesne doctype'yWszystko działa zgodnie z aktualnymi specyfikacjami
Ograniczony tryb quirksHTML 4.01 Transitional lub Frameset z adresem URL, XHTML 1.0 Transitional lub FramesetPrawie standardy: różni się tylko jedna reguła wysokości linii, więc obrazek sam w linii (zwykle w komórce tabeli) nie ma pod sobą odstępu
Tryb quirksBrak doctype, literówka w nim albo niektóre stare, np. HTML 4.01 Transitional bez adresu URLNaśladuje przeglądarki z lat 90.: wysokości procentowe, rozmiar tekstu w tabelach i wysokości linii działają inaczej

Tryb quirks istnieje po to, żeby strony napisane przed standardami sieciowymi nadal wyglądały tak, jak widzieli je ich autorzy. Nowym stronom tylko szkodzi: height: 100%, które działa na jednej stronie, a na innej nie, albo tabele ignorujące rozmiar czcionki to klasyczne objawy braku doctype.

Podglądy w edytorach na tej stronie zawsze renderują się w trybie standardów, więc usunięcie w nich doctype nie pokaże trybu quirks. Poniższe narzędzie używa DOMParser, który stosuje te same reguły co przeglądarki przy wczytywaniu pliku. Zmień doctype w polu tekstowym, a tryb się zaktualizuje:

Spróbuj usunąć linię, wpisać <!DOCTYPE html5> albo dodać jakieś słowo przed doctype: każda z tych zmian przełącza wynik na quirks.

Stare doctype'y: HTML 4.01 i XHTML

Przed HTML5 doctype wskazywał plik DTD z długim identyfikatorem publicznym. Nadal znajdziesz je na początku starszych stron:

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

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

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

Przeglądarki nigdy nie pobierały tych plików DTD. Odczytywały tylko identyfikator, żeby wybrać tryb: HTML 4.01 Strict i XHTML 1.0 Strict dają tryb standardów, wersje Transitional dają ograniczony tryb quirks, a HTML 4.01 Transitional bez adresu URL daje pełny tryb quirks. Wklej któryś z nich do narzędzia powyżej, żeby to sprawdzić; zwróć uwagę, że compatMode zgłasza ograniczony tryb quirks jako CSS1Compat, tę samą wartość co tryb standardów, więc jako BackCompat pokazuje się tylko pełny tryb quirks.

Zamiana starego doctype na <!DOCTYPE html> jest bezpieczna dla stron, które już są w trybie standardów. Strona, która była w trybie quirks, może się lekko przesunąć (zwykle wysokości i odstępy pod obrazkami), więc po zmianie ją przejrzyj.

Doctype w DOM

Doctype staje się węzłem DocumentType, osobnym od elementu <html>. Skrypty odczytują go przez document.doctype, a document.compatMode podaje tryb, w którym ostatecznie działa strona:

document.compatMode to najszybszy sposób na sprawdzenie dowolnej działającej strony: otwórz konsolę przeglądarki i wpisz to. "CSS1Compat" oznacza tryb standardów (lub ograniczony tryb quirks), a "BackCompat" tryb quirks.

Kompletny szablon HTML5

Doctype to jedna część minimalnego dokumentu, od którego powinna zaczynać się każda strona. Każda linia poniżej ma swoje zadanie:

Atrybut lang i znacznik meta viewport mają własne strony.

Częste błędy

  • Coś przed doctype. Przypadkowy znak, debugowe echo ze skryptu serwera albo znacznik HTML nad <!DOCTYPE html> przełącza całą stronę w tryb quirks. Komentarze i puste linie są w porządku.
  • Wymyślanie wersji. <!DOCTYPE html5> czy <!DOCTYPE HTML 5> nie są poprawne i włączają tryb quirks. Doctype HTML5 to po prostu <!DOCTYPE html>.
  • Zamykanie go. <!DOCTYPE html></!DOCTYPE> to niepoprawny HTML. Deklaracja nie ma znacznika zamykającego.
  • Pomijanie go w małych plikach testowych. Błędy układu, które ścigasz w pliku testowym bez doctype, mogą nie istnieć na prawdziwej stronie, i odwrotnie.
  • Zostawianie starego doctype Transitional. Przełącza stronę w ograniczony tryb quirks bez żadnej korzyści. Przejdź na <!DOCTYPE html>.

Najczęściej zadawane pytania

Co robi <!DOCTYPE html>?

Mówi przeglądarce, że strona to nowoczesny dokument HTML, więc renderuje się w trybie standardów. Bez niego przeglądarki przechodzą w tryb quirks, który naśladuje błędy przeglądarek z końca lat 90. i zmienia sposób obliczania niektórych układów i wysokości.

Czy <!DOCTYPE html> jest wymagany?

Strona wczyta się i bez niego, ale standard HTML go wymaga, a przeglądarki renderują wtedy stronę w trybie quirks. Zawsze umieszczaj <!DOCTYPE html> w pierwszej linii.

Czy w doctype ma znaczenie wielkość liter?

Nie. <!DOCTYPE html>, <!doctype html> i <!DocType HTML> znaczą to samo. Najczęstszy styl to wielkie DOCTYPE z małym html.

Czy DOCTYPE to znacznik HTML?

Nie. To deklaracja, a nie element: nie ma znacznika zamykającego ani atrybutów, które można dodać, i nie pojawia się w document.body. W DOM jest osobnym węzłem DocumentType, dostępnym jako document.doctype.

Jaki jest doctype dla HTML5?

<!DOCTYPE html>. HTML5 zrezygnował z długich identyfikatorów publicznych i adresów URL z HTML 4.01 i XHTML, a krótka forma to jedyny doctype potrzebny na każdej nowej stronie.

Jak sprawdzić, czy strona jest w trybie quirks?

Otwórz konsolę przeglądarki i wpisz document.compatMode. "CSS1Compat" oznacza tryb standardów (lub ograniczony tryb quirks), a "BackCompat" tryb quirks.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ