Вот тут копался на харде и нашел старую папочку с забавными страничками. Вообще для себя лично я давно определился сэтим вопросом, но в сети по прежнему ходят призраки doctype. Быть или не быть? Можно ли утверждать, что люди не обозначающие тип документа, просто стараются избежать ответственности пытаясь скрыть свое неумение или не желание граммотно писать код?.. К сожалению чаще всего да! Дело не в том указан доктайп или нет, просто почему-то именно в тех случаях, когда он не указан, код написан особенно отвратительно.
Впрочем давайте рассмотрение этого вопроса начнем с мнения профессионалов.
Андрейка Лечев
Тип документа: объявлять или не объявлять?22 ноября 2005 |
Любой, кто хоть раз заглядывал в код страниц, наверняка замечал, что многие из них начинаются со строчки
Авторы умных книг по HTML, автоматические валидаторы и Джеффри Зельдман (Jeffrey Zeldman) утверждают, что по правилам хорошего тона использовать его нужно всегда. Если учесть тот факт, что многие сайты прекрасно отображаются в браузерах и без него, возникает резонный вопрос: «А нужен ли <!DOCTYPE> на самом деле?». Путем несложных рассуждений попытаемся это выяснить.
Откуда он взялся?Объявление типа документа можно встретить даже в древней версии HTML, не имевшей порядкового номера и носившей странное название HTML Internet Draft. Тогда уже существовало несколько языков разметки (TEX, PostScript и SGML), которые использовались в основном для работы с научными документами (что нисколько не удивляет, так как веб вообще родился в Европейском центре ядерных исследований путем скрещивания простого гипертекста с еще более простым протоколом).
Поскольку эти языки были сложными, разработчики задумались над тем, как облегчить жизнь людям и графическим терминалам, упростив разметку. И придумали HTML, построив его на основе правил «стандартного обобщенного языка разметки» или, как его чаще называют, SGML (Standard Generalized Markup Language).
Именно в SGML было указано, что каждый документ должен начинаться с объявления его типа. В первой публичной версии спецификации HTML 2.0 говорилось о том, что следует начинать с объявления (использовалось слово should), в версии HTML 3.2 его использование стало обязательным (must start with the <!DOCTYPE> declaration).
Но ни один браузер тех времен не требовал явного указания типа документа для отображения HTML-страницы. А раз браузеры не требовали, то и разработчикам было все равно — они с легким сердцем игнорировали <!DOCTYPE> (справедливости ради стоит сказать, что речь идет о тех разработчиках, которые код «писали руками», а не посредством HotDog’а).
Стандарты и обратная совместимостьПервым браузером, обратившим внимание на тип документа, стал Internet Explorer 5.0 для Mac OS (движок Tasman). Появился он в начале 2000 года и сразу же стал лучшим с точки зрения поддержки HTML-стандартов (оговорка для зануд: Mozilla была далека от версии 1.0, а Opera продолжала безнадежно копировать MSIE для Windows).
Но на тот момент никому не был нужен браузер, умеющий «рендерить» HTML согласно стандартам. Потому что стандарты не соответствовали тому, как браузеры на практике интерпретировали HTML-код.
В результате Internet Explorer 5.0 для Mac OS показывал страницы не так, как они были задуманы, и понадобился специальный переключатель, с помощью которого можно было сказать: вести себя как обычные браузеры или по стандартам.
И таким переключателем стало объявление типа документа. Правило при этом было простое: если тип документа не объявлен или объявлен без указания адреса DTD (на этот раз речь идет о Document Type Definition), то HTML интерпретировался в режиме совместимости со «старыми» браузерами (quirky mode, впоследствии — quirks mode), если же адрес DTD указывался, то элементы отображались согласно стандартам HTML 4.01 и CSS 1.
Вот
И все это было связанно с тем, что разработчики не задумывались о том, что написано внутри замечательной конструкции <!DOCTYPE>.
Internet Explorer 6.0 для Windows узаконил переключение между режимами, и теперь почти все браузеры знают, что такое «стандартный режим» (standards mode) и «режим совместимости со старыми браузерами» (quirks mode). Mozilla и Safari пошли дальше: у них есть «почти стандартный режим», почти соответствующий стандартному режиму Internet Explorer 6.0. Но это уже совсем другая история...
Так указывать или не указывать?Если вы считаете нужным указать <!DOCTYPE>, будьте любезны сделать так, чтобы ваш HTML соответствовал стандартам без исключений.
Либо допустите исключения, если вам нужен «стандартный режим» отображения. Во всех остальных случаях <!DOCTYPE> вам не требуется. Поверьте на слово...
Вот мнение человека, который приложил руку к Яндексу. В принципе, если обобщить все сказанное выше, то можно получить примерно такие варианты.
1. Указав доктайп, вы берете на себя ответственность писать код соответственно принятым стандартам.
Яндекс:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Результат:
This Page Is Valid HTML 4.01 Transitional!
2. Это главная страница LI
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Результат:
Validation Output: 21 Errors
Причем нет ни одной ошибки, которую я мог бы отнести к особенностям написания такой сложной системы. Все чисто человеческие. Типа амперсанда в УРЛ. От сюда можно предположить, что LI верстают сами программисты, т.е. теже люди, которые пишут программную часть и для них является НОРМОЙ прямое написание амперсанда.
До определенной степени это можно допустить, но не в том случае, когда вы приобретаете сайт за 50-60 тыс рублей. Да и потом не нам решать плох или хорош тот или иной протокол World Wide Web Consortium.
В чужой монастырь со своим уставом не ходят!