Semantic web. Заметка о логичной и нелогичной верстке Чем отличаются id и class

XHTML, говорите?

Одна из самых печальных вещей, которую я замечаю, когда набредаю на русскоязычные веб-разработчицкие сообщества — это полное нежелание разбираться в сути вопросов. Когда что-то у кого-то не получается, он сначала спрашивает это в форуме, где куча самозванных “гуру” начинает ему рассказывать несусветную чушь. Потом, если повезет, кто-нибудь даст ссылку на какую-нибудь более-менее адекватную статью, которая может частично касаться вопроса. Совет же почитать первоисточник (например спецификацию языка) обычно воспринимается как издевательство, потому как по-английски все “свободно разговаривают” только в своих резюме.

Все это приводит к тому, что русское веб-сообщество полно совершенно странных мифов, пугающе противоречащих логике:

* “надо верстать и таблицами, и div’ами”
* “1 em = 16 px”
* “надо писать на XHTML, а не на HTML”

Вот по поводу последнего — сегодняшняя статья.

“Ложки нет”

Во-первых, нужно четко понимать, что чисто технически никакого XHTML в современном вебе не существует. По той простой причине, что самый распространенный браузер, которым пользуются люди, XHTML отображать не умеет. Если IE скормить реальную XHTML-страницу, то он ее покажет как любой другой XML-документ — в виде дерева элементов.

Многие здесь подумают, что я объелся лебеды, и несу чушь, потому что вот же, например — известный сайт, у которого в сурсе сверху недвусмысленно написано, что это XHTML 1.0, и валидатор подтверждает, что так оно и есть. И IE его, разумеется, отображает.

Загвоздка тут в том, что браузеры выясняют тип документа не по DOCTYPE. Вместо этого они смотрят на то, что указано в заголовках HTTP-ответа, с которым пришел документ. А написано там в подавляющем большинстве случаев:

Content-type: text/html

… ну и еще кодировка, возможно. А это значит, что браузер для отображения документа использует 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.

А и не нужно

Думаю, я не ошибаюь сильно, считая, что призывы писать только на XHTML основаны исключительно на том, что это модно. Я помню, что многих людей в свое время издевательски (зная ответ) спрашивал, а зачем именно они вставляют слеш (”/”) в теги и
и зачем именно они пишут в начале документа DOCTYPE разных вариантов XHTML. Никакого внятного ответа я на свой вопрос не получал.

Потому что на практике использовать настоящий XHTML а) трудно и б) практически незачем.

Напомню, что кардинальное отличие XHTML от HTML состоит в том, что XHTML подчиняется жестким XML’ным правилам well-formed’ности. То есть, если в документе хоть чуть-чуть что-то неправильно, то барузер обязан бросить парсить документ и сообщить пользователю об ошибке.

Такая строгость нужна и удобна, если ваш пользователь — программа. Тогда, чем более просты и строги правила синтаксиса, тем проще она сама.

Но такое поведение не подходит на вебе. Ни одному пользователю не интересно знать, как там где-то ошибся автор страницы или автор его CMS. Они приходят пользоваться, а не отлаживать. А в современном вебе, где документы составляются из кучи разных несвязанных кусочков информации, синатксические ошибки, к сожалению, слишком часты. Что означает, что ваш правильный XHTML-сайт будет слишком много времени неюзабельным. Достаточно, например, просто перенести copy-paste’ом URL’ку из браузера в блог и, если в URL’ке есть амперсанды (&), то вы получаете сломанный XHTML, который требует, чтобы эти амперсанды были экранированы (&).

Пугалка

Если все вышенаписанное не убедило вас в бесполезности XHTML и вы вопреки здравому смыслу думаете, что “это все равно правильно”, то я хочу вас еще немного попугать. Потому что эти настроения обычно подкрепляются мнением, что “обэксемелить” HTML — задачка все равно простая. Чего там, в общем-то: закрыть все теги, откавычить атрибуты, экранировать амперсанды и вставить слеши в одиночные теги. На самом деле все несколько сложнее. Вот небольшой и неполный список, во что это выливается:

*

Содержимое элементов

Добавить в:
Google slashdot YahooMyWeb Digg Technorati Delicious Забобрить эту страницу! Добавить на Newsland.ru Добавить на СМИ2 Добавить на Ваау! Добавить на RUmarkz Добавить на rucity.com Добавить в закладки МоёМесто.ru

Web Html Дизайнер (designer)

Постоянные ссылки

При копировании ссылка на Заметки дизайнера обязательна!

URI

Html (ЖЖ)

BB-код (Для форумов)

Написать коммент

Вы должны войти, чтобы оставить коммент.

Trackback на эту запись  |  Комменты по RSS


Рекламка в тему

Рубрики

Архив по месяцам

Друзья

Мета