HTML, XHTML и CSS на сто процентов.
13.2. Отличие XHTML от HTML. Основным отличием документа XHTML от HTML 4.01 является жесткое требование к корректности документа с точки зрения стандартов языка XML. На протяжении истории развития языка HTML сложился подход, при котором допускались многочисленные вольности и отступления от стандартов языка, объявленных W3C, а браузеры различных производителей пытались компенсировать эти вольности, угадывая и корректируя HTML-код с целью его адекватного воспроизведения. Все это отменяется в языке XHTML, если следовать строгим наборам XHTML DTD, а переходные наборы XHTML DTD служат лишь на период перехода от старого к новому: от HTML к XHTML. Значения атрибутов должны быть в кавычках. В языке HTML значения атрибутов должны быть заключены в кавычки, только если в значение входят пробелы или специальные символы. Но в языке XHTML это недопустимо: все значения должны заключаться в кавычки. Например, в теге <td>, входящем в документ HTML, допустимо написать следующее: <td width=123 height=90> Однако в языке XHTML это считается ошибкой. Следует писать так: <td width="123" height="90"> Хотя это и кажется избыточным, но выполнение такого правила обязательно. Необходимо наличие закрывающего тега. В стандарте языка HTML 4.01 допускается пропуск закрывающего тега, если программа, которая будет обрабатывать соответствующий документ, сможет «догадаться» о его наличии. Поэтому вполне допустимо опускать закрывающие теги </p> между соседними абзацами или </td> для ячеек в таблицах. Но в XHTML наличие закрывающих тегов обязательно, например два смежных абзаца должны записываться так: <p> Это первый абзац. </p> <p> <Это второй абзац> </p> Конечно, такое требование сильно загромождает код, однако устраняет какие-либо двусмысленности в разметке документа, поскольку позволяет точно идентифицировать любой элемент кода. То же самое касается и пустых элементов. Каждый тег такого элемента должен иметь как открывающий, так и закрывающий тег, например тег обрыва строки теперь должен писаться так: <br></br>, иначе строка разорвана не будет. К счастью, в этом случае допускается запись <br/>, то есть перед завершающей угловой скобкой следует поместить наклонную черту. Если же у тега есть атрибуты, то угловая черта пишется после них, например <img src="mypicture.jpg"/>. Необходимо корректно вкладывать элементы друг в друга. Это требование стандарта XHTML не отличается от требований HTML. Каждый элемент, вложенный в другой элемент, должен быть закрыт завершающим тегом, лежащим внутри содержащего его элемента. Например, в данном примере элемент для задания курсивного текста включает тег полужирного начертания: <i><b> …форматируемый текст… </b> </i> Этот пример корректен. Однако если мы напишем так: <i><b> …форматируемый текст… </i> </b> То нарушим требования HTML. Тем не менее эти и им подобные требования не всегда выполнялись разработчиками, и «добрые» браузеры обычно корректировали такие нарушения кода. Однако стандарт XHTML запрещает подобные нарушения. Кроме того, XHTML запрещает следующие вложения: • тег <form> не может содержать теги <form>; • тег <button> не может содержать теги <textarea>, <select>, <input>, <iframe>, <label>, <button>, <form>, <isindex>, <fildset>; • тег <a> не может содержать другой тег <a>; • тег <label> не может содержать другие теги <label>; • тег <pre> не может содержать теги <img>, <sup>, <object>, <small>, <sub>, <big>. При этом глубина вложения не имеет значения. Допустим, если в тег <a> вложены другие теги, они не могут включать в себя тег <a>. Браузер, строго поддерживающий XHTML, не сможет адекватно воспроизвести документы с такими нарушениями. Назначение имен тегов и атрибутов зависит от регистра. В документах HTML имена тегов и атрибутов не зависят от регистра символов, так что, например, запись <TABLE>, <TaBle> или <table> означает один и тот же тег таблицы. Однако в XHTML это разные теги. То же самое касается имен атрибутов: записи типа width или WiDtZ в XHTML уже не означают имя атрибута, задающего ширину, например, ячейки таблицы или рисунка. В XHTML все имена тегов и атрибутов, которые были заимствованы из HTML, должны быть записаны строчными буквами. Если же при написании тегов и атрибутов были использованы прописные буквы, обрабатывающая их программа, строго поддерживающая стандарт XHTML, не сможет их корректно обработать. Требуется явно задавать значения атрибутов. В документах XHTML всем атрибутам следует присваивать значения, даже если по стандарту HTML это не требуется. Например, в тегах списков <ol>, <ul> часто используется атрибут compact, приводящий к уменьшению расстояния между буквами в тексте списков. Если этот атрибут включен в тег, например <ul compact>, то текст в списке будет отображаться более компактно. Однако в XHTML такая запись запрещена и вам придется написать так: <ul compact="compact">. В табл. 13.1 приведены атрибуты, которым в языке XHTML следует задавать значения, совпадающие с их названием. Таблица 13.1. Значения атрибутов XHTML, для которых HTML не требовал значений.HTML, XHTML и CSS на сто процентов. Включение сценариев и специальных символов в документы XHTML. В документы HTML сценарии встраиваются с помощью комментариев, то есть коды сценариев помещаются внутрь объявлений комментария: <! …Код сценария JavaScript или таблицы CSS…. > В них же помещают объявления таблиц CSS, что позволяет избежать конфликтов, если браузер не поддерживает эти средства. Однако браузеры XML не воспринимают содержимое комментариев и требуют использования таких конструкций, содержащих тег CDATA языка XML: <script language="JavaScript"> <![CDATA[ …код сценария JavaScript... ]]> </script> Вместе с тем это может привести к проблемам при воспроизведении такого документа браузерами HTML, которые не понимают XML-тег CDATA. Оптимальным решением будет помещение сценариев во внешние файлы и включение в документы ссылок на эти файлы. Все специальные символы в документы XHTML следует записывать с помощью ссылок, то есть вместо записи <img src="logo.gif" alt="Логотип фирмы Бублики & Баранки"> следует написать <img src="logo.gif" alt="Логотип фирмы Бублики &amp Баранки" >