Создание сайта, дизайн, web дизайн
Главная Работы Услуги Цены Контакты

 Главная
 Работы
 Услуги
 Цены
 Контакты
 

Браузеры строгого режима

Все пользователи компьютеров рано или поздно сталкиваются с ситуацией, когда какая-то старая программа отказывается запускаться под новой версией операционной системы. Более того, то что большинство программ, написанных еще для ДОСа успешно работает и сейчас является с одной стороны благом - представьте только какой кошмар начнется, если вдруг понадобится, скажем, заменить абсолютно все старые программы - но с другой стороны, это же является и проклятьем, так как необходимость "обратной совместимости" зачастую не дает производителям избавиться от старых ошибок.

В Интернете наблюдается та же картина. Война браузеров, о которой шла речь в статье Кросс-браузерные сайты: пережиток прошлого?, привела к тому, что абсолютное большинство веб-страниц не соответствует стандартам - в борьбе за пользователей браузеры (точнее, их производители) были готовы закрывать глаза на множество самых разных ошибок веб-мастеров - от незакрытых тегов до отсутствия заголовков, кавычек и многих других вещей. Ну а веб-мастер, как известно, существо ленивое и если уж браузер все-равно догадывается о том, как должна выглядеть страница, то тратить время на вылизывание кода он и не будет.

Однако с развитием Интернета и усложнением страниц проблемы стали вылезать все чаще и чаще - мало того, что страницы нередко отображались по-разному (или вообще не отображались!) в разных браузерах, так еще и исправление ошибок в новой версии браузера могло привести к сбоям при просмотре страниц, работавших в предыдущей! И посовещавшись, производители основных браузеров решили все-таки начать поддерживать единый стандарт.

Но... В начале статьи уже говорилось об обратной совместимости и о том, что абсолютное большинство сайтов не соответствует стандартам. Поэтому было принято мудрое решение: браузеры должны уметь переключаться между режимами: стандартным и "старым". Но как это сделать? Ясно, что управлять переключением должен веб-мастер, а не пользователь - иначе начнутся проблемы с просмотром "правильных" страниц в "глючном" режиме и наоборот. И тут вспомнили о старой декларации <!DOCTYPE, которая была одобрена W3C консорциумом уже давно, но никогда по-настоящему не использовалась.

Что такое DOCTYPE?

SGML декларация !DOCTYPE должна указывать на тип вашего документа (Document Type Definition - DTD) и теоретически, она должна присутствовать в каждой HTML-странице до тега <HTML>. На практике, все браузеры умеют без нее обходиться, так же как, впрочем, и без тегов <html> и <body>. Однако для того, чтобы включить режим совместимости со стандартом, вам придется эту декларацию указать и вдобавок позаботиться, чтобы ваш документ действительно соответствовал спецификации.

Типичная декларация выглядит примерно следующим образом:

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

Здесь HTML указывает на первый тег документа; PUBLIC говорит, что это общедоступный ресурс; минус символизирует, что W3C не зарегистрирована в ISO; W3C - название организации - автора спецификации; DTD - тип объекта; HTML 4.01 - название спецификации; EN - язык спецификации (не вашего документа!); и последний URL, которого может и не быть, говорит, где спецификация находится.

Обратите внимание: указание или не указание URL может влиять на режим браузера! Кроме того, при копировании декларации DOCTYPE с других сайтов следите, чтобы URL был правильным - периодически попадаются (в том числе и на сайте W3C) указания на относительные адреса, например,

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">

Полный (?) список корректных деклараций DOCTYPE можно найти на сайте консорциума W3C по адресу http://www.w3.org/QA/2002/04/valid-dtd-list.html

Strict, Transitional и Frameset

Наиболее распространенные на сегодня языки HTML 4.01 и XHTML имеют по три DTD: Strict, Transitional и Frameset. Strict - позволяет использовать в документе только те теги и атрибуты, которые в этом DTD описаны. Transitional - содержит все то же самое, что и Strict, но дополнительно допускает использование "устаревших" тегов, например, <FONT> или <CENTER>. Frameset - это то же самое, что и Transitional, только вместо тега BODY для обозначения тела документа в нем используется тег FRAMESET. Как несложно догадаться, Frameset DTD используется при создании страниц, содержащих фреймы.

Как браузеры определяют, какой режим использовать

Как уже говорилось выше, в зависимости от указанной вами декларации DOCTYPE, браузер будет работать либо в режиме поддержки старых глюков (quirks mode) или же в режиме поддержки стандарта (standard mode). Чтобы жизнь медом не казалась, разработчики движка Gecko ввели еще и третий режим - Almost Standard - который от стандартного отличается только способом выравнивания ячеек таблиц, в которых содержатся картинки. Если вас этот случай сильно интересует, то подробности можно найти в Mozilla Web Author FAQ.

Подробности о выборе того или иного режима работы в разных браузерах можно найти на соответствующих страницах описаний: Internet Explorer, Mozilla и Opera. Если же в подробности не вдаваться, то указание DTD XHTML, HTML 4.0 Strict, XML или неизвестного DOCTYPE включает режим совместимости со стандартом; HTML 4.0 Transitional и Frameset при наличии URL включает "стандартный" режим, а без URL - Quirks; отсутствие DOCTYPE или HTML младше 4.0 включает Quirks-режим.

Для того, чтобы определить в каком режиме отображается страница можно использовать простенький Javascript:

<script language="JavaScript" type="text/javascript">

document.write(document.compatMode);</script>

Если браузер работает в режиме поддержки стандарта, то на странице будет написано "CSS1Compat", а если в режиме "обратной совместимости", то "BackCompat" или "QuirksMode".

Следует учитывать еще одну вполне очевидную вещь: так как старые версии браузеров ничего о переключении режимов и стандартах не знают, то они всегда работают в режиме quirks. А это означает, что вам надо либо продолжать писать по-старому, чтобы поддерживать посетителей со старыми браузерами, либо принять волевое решение и начать писать свои страницы в соответствии со стандартом (при этом никто не мешает выводить посетителям предложение обновить их браузер). Фактически, веб-мастера сейчас оказались в положении компьютерных гигантов, которым приходится выбирать: либо сохранять поддержку старых программ, либо внедрять новые технологии, либо искать какой-то компромисс...

В чем разница между режимами quirks и standard

В каждом браузере есть свой набор "частных атрибутов", которые поддерживаются только этим браузером и глю..., простите, "особенностей реализации стандартов". Поэтому при переходе к универсальным стандартам в каждом браузере изменится множество более или менее заметных особенностей отображения разных элементов страницы. Подробные описания различий для Internet Explorer, Mozilla и Opera можно найти на соответствующих страницах, а ниже я попробую перечислить основные моменты, которые будет необходимо учитывать веб-мастерам.

Ширина блоков: по стандарту атрибут width относится к содержимому блока, IE же включал в него еще и поля с рамкой. Теперь не будет. То же самое относится и к таблицам, и к картинкам.

Строгий синтаксис: в режиме совместимости со стандартом веб-мастерам придется внимательно следить за синтаксисом документов. Если раньше можно было не заключать значения атрибутов в кавычки, не указывать единицы измерения и совершать прочие подобные вещи, то теперь это будет ошибкой.

Чувствительность к регистру: по стандарту имена классов и идентификаторов в CSS являются регистрозависимыми и не могут начинаться с цифр.

Наследование в таблицах: таблицы будут (наконец-то!) наследовать свойства текста родителя.

Следует отметить, что если вы нарушите какие-то правила разметки документов, то ничего страшного не произойдет: на странице не будет сообщений об ошибках, браузер не закричит про недопустимую операцию и ваш сайт не будет удален с сервера. Просто посетитель увидит страницу не совсем так (или совсем не так!) как вы ее задумывали...

Зачем нужны все эти сложности

Прочитав все вышесказанное, многие веб-мастера, наверняка, зададутся вопросом: а зачем искать приключений на свою... гм.. голову, если страницы и так прекрасно отображаются? По большому счету, резонов три:

- если и создатели браузеров и авторы сайтов будут следовать стандартам, то это добавит сайтам платформо- и браузеронезависимости, что всем будет только на руку.

- различные новые устройства, вроде карманных компьютеров и мобильных телефонов, умеют показывать веб-страницы. И вероятность того, что браузеры, встроенные в эти устройства, будут поддерживать единый стандарт значительно выше, чем вероятность того, что они будут поддерживать разнообразные "глюки" и "функциональные особенности" отдельных браузеров.

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

С чего начать?

Первым делом стоит почитать спецификации. Если делать это лень, или же ваши страницы не используют никаких сложных функций, то попробуйте проверить их с помощью валидаторов (и сами страницы и таблицы CSS) - сообщения о найденных ошибках достаточно информативны и позволят значительно подкорректировать ваш код. Причем никто не заставляет делать это в один присест - версии браузеров без поддержки quirks-режима появятся еще не скоро...




Дмирий Турецкий http://www.exs.cc
Состояние воздуха:
Мониторинг загрязнения атмосферы в режиме реального времени
© 2004-2017 LABDESIGN.RU   e-mail: