Перейти к содержимому



  • Закрытая тема Тема закрыта

DOCTYPE

#1 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71
1

Отправлено 09 Август 2009 - 07:28

Очень часто не работает то-то или то-то потому что не указан, или указан неверно DOCTYPE, поэтому я рекомендую отладку начинать с DOCTYPE или приучить себя изначально его использовать...вот пару статей, не моих, но очень толковых о нем:

Почему так важен DOCTYPE

Fixing your site with the right DOCTYPE
автор: 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...l1-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...l4/strict.dtd">

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR...ml4/loose.dtd">

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR.../frameset.dtd">


Стандарт XHTML 1.0 Strict (строгий), Transitional (переходный), Frameset (с фреймами)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR...l1-strict.dtd">

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR...nsitional.dtd">

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR...-frameset.dtd">


Стандарт XHTML 1.1 DTD

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR...D/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)

Оригинал статьи

 

 

  • 0

#2 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 09 Август 2009 - 08:21

Если вы будете пользоваться неполным тегом DOCTYPE, устаревшим его видом, или вообще забудете про него, броузер перейдет в "загадочный" режим и будет исходить из предположения, что вы писали код страницы с ошибками и вольно отступали от стандартов, т.е. так, как писали в конце 90-ых годов.

Всегда "нравились" русские переводы иностранных статей и программ и фильмов, когда переводчик берет первое попавшееся значение малоизвестного ему термина в стиле "перевожу как промпт", а в результате догадаться о смысле "переведенной" таким образом фразы становится затруднительно либо смысл вовсе теряется.
По сути, "quirky mode" - это никакой не "загадочный" режим, а режим совместимости со старыми браузерами.
* Поэтому смысл этого предложения не в том, что браузер начинает работать в какой-то левом и неправильном режиме, по странному недоразумению оставленному разработчиками в программе, а именно в режиме совместимости, т.е. во вполне штатной ситуации, позволяя браузеру адекватно обработать любой код: с соблюдением как современных так и старых (но до сих пор используемых) стандартов.
* Поэтому смысл ниже следующей фразы на тему "Слава Опере!" не в том, что разработчики этого браузера умнее программистов других бродилок по инету, а в том что подход Оперы нравится автору статьи, ратующему за скорейший запрет использования старых стандартов и переводе их из разряда "нерекомендуемых" в разряд неиспользуемых или "запрещенных". В других своих статьях Автор прямо призывает разработчиков браузеров отказаться от поддержки кода не соответствующего стандартам W3C, а программистов-верстальщиков от верстки в режиме совместимости (с использованием так называемых хаков для разных браузеров) игнорируя возможность кривого отбражения "правильно" сверстанных страниц в старых браузерах и стимулируя таким образом пользователей веба переходить на "правильные" браузеры. Короче, пишет в духе холивара браузеров, характерного для начала 2000х годов.

Важно понимать: что в целом статья хорошая, и подробно объясняет, как правильно и в каких случаях пользоваться каким доктайпом и мелкие недочеты в переводе не умаляют ее значения.
  • 0

#3 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 09 Август 2009 - 11:04

согласен суть остается та же, и спасибо за ценное дополнение!
  • 0

#4 SeoMaster

SeoMaster
  • Пользователь
  • 283 сообщений
  • Репутация: 0

Отправлено 10 Август 2009 - 00:01

sc2r2bey, я вообще не пользуюсь этим тегом, чем это чревато?
  • 0

#5 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 10 Август 2009 - 06:15

sc2r2bey, я вообще не пользуюсь этим тегом, чем это чревато?

и да, и нет ;)
  • 0

#6 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 10 Август 2009 - 08:52

я вообще не пользуюсь этим тегом, чем это чревато?

SEO,
неиспользование тега !DOCTYPE приведет к тому, что
* современные браузеры не будут знать какой тип документа вы предлагаете им открыть, и попытаются понять это на основании анализа содержимого документа, т.е. перейдут в так называемый "quirks mode", т.е. в режим совместимости. В этом режиме, в частности, допустимы устаревшие теги, а некоторые теги ведут себя иначе, чем обычном режиме. Браузер будет более лояльно расценивать ошибочный код и попытается, несмотря на ошибки, все же отобразить и исправить его (в меру своего искусственного интеллекта).
* старые браузеры, которые "не знают" о существовании современных стандартов, смогут правильно отобразить страницу (опять таки в меру своих возможностей)

Если тип документа не объявлен или объявлен некорректно, браузер всегда работает в режиме совместимости.
В режиме совместимости браузер игнорирует часть правил CSS, имитируя поведение старого движка. Например, браузер Internet Explorer 6-й и 7-й версий отображает документы, как Windows Internet Explorer 5; браузеры семейства Mozilla — как Netscape 4.

В некоторых случаях авторы сайтов преднамеренно не используют этот тег, чтобы перевести браузер в режим совместимости (наиболее известный пример - Яндекс (ya.ru), там доктайп присутствует, но указан он неполно: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">, что, с точки зрения современных браузеров, равноценно отсутствию доктайпа).
  • 0

#7 Dengere_Ash

Dengere_Ash
  • Пользователь
  • 27 сообщений
  • Репутация: 0

Отправлено 15 Август 2009 - 14:47

Полный список доктайпов
  • 0

#8 olfi

olfi
  • Пользователь
  • 1 сообщений
  • Репутация: 0

Отправлено 16 Сентябрь 2010 - 19:34

я отладил код сайта так чтобы он корректно работал в ие, опере и мозиле. Сейчас вписал
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR...l1-strict.dtd">

и всё посъежало. подскажите какой доктайп использовать для простого ХТМЛ с дивами и JS
  • 0

#9 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 16 Сентябрь 2010 - 20:56

olfi, strict строгий, используйте loose для HTML 4.01 или transitional для XHTML 1.0
<!-- HTML 4.01 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<!-- XHTML 1.0 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

И кстати, советую вам в следующий раз верстать ужен сразу под strict, всё же это правильнее.
Возможно от того, чтобы что-то не съезжало избавиться не получится, тогда у вас 2 варианта:
1) Либо всё переверстать по правилам доктайпа
2) Либо уйти от доктайпа и остаться в режиме совместимости.
  • 0

#10 Spear

Spear
  • Пользователь
  • 27 сообщений
  • Репутация: 0

Отправлено 26 Сентябрь 2010 - 22:40

ZiTosS, <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR...nsitional.dtd"> - для большинства сайтов текст будет таким, а где тогда используются другие DOCTYPE?
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru