JustPaste.it

Który DOCTYPE nie jest zły?

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:

  • Frameset (zestaw ramek) — wersja opisująca dokument bez <body>, ale za to z ramkami w <frameset>. Dziś nie powinna w ogóle nikogo interesować, szczególnie że nie jest potrzebna do <iframe>.
  • Strict (ścisły) — główna, rozwojowa wersja HTML/XHTML. Nie zawiera większości prezentacyjnych elementów i atrybutów (<font>, <table bgcolor>, itp.), które potrafi zastąpić CSS.
  • Transitional (przejściowy) — ponieważ w 1996 roku, kiedy opublikowano HTML 4, obsługa CSS w przeglądarkach była nieistniejąca/żałosna, a obsługa HTML była chaosem powstałym z boju IE/Netscape, W3C stworzyło wersję kompatybilną wstecz, zachowującą wszystkie grzechy HTML 3 i rozluźniającą wymogi zalecanej wersji HTML.

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.

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> i <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>).

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.

Jednak Transitional ma kilka rzeczy, których lepiej było nie wyrzucać z HTML Strict:

  • <ol start>. Numery elementów mogą mieć znaczenie dla treści, a CSS2 nie potrafi pogodzić list-style i własnych liczników.
  • <menu>. Element miał być prezentacyjny, ale nie doczekał się porządnej implementacji w przeglądarkach. Skończyło się na tym, że był synonimem dla <ul>, więc go usunięto, żeby nie dublować funkcjonalności. Jednak z punktu widzenia semantyki przydatne byłoby odróżnienie bylejakiej listy od menu nawigacyjnego — dowodem na to jest powrót tego elementu jako <nl> w XHTML 2.

Jeśli potrzebujesz ww. funkcjonalności, możesz użyć HTML Transitional albo HTML 5.

Po co jest DOCTYPE?

DOCTYPE jest pozostałością po języku SGML, z którego HTML 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 <br> i <img> nie są zamykane) 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). Powstały dużo lepsze schematy opisu dokumentów (Schema, RelaxNG).

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 — Strict lub brak

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

  • Ustawienia Content-Type na application/xhtml+xml
  • Użycia przestrzeni nazw http://www.w3.org/1999/xhtml dla wszystkich elementów XHTML

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. Mimo tego W3C oficjalnie jeszcze nie pogrzebało DOCTYPE i dla 100% zgodności ze specyfikacją potrzeba jakiś wstawić:

<!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">

W trybie XHTML przeglądarki zawsze używają trybu zgodności ze standardami. Bez DOCTYPE nie będą działały encje z nazwami, ale to żaden problem, bo można je zastąpić encjami numerycznymi albo najlepiej znakami zakodowanymi w UTF—8.

To się nie tyczy IE z tego prostego powodu, że IE6 i 7 wcale nie obsługują XHTML.

HTML 5 — brak

WHATWG (zrzeszenie Mozilli, Opery, Apple i (przypadkiem :) Google) rozwinęło, odświeżyło i doprecyzowało specyfikację HTML 4 przy zachowaniu praktycznie pełnej zgodności wstecz. HTML 5 nie ma DTD, ale dla wymuszenia trybu zgodności ze standarami w przeglądarkach zalecają takiego oto kikuta:

<!DOCTYPE html>

Licencja: copyleft 

 

Źródło: porneL