div.main {margin-left: 20pt; margin-right: 20pt}Почему так важен DOCTYPE © Copyright 12 April 2002 Джеффри Зельдман (Jeffrey
Zeldman) © перевод, Александр Качанов Вроде бы вы сделали все правильно, но ваш сайт
почему-то не выглядит или не работает, как ожидалось, в
последних версиях броузеров.
Вы написали правильный стандартный 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)
|