en / ru

<!DOCTYPE всему голова>

О правилах хорошего тона по отношению к браузерам

Зачем нужен валидный код?

Лет 7-8 назад, примерно в годы господства IE6, на многих сайтах встрачалось сообщение вида: «Для просмотра сайта нужен браузер XXX версии YYY».
Такие неприятные ситуации встречались потому, что разработчик ориентировался на один популярный (либо просто более приятный) браузер. Оптимизировать под другие браузеры было сложно. Почему сложно? Сайты массово делались не по стандартам. То, что хорошо понимал один — совершенно не подходило другим.

Со временем веб-разработчики и разработчики браузеров пришли к выводу, что необходимо разработать и следовать конкретным правилам, дабы всем было хорошо. Соблюдение правил обеими сторонами гарантирует корректную работу сайта не только на существующий на данный момент браузерах, но и на тех, которые появятся позже.

В веб-разработке «указателем» на стандарт, описывающий данный документ является DOCTYPE.

Что такое DOCTYPE?

Это способ указать браузеру, как правильно отображать документ и по какой схеме.
DOCTYPE указывает программе просмотра веб-сайта (т.к. на самом деле их просматривают не только браузеры, привычные обычному пользователю), как понимать ту или иную директиву (тэг, css свойство), чем является содержимое тэга (абзац, список, ссылка).

Существует много версий HTML, к примеру: HTML 4.01 Strict, HTML 4.01 Transitional, XHTML 1.0 Strict и другие. DOCTYPE указывает браузеру структуру, элементы и их допустимые атрибуты для каждой версии HTML.

Указывание DOCTYPE критично, так как при его отсутствии браузер попытается обработать и отобразить документ так, как он считает нужным, а не так, как этого хотите вы и/или требуют стандарты. Ни о какой валидности кода, соответственно, и речи быть не может. Без DOCTYPE можно провести часы, пытаясь заставить браузер отобразить то, что вам нужно, и не добиться успеха.

Не менее важно еще и корректно указать тег DOCTYPE. Если браузер его не распознает или не обнаружит, то браузер перейдет в "загадочный" режим и будет исходить из предположения, что вы писали код страницы с ошибками и вольно отступали от стандартов, т.е. так, как писали в конце 90-ых годов.

Вот пример того, как должна выглядеть новорожденная страница:

<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Название страницы</title>
</head>
<body>
<p>Содержание страницы</p>
</body>
</html>

Наиболее распространенные виды DOCTYPE:

HTML 4.01 — Strict, Transitional, Frameset:

<!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 HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">

XHTML 1.0 — Strict, Transitional, Frameset:

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

XHTML 1.1 — DTD:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

HTML 5

<!DOCTYPE HTML>

Полный список всегда можно найти на W3C

Как вы могли заметить, есть 3 варианта стандартов: Strict, Transitional, Frameset.

  • Strict — строгое соответствие стандарту. Нерекомендуемые тэги запрещены.
  • Transitional — фактически то же, что и Strict, но не такой строгий. Нерекомендуемые тэги допускаются. Наиболее популярный вариант.
  • Frameset — используется на страницах с фреймами.

Несколько обособленно стоит XHTML 1.1. Он является модульным (Module-based): авторы могут импортировать дополнительные свойства в их разметку. Не надо его использовать только потому, что там якобы цифра версии xhtml больше и он якобы новее. Это не так.

Дополнительную информацию можно почерпнуть из следующих источников: