 |
Почему так важен DOCTYPE |
Fixing your site with the right DOCTYPE
Вроде бы вы сделали все правильно, но ваш сайт почему-то не выглядит или не
работает, как ожидалось, в последних версиях броузеров.
Вы написали правильный стандартный XHTML код и стандартный CSS. Вы воспользовались
стандартной спецификацией для работы с DOM (Document Object Model), чтобы управлять
динамическими элементами на странице. И все-таки, в броузерах, которые казалось
бы сделаны с соблюдением именно этих стандартов, ваш сайт не работает. Скорей
всего, ошибка кроется в неправильном заголовке DOCTYPE.
Эта небольшая статья расскажет вам о заголовках DOCTYPE ,
которые работают, а также объяснит практическое и теоретическое значение этого,
казалось бы отвлеченного от реальности, тега.
Что такое DOCTYPE ?
Согласно спецификациям HTML и XHTML тег DOCTYPE
(что означает "объявление типа документа") сообщает валидатору, какую именно версию
(X)HTML вы используете в своей странице. Этот тег должен всегда находиться в первой
строке каждой страницы. Тег DOCTYPE
- ключевой компонент web-страниц, претендующих на соответствие стандартам: без
него ваш код и CSS не пройдут проверку валидатором.
Как было сказано в
предыдущих статьях (а также в других
статьях на других сайтах),
тег DOCTYPE также важен
для правильного отображения и работы страницы в броузерах, соответствующих стандартам
(Mozilla, IE5/Mac, и IE6/Win).
Тег DOCTYPE , в атрибутах
которого указывается полный URI (полный web-адрес), сообщает броузерам, что страницу
нужно вывести с соблюдением определенного стандарта или подвида этого стандарта.
Если вы будет пользоваться неполным тегом DOCTYPE ,
устаревшим его видом, или вообще забудете про него, броузер перейдет в "загадочный"
режим и будет исходить из предположения, что вы писали код страницы с ошибками
и вольно отступали от стандартов, т.е. так, как писали в конец 90-ых годов.
В этом режиме броузер попытается разобрать вашу страницу по правилам обратной
совместимости и выведет на экран, например, CSS так, как его вывел бы Internet
Explorer 4-ой версии, а DOM будет работать так, как он работал именно в этом броузере
(IE переключается в свой старый DOM, а Mozilla и Netscape 6 переключается вообще
в бог знает что).
Понятно, что для вас эти выкрутасы не желательны. Но именно это вы и получите,
если будете пользоваться неполным или неправильным тегом DOCTYPE .
Данная статья попробует исправить эту вашу ошибку.
(Внимание: броузер Opera не играет по таким правилам; он всегда пытается отобразить
страницу так, как если бы она соответствовала стандартам. Слава Опере! С другой
стороны, Opera пока не полностью поддерживает стандарт W3C DOM, но работа над
этим уже ведется.)
Где же взять правильный DOCTYPE ?
Так как теги DOCTYPE
чрезвычайно важны для работы Web-а по стандартам, и так как консорциум W3C является
ведущей организацией, создающей стандарты для Web-а, следовало бы ожидать, что
на сайте W3C будет представлен список всех вариантов
тега DOCTYPE , и казалось
бы эту информацию на сайте W3C можно найти быстро и просто в каком-то определенном
разделе. Но это не так, по крайней мере на момент написания этой статьи.
W3.org - это не сайт со статьями как A
List Apart, WebReference или Webmonkey.
Он не создан в помощь web-дизайнерам, разработчикам и авторам сайтов, и он не
занимается распространением новейшей информации и полезных советов. Это не его
задача.
Да, иногда W3C публикует серии
учебных статей, хотя большинство web-разработчиков об этом даже и не знает.
Но в основном, сайт W3C содержит собрание предложений, проектов и Рекомендаций,
которые написаны инженерами для инженеров. И когда я говорю об инженерах, я не
имею в виду простых специалистов в области web-разработок, таких спецов, как вы
и я. Я имею в виду инженеров, по сравнению с которыми мы выглядим полными болванами.
Я могу потратить весь день в поисках правильных тегов DOCTYPE
на сайте w3.org, но не найду ни одной страницы, где они перечислены все вместе.
Если же вам все-таки удастся найти какой-нибудь тег DOCTYPE
(например, упоминаемый в какой-нибудь Рекомендации или Рабочем проекте), скорей
всего окажется, что на вашем сайте он работать не будет.
По всему сайту W3C разбросаны теги DOCTYPE ,
где в атрибутах отсутствует URI, и теги DOCTYPE ,
содержащие в атрибутах относительный URI, связанный с документами, находящимися
на том же самом сайте W3C. Если вы возьмете этот тег с сайта W3C, перенесете его
на свой сайт и вставите в свои страницы, относительный URI будет указывать на
несуществующие на вашем сайте документы, следовательно напрасно пропадет ваш труд
и усилия броузера.
Например, на многих сайтах можно встретить в страницах следующий вариант тега
DOCTYPE , который был без
всяких изменений перенесен с сайта w3.org:
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
Посмотрите на последнюю часть тега DOCTYPE
("DTD/xhtml1-strict.dtd" ).
Обратите внимание, что это относительная ссылка на документ, расположенный на
сайте W3C. Так как целевой документ находится на сайте W3C, а не на вашем, этот
URI для броузера бесполезен.
А выглядеть DOCTYPE должен
вот так:
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Обратите внимание, что этот вариант DOCTYPE
содержит в конце полный вариант URI. А так как тег указывает на правильное расположение
документа, броузер знает, где этот документ надо найти в сети, и следовательно
выведет вашу страницу в том стандарте, который вы упомянули в DOCTYPE .
Правильные варианты тега DOCTYPE
Итак, каким же вариантом тега DOCTYPE
надо пользоваться? Очень хорошо, что вы задали этот вопрос. Ниже перечислены полные
варианты тега DOCTYPE для
различных нужд:
Стандарт HTML 4.01 Strict (строгий), Transitional (переходный), Frameset (с
фреймами)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD
HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD
HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD
HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
Стандарт XHTML 1.0 Strict (строгий), Transitional (переходный), Frameset
(с фреймами)
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
Стандарт XHTML 1.1 DTD
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
Что дальше?
Как вы можете внести свой вклад в распространение стандартов в Web? Перво-наперво,
поместите в закладки данную страницу (либо просто сохраните ее на своем компьютере),
а также проверьте, вставляет ли ваш web-редакторв в ваши страницы тег DOCTYPE ,
а если вставляет, - правильный ли вариант тега он использует?
Многие разработчики ПО просто скопировали неполные варианты тега DOCTYPE
с сайта W3C в свои программы. И в результате: вы полагаетесь на программу, которая
вставляет неправильный вариант тега, броузер впадает в "загадочный" режим, а вы
безуспешно бьетесь над загадкой, почему ваши страницы не работают, как надо.
Стоит также написать тем ребятам, что делают ваш любимый web-редактор, и показать
им, как выглядит правильный тег DOCTYPE ,
после чего, вежливо попросить их внести изменения в новую версию программы. (В
некоторых случаях, вы сможете даже внести
изменения в программу сами.)
В ближайшем будущем
У нас есть все причины надеяться, что W3C скоро выложит полный, точный и удобный
список всех вариантов тега DOCTYPE
на своем сайте, а также опубликует другую важную информацию. И эту информацию
легко будет найти. К стати, в эту статью внес свой вклад Карл Дабост (Karl Dubost)
- менеджер W3C по обеспечению качества (Conformance Manager of W3C's Quality Assurance
team).
Кроме того, проект The Web Standards Project скоро будет переделан (очень скоро),
и на нем тоже можно будет найти эту информацию.
Но так как каждый день создаются и выпускаются в сеть все новые и новые сайты,
эта информация вам нужна уже сейчас, так вот она - пользуйтесь.
Удачи!
Эта статья
на английском языке
Джеффри
Зельдман (Jeffrey Zeldman)©2000 (Adobe
Web columns)
перевод - Алекс
Качанов; webmascon
|