Переключение режима, включенное в эту статью, подходит для браузеров на основе Firefox и других баузеры на основе геккона, Safari, Chrome и других браузеров на основе Webkit, Opera, Konqueror, Internet Explorer для Mac, Internet Explorer для Windows и браузеров со встроенным IE. Избегайте упоминания названия двигателя браузера и вместо этого используйте название самого известного браузера двигателя.
Эта статья посвящена механизму отбора шаблонов, а не на записи точного поведения каждого шаблона.
Вот множество различных режимов:
Выбор шаблона текстового/HTML -контента зависит от понюхания Doctype (обнюхивание Doctype, обсуждается позже в этой статье). В IE8 шаблон также зависит от других факторов. Однако по умолчанию в IE8 шаблоны неинтранет-сайтов, которые не предоставляются в черном списке Microsoft, зависят от типа документа.
Это не преувеличение, чтобы подчеркнуть разницу в точном поведении паттернов в каждом браузере, даже если в этой статье проводится единое обсуждение.
В Firefox, Safari, Chrome и Opera, приложение/XHTML+XML HTTP -тип (не мета -элемент или Doctype!) Выпустит шаблон XML. В шаблоне XML браузер пытается дать XML документы правильные спецификации в той степени, в которой он находится в браузере.
IE6, 7 и 8 не поддерживают Application/xhtml+XML, а также Mac IE5.
В браузере Nokia S60 на основе WebKit Nokia S60 тип контента приложения/XHTML+XML не может запустить схему XML, потому что фокус в мобильных садах на стенах-это совместимость с нерегулярным содержанием. (Мобильные браузеры в старом стиле не могут использовать реальные анализаторы XML, потому что нестандартный контент был отмечен XML.)
Поскольку Konqueror не полностью протестирован, я не могу точно сказать, что произойдет в этом браузере.
Образцы, которые некоторые двигатели не имеют ничего общего с веб -контентом. Для полноты они упоминаются только здесь. Опера имеет режим WML2.0. Webkit на Leopard имеет определенный режим для унаследованных виджетов приборной панели.
Вот основные эффекты этих моделей:
Паттерн текста/HTML в основном влияет на компоновку CSS. Например, это причуда для таблиц, чтобы не наследовать стили. В причудливом режиме некоторых браузеров модель коробки становится моделью ящика IE5.5. В этом документе не перечислены все причуды макета.
Квази-стандартный режим (в браузерах с этим режимом) только ячейки таблиц, содержащие изображения, отличаются по высоким и стандартным режимам.
В схеме XML селекторы имеют разные чувствительные к случаю поведения. Кроме того, уникальные правила для элементов тела HTML не могут быть применены к более старым браузерам, которые не реализуют последние изменения CSS2.1.
Есть также некоторые причуды, которые влияют на анализ HTML и CSS и приведут к неправильному анализу веб -страниц, которые соответствуют стандартам. Расположение причуд определяет, включены ли эти причуды. В любом случае, очень важно понимать основные сходства и различия причудливых паттернов и стандартных закономерностей в макете CSS и анализе (не HTML-анализ).
Некоторые люди по ошибке называют стандартным режимом строгого режима синтаксического анализа, который заставляет людей неправильно понимать правила синтаксиса браузера в браузере и оценку браузера правильности тегов. Это не так. Даже когда стандартная компоновка режима вступает в силу, браузер все равно будет делать суп с меткой (Tag Soup, http://en.wikipedia.org/wiki/tag_soup). (До того, как NetScape6 был выпущен в 2000 году, у Mozilla была модели анализа для обеспечения соблюдения правил HTML -синтаксиса. Эти модели были оставлены несовместимыми с существующим веб -контентом.)
Еще одно распространенное заблуждение - это анализ xhtml. Обычно считается, что различные анализы получаются с использованием doctype xhtml. На самом деле, это не так. Тип контента такой же, как и документ анализатора и HTML, используемый в документе XHTML Text/HTML. Сейчас заботятся браузеры, так это то, что XHTML с типом документа Text/HTML - это просто суп с тегом с распущенными (дополнительные черты повсюду).
Только когда используется документ типа документа XML (например: Application/xhtml+XML или Xmapplication/), анализатор будет запускать схему XML для анализа. Парсер в это время полностью отличается от HTML -анализатора.
В то время как причудливый рисунок в основном касается CSS, некоторые рассказывают о сценариях. Например, в причудливом шаблоне Firefox атрибут HTML ID устанавливает ссылки на объекты на глобальный сценарий сценария, как в IE. Влияние сценариев в IE8 более достойно внимания, чем другие браузеры.
В схеме XML некоторые API DOM ведут себя совершенно по -разному, потому что поведение DOM API XML не совместимо с поведением HTML при определении.
Современные браузеры используют нюхание Doctype, чтобы определить режим двигателя текстовых/HTML документов. Это означает, что выбор схемы основан на объявлении типа документа (или отсутствующим), начиная с документа HTML. (Это не подходит для документов с использованием типа документа XML.)
Объявление типа документа (Doctype) представляет собой синтаксис -подделка SGML. SGML-это структура разметки в старом стиле. HTML до HTML5 определяется на основе него. В спецификации HTML4.01 объявление типа документа описывает информацию о версии HTML. Хотя имя является объявлением типа документа, а спецификация HTML 4.01 описывает информацию о версии, объявления типа документа не применяются для классификации документов SGML или XML как конкретные типы документов, даже если оно выглядит (из -за имени). (Больше контента в приложении)
Ни спецификация HTML4.01, ни ISO 8879 (SGML) что -то не говорит об использовании объявлений типа документа в качестве преобразования режима двигателя. Обнюхивание Doctype основано на наблюдении. Когда разработано понюшение Doctype, большинство причуд не имеют объявлений типа документов или ссылок на старые DTD. HTML5 принимает этот факт и определяет Doctype как единственное преобразование в режиме в Text/HTML.
Типичное объявление типа документа Pre-HTML5 (Pre-HTML5) содержит (разделенную пробелами) <! Doctype String, общий идентификатор для корневого элемента (HTML), общедоступной строки, общего идентификатора DTD в кавычках, возможного идентификатора системы (URL) и символа для того же DTD. Объявление типа документа является до того, как корневой элемент документа запустит этикетку.
Вот простое руководство по тому, как выбрать Doctype при создании нового текстового/HTML документа:
Я не рекомендую никаких Doctype xhtml, так как XHTML считается вредным для использования в качестве текста/HTML. В любом случае, если вы решите использовать xhtml Doctype, обратите внимание, что декларация XML вызывает IE6 (но не IE7!)
Простое руководство по применению/xhtml+XML никогда не использует Doctype. Веб -страницы под этим методом не соответствуют xhmtl1.0, но это не имеет значения. (См. Приложение ниже)
В дополнение к Doctype в дополнение к Doctype в качестве одного из факторов для выбора шаблонов, в дополнение к Doctype, в дополнение к Doctype. (См. Обзоры Яна Хиксона, Дэвида Барона, Дэвида Барона, Роберта О'Каллахана и Маки Стачоуака.)
Существует 4 режима для IE8: IE5.5 Quirk Mode, IE7 Standard Mode, IE8 Qual Standard Mode и стандартный режим IE8. Выбор режима зависит от данных из нескольких аспектов: Doctype, мета -элементы, заголовки HTTP, регулярные данные загрузки из Microsoft, домены LAN, настройки, изготовленные пользователями, настройки, изготовленные пользователями администраторов LAN. (Для других приложений, встроенных в двигатель, шаблон также зависит от встроенного приложения.)
К счастью, IE8, как правило, использует Doctype, нюхание, как и другие браузеры, если произойдет следующее:
За исключением двух случаев, касающихся X-UA-совместимого, IE8 выполняет нюхание Doctype, как IE7. IE7 эмуляция (IE7 эмуляция) называется совместимым представлением.
В случае X-UA-совместимого IE8 ведет себя совершенно иначе, чем другие браузеры. Я хотел бы увидеть приложение или блок -схему в форматах PDF и PNG на этой странице.
К сожалению, нет HTTP-заголовка или метага для C-UA-совместимого, и даже с соответствующим Doctype IE8 позволяет пользователям случайно уменьшить страницу из стандартного режима IE8 до режима IE7, который представляет собой имитационный стандартный режим IE7. Хуже того, администраторы LAN могут сделать то же самое. Microsoft также может также в черном списке всех доменных имен, которые вы используете.
Чтобы справиться с этими эффектами, Doctype недостаточно, вам нужен X-UA-совместимый HTTP-заголовок и Meta Tag.
Следующее простое руководство предназначено для новых текстовых/HTML-документов, которые уже имеют стандартный режим Trigge Trigge Doctype или квази-стандартный режим в других браузерах, чтобы выбрать X-UA-совместимый заголовок HTTP или Meta:
Пожалуйста, не приносите Doctype, нюхая в XML.
Обнюхивание Doctype-это решить проблему маркированного супа по пособию с использованием супа, подобного супу. Doctype Sniffing - это предварительный подход, разработанный после выпуска спецификаций HTML4 и CSS2, который отличает устаревшие документы от документов, чтобы соответствовать поведению, которые их авторы могут ожидать.
Иногда предлагается использовать Doctype Sniff на XML для планирования различной обработки, определения используемого словаря или для активации функций. Это плохая идея. Планирование и распознавание словарного запаса должны основываться на пространстве имен, в то время как активация функций должна основываться на явных инструкциях или элементах обработки.
Вся идея хорошо сформированной состоит в том, чтобы ввести анализ DTD, который позволяет XML и содействовать документам без документов. В официальных случаях два документа XML имеют одинаковую каноническую форму, и применение обрабатывает их по -разному (и не потому, что нет выбора для обработки внешних объектов), приложение может быть нарушено. На практике, если два документа XML приводят к тому же сообщению о одном и том же контенте (Qnames игнорировать) для процессора контента Sax2, а применение процесса по -разному по -разному, приложение может быть нарушено. Учитывая, что как веб -автор невозможно поверить, что каждый будет анализировать свои страницы, используя XMLProcessors, которые обращаются к дополнительным объектам (даже если некоторые браузеры, похоже, делают это, поскольку они отображают определенные общественные идентификаторы с DTD, который определяет сущность с сокращенным), вставляя доктип в XML для использования в веб -странице является бессмысленным и часто приводит к Cargo -gabits. (Вы по -прежнему используете функцию переопределения DTD Validator W3C для проверки DTD, хотя Validator W3C скажет, что результат является лишь временным. Или, что еще лучше, вы можете использовать расслабляющую проверку NG, что не загрязняет документ, на который ссылается образец.) Очень глупо требовать Dectype для суминия, даже если это то, что это заработанный на практике.
Кроме того, когда спецификация низкого уровня определяет две равные вещи, спецификация высокого уровня не должна пытаться дать им разные значения. Пожалуйста, рассмотрите <! Doctype html public -// w3c // dtd xhtml 1.0 strict // en http://www.w3.org/tr/xhtml1/dtd/xhtml1strict.dtd>. Если публичный идентификатор удален, тот же DTD все еще указан, так что Doctype <! Doctype html System http://www.w3.org/tr/xhtml1/dtd/xhtml1strict.dtd> означает то же самое, что и предыдущий документ. Должны ли они быть по -разному нюхать? Это может быть дальнейшей теорией. Предположим, копировать на пример. Как это понюхать? Это должно иметь то же значение. Даже весь DTD может быть опубликован в документе.
Другими словами, если есть #include foo.h, вы не должны привязывать какую -либо черную магию с именем foo.h, так как это должно разрешать копирование содержимого foo.h в документ или копирование Foo.h в Bar.h и представлять #include bar.h.
Причина, по которой я не беспокоюсь о том, что HTML и SGML построить те же параметры, заключается в том, что веб -браузер не использует реального анализатора SGML для анализа HTML, поэтому я думаю, что это бесполезно маскировать в качестве SGML для обработки. В любом случае, если вы еще не верите, пожалуйста, прочитайте статью У. Элиота Кимбера по этому вопросу comp.text.sgml
В следующей таблице причудливый шаблон, стандартный шаблон и квази-критерия представлены как Q, S и A, соответственно. Когда браузер имеет только два режима, стандартный режим помечается как s, если высота строки ячейки таблицы согласуется со стандартной модальной производительности Mozilla, а стандартный режим помечен как A, если высота строки ячейки таблицы согласуется со стандартной производительностью режима Mozilla.
Обратите внимание, что xhtml обслуживание с использованием модели контента XML отображается в режиме XML.
Цель этой таблицы не состоит в том, чтобы все документы в таблице являются разумным выбором для создания новых страниц. Цель этой таблицы - показать, на каких данных основаны мои рекомендации.
Следующие символы аббревиатуры используются для заголовков столбцов:
| Доктип | NS6 | Старый Моз | Moz & Safari & Opera10 & HTML5 | Opera9.0 | IE8 & Opera9.5 | IE7 & Opera7.10 | IE6 & Opera7.0 | Mac IE5 | KONQ3.2 |
|---|---|---|---|---|---|---|---|---|---|
| Никто | Q. | Q. | Q. | Q. | Q. | Q. | Q. | Q. | Q. |
| <! Доктип HTML public -// w3c // dtd html 3.2 final // en> | Q. | Q. | Q. | Q. | Q. | Q. | Q. | Q. | Q. |
| <! Доктип HTML public -// w3c // dtd html 4.0 // en> | С | С | С | С | С | А | А | А | А |
| <! Доктип HTML public -// w3c // dtd html 4.01 // en> | С | С | С | С | С | А | А | Q. | А |
| <! Доктип Html public -// w3c // dtd html 4.0 // en http://www.w3.org/tr/html4/strict.dtd> | С | С | С | С | С | А | А | А | А |
| <! Доктип Html public -// w3c // dtd html 4.01 // en http://www.w3.org/tr/html4/strict.dtd> | С | С | С | С | С | А | А | А | А |
| <! Доктип HTML public -// w3c // dtd html 4.0 Переход // en> | Q. | Q. | Q. | Q. | Q. | Q. | Q. | Q. | Q. |
| <! Доктип HTML public -// w3c // dtd html 4.01 Transitional // en> | Q. | Q. | Q. | Q. | Q. | Q. | Q. | Q. | Q. |
| <! Доктип HTML public -// w3c // dtd html 4.01 Transitional // en http://www.w3.org/tr/html4/loose.dtd> | С | С | А | А | А | А | А | А | Q. |
| <! Доктип HTML public -// w3c // dtd html 4.01 Transitional // en http://www.w3.org/tr/1999/rec-html401-19991224/loose.dtd> | Q. | С | А | А | А | А | А | А | Q. |
| <! Доктип Html public -// w3c // dtd html 4.0 переход // en http://www.w3.org/tr/html4/loose.dtd> | Q. | Q. | Q. | Q. | А | А | А | А | Q. |
| <! Doctype html public -// w3c // dtd xhtml 1.1 // en http://www.w3.org/tr/xhtml11/dtd/xhtml11.dtd> | С | С | С | С | С | А | А | А | А |
| <! Doctype html public-// w3c // dtd xhtml basic 1.0 // en http://www.w3.org/tr/xhtml-basic/xhtml-basic10.dtd> | С | С | С | С | С | А | А | А | А |
| <! Доктип 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 Переход // en http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd> | С | С | А | А | А | А | А | А | Q. |
| <? XML версия = 1.0 Encoding = UTF -8?> <! Doctype html public -// w3c // dtd xhtml 1.1 // en http://www.w3.org/tr/xhtml11/dtd/xhtml11.dtd> | С | С | С | С | С | А | Q. | А | Q. |
| <? XML версия = 1.0 Encoding = UTF-8?> <! Doctype html public-// w3c // dtd xhtml basic 1.0 // en http://www.w3.org/tr/xhtml-basic/xhtml-basic10.dtd> | С | С | С | С | С | А | Q. | А | Q. |
| <? XML версия = 1.0 Encoding = UTF -8?> <! Doctype html public -// w3c // dtd xhtml 1.0 strict // en http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd> | С | С | С | С | С | А | Q. | А | Q. |
| <? XML версия = 1.0 Encoding = UTF -8?> <! Doctype html public -// w3c // dtd xhtml 1.0 Transitional // en http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd> | С | С | А | А | А | А | Q. | А | Q. |
| <! Доктип HTML Public ISO/IEC 15445: 2000 // dtd html // en> | Q. | С | С | Q. | Q. | Q. | Q. | Q. | Q. |
| <! Доктип HTML Public ISO/IEC 15445: 2000 // DTD Hypertext Markup Язык // en> | Q. | С | С | С | С | А | А | А | Q. |
| <! Доктип HTML Public ISO/IEC 15445: 1999 // dtd html // en> | С | С | С | Q. | Q. | Q. | Q. | Q. | Q. |
| <! Доктип HTML Public ISO/IEC 15445: 1999 // DTD Hypertext Markup Язык // en> | С | С | С | С | С | А | А | А | Q. |
| <! Doctype html> | Q. | С | С | С | С | А | А | А |
Кодекс понюхания документа Moziila был значительно изменен в октябре 2000 года, сентябрь 2001 года и июнь 2002 года. Штаты, созданные Mozilla (и Netscape 6.x), описанные в этом документе, можно увидеть на ftp.mozilla.org с 2000.10.19. В этом документе не рассматривается, как работает нюхание Doctype в Mozilla M18 (и Netscape 6.0 PR3). Код для нюхания Doctype Safari также был сильно изменен с момента первой публичной бета -версии. Этот документ не включает в себя поведение раньше, чем версия V73, также называемой 0,9.
Код для нюхания Doctype до Konqueror3.5, похоже, поступает из ранней версии Safari. Konqueror теперь соответствует Safari, и его код нюхания Doctype поступает из Mozilla.
Как видно из таблицы, оперный доктип, нюхание доктора оперного, переходит от регулярного IE-подобного к мозилле, хотя Opera9.5 и 9.6 находятся на пути назад. Между тем, поведение макета режима Opera Quirk было переключено с имитации причудливого режима IE6 в режим причуда Mozilla.
Эти шаги можно увидеть через блок -схемы в форматах PDF и PNG.
Благодаря Саймону Питерсу, Саймону Питерсу и Энн Ван Кестерен за то, что он помог мне исправить таблицы шаблонов и их комментарии для различных оперных версий. Спасибо Саймону Питерсу за создание другой блок -схемы IE8.