А и не нужно
Думаю, я не ошибаюь сильно, считая, что призывы писать только на XHTML основаны
исключительно на том, что это модно. Я помню, что многих людей в свое
время издевательски (зная ответ) спрашивал, а зачем именно они вставляют слеш (”/”) в теги <img/> и <br/> и зачем именно они пишут в начале документа DOCTYPE разных вариантов XHTML. Никакого внятного ответа я на свой вопрос не получал.
Потому что на практике использовать настоящий XHTML
а) трудно и б) практически незачем.
Напомню, что кардинальное отличие XHTML от HTML состоит в том, что
XHTML подчиняется жестким XML’ным правилам well-formed’ности. То есть,
если в документе хоть чуть-чуть что-то неправильно, то барузер обязан
бросить парсить документ и сообщить пользователю об ошибке.
Такая строгость нужна и удобна, если ваш пользователь — программа.
Тогда, чем более просты и строги правила синтаксиса, тем проще она сама.
Но такое поведение не подходит на вебе. Ни одному
пользователю не интересно знать, как там где-то ошибся автор страницы
или автор его CMS. Они приходят пользоваться, а не отлаживать. А в
современном вебе, где документы составляются из кучи разных несвязанных
кусочков информации, синатксические ошибки, к сожалению, слишком часты.
Что означает, что ваш правильный XHTML-сайт будет слишком много времени
неюзабельным. Достаточно, например, просто перенести copy-paste’ом
URL’ку из браузера в блог и, если в URL’ке есть амперсанды (&), то
вы получаете сломанный XHTML, который требует, чтобы эти амперсанды были
экранированы (&).
Пугалка
Если все вышенаписанное не убедило вас в бесполезности XHTML и вы
вопреки здравому смыслу думаете, что "это все равно правильно”, то я
хочу вас еще немного попугать. Потому что эти настроения обычно
подкрепляются мнением, что "обэксемелить” HTML — задачка все равно
простая. Чего там, в общем-то: закрыть все теги, откавычить атрибуты,
экранировать амперсанды и вставить слеши в одиночные теги. На самом деле
все несколько сложнее. Вот небольшой и неполный список, во что это
выливается:
Содержимое элементов <script> и <style>
нельзя оставлять в том же виде, что и в HTML. Потому что любой значок
">” тут же все сломает. Если его экранировать через ">” или
заключать в блоки CDATA, то тогда сломаются HTML’ные браузеры, которые
таких страстей не ведают и парсят текст, предполагая, что он не
экранирован. Кроме того, в XHTML браузер не обязан вообще парсить
содержимое комментариев, а скрипты, как известно, часто так экранируются
по историческим соображениям.
В итоге, чтобы удовлетворить и XHTML, и HTML, вам придется либо использовать такую вот конструкцию, учитывающую все синтаксисы:
<script>
<!--//--><![CDATA[//><!--
...
//--><!]]>
</script>
Либо выносить скрипты и стили во внешние файлы.
document.write в скриптах в XHTML просто не работает. Придется переписать с использованием DOM-функций
В самих DOM-функциях нужно опустить все названия элементов в
нижний регистр. То же для селекторов в стилях. В XHTML регистр букв
имеет значение.
Также не работают удобные вещи: document.body, document.forms, document.images… Придется рисовать длинные вызовы вроде document.getElementsByTagName('body')[0] и document.getElementById('change_frm')
Если вы храните какой-нибудь текст внутри <input type="hidden" value="...">,
то переводы строк внутри атрибута "value” в XHTML схлопнутся в пробелы.
Чтобы этого не было придется их экранировать: " ”.
Фоновый цвет body в XHTML не распространяется автоматически на все окно
Другими словами, в следующий раз, когда вам нужно будет сверстать страницу для веба, отриньте суету и начните ее так:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<title>Страница</title>
<p>Текст
Это совершенно валидный HTML 4.01 strict. А если вам не нужна
валидация, то и DOCTYPE можно сократить до минимума, чтобы только
браузеры в стандартный режим включались:
<!DOCTYPE html>
<title>Страница</title>
<p>Текст
Смысл все же есть
Есть редкие случаи, когда применение XHTML оправдано и на вебе тоже.
Одна из областей применения — микроформаты (о которых я уже как-то писал). Поскольку они предлагаются как вещи и человекочитаемые, и машиночитаемые одновременно, то строгость XML’а для них уже полезна.
Другая, еще более редкая штука — смешанные документы. XML позволяет в
одном и том же документе объединять элементы разных XML-языков
(поскольку синтаксис общий). Чаще всего это используется для вставления в
XHTML кусков математики на MathML и графики на SVG. Есть известный блог
— Musings — который это широко использует.
Однако, наверное самый полезный эффект, который XHTML произвел, лежит
отнюдь не в технических аспектах. Эта самая буква "X” сыграла в свое
время важную роль, сделав из простого как бы всем известного и скучного
HTML новую модную технологию. Не будь XHTML’а, наверное куда меньше
людей заинтересовались бы идеями современной верстки CSS’ом, разделением
содержимого и оформления и стали бы читать спецификации хотя бы и
только для того, чтобы повесить на страницу бесполезную кнопочку
валидации. Пусть… Главное — общий эффект :-)