Одна из самых печальных вещей, которую я замечаю, когда набредаю на
русскоязычные веб-разработчицкие сообщества — это полное нежелание
разбираться в сути вопросов. Когда что-то у кого-то не получается, он
сначала спрашивает это в форуме, где куча самозванных "гуру” начинает
ему рассказывать несусветную чушь. Потом, если повезет, кто-нибудь даст
ссылку на какую-нибудь более-менее адекватную статью, которая может
частично касаться вопроса. Совет же почитать первоисточник (например
спецификацию языка) обычно воспринимается как издевательство, потому как
по-английски все "свободно разговаривают” только в своих резюме.
Все это приводит к тому, что русское веб-сообщество полно совершенно странных мифов, пугающе противоречащих логике:
- "надо верстать и таблицами, и div’ами”
- "1 em = 16 px”
- "надо писать на XHTML, а не на HTML”
Вот по поводу последнего — сегодняшняя статья.
"Ложки нет”
Во-первых, нужно четко понимать, что чисто технически никакого XHTML в
современном вебе не существует. По той простой причине, что самый распространенный браузер,
которым пользуются люди, XHTML отображать не умеет. Если IE скормить
реальную XHTML-страницу, то он ее покажет как любой другой XML-документ —
в виде дерева элементов.
Многие здесь подумают, что я объелся лебеды, и несу чушь, потому что вот же, например — известный сайт, у которого в сурсе сверху недвусмысленно написано, что это XHTML 1.0, и валидатор подтверждает, что так оно и есть. И IE его, разумеется, отображает.
Загвоздка тут в том, что браузеры выясняют тип документа не по DOCTYPE.
Вместо этого они смотрят на то, что указано в заголовках HTTP-ответа, с
которым пришел документ. А написано там в подавляющем большинстве
случаев: … ну и еще кодировка, возможно. А это значит, что браузер для
отображения документа использует HTML-ный парсер. Чтобы браузер начал
отображать документ именно по правилам XHTML, нужны две вещи:
- тип должен быть xml’ным:
application/xml, text/xml или рекомендуемый именно для XHTML — application/xhtml+xml - элементы должны принадлежать зарегистрированному для XHTML пространству имен — это вот та штука
xmlns="http://www.w3.org/1999/xhtml"
Если так сделать, то как я уже сказал, IE, у которого специального
XHTML-парсера нет, будет просто показывать дерево элементов, а новые
браузеры действительно включатся в XHTML-режим.
DOCTYPE
Стоит уточнить, зачем же все таки нужен DOCTYPE. Как я уже писал в статье про валидацию, теоретически,
он указывает на отдельный документ — DTD — по которому можно фомально
проверить синтаксис XHTML. Но стандарт XML позволяет браузерам этого не
делать и быть невалидирующими парсерами. Они и не делают. И единственная
программа, которая таки использует DTD — это сам валидатор (мне это
напоминает негласное требование к москвичам носить с собой паспорт
только для того, чтобы милиция могла его наличие проверять :-) ).
Тем не менее, браузеры все-таки используют строчку DOCTYPE. Но
исключительно для того, чтобы по совпадению этой строки с некими
внутренними шаблонами включать разные режимы обратной совместимости.
Например, будет ли IE6 считать размеры боксов по
стандарту или в режиме совметимости с IE5, зависит от того, указать ли
ему DOCTYPE строгого (X)HTML или нет. А в Gecko-браузерах таких режимов аж три: "загадочный”, "как IE” и "стандартный”.
Кстати, интересующимся сильно советую почитать свежую статью Тима Брея о том, чем вреден DOCTYPE. Тим Брей, между прочим, один из авторов XML.
|