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ćclassani 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:
| Tryb | Co go włącza | Co się zmienia |
|---|---|---|
| Tryb standardów | <!DOCTYPE html> i inne nowoczesne doctype'y | Wszystko działa zgodnie z aktualnymi specyfikacjami |
| Ograniczony tryb quirks | HTML 4.01 Transitional lub Frameset z adresem URL, XHTML 1.0 Transitional lub Frameset | Prawie 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 quirks | Brak doctype, literówka w nim albo niektóre stare, np. HTML 4.01 Transitional bez adresu URL | Naś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
echoze 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.