يعد تبديل الوضع المضمّن في هذه المقالة مناسبًا للمتصفحات Firefox وغيرها من المتصفحات المستندة إلى Gecko و Safari و Chrome وغيرها من المتصفحات المستندة إلى WebKit ، والأوبرا ، و Konqueror ، و Internet Explorer لنظام التشغيل Mac ، و Internet Explorer for Windows ، والمتصفحات مع IE المدمجة. تجنب ذكر اسم محرك المتصفح واستخدم اسم المتصفح الأكثر شهرة للمحرك.
تركز هذه المقالة على آلية اختيار الأنماط بدلاً من تسجيل السلوك الدقيق لكل نمط.
فيما يلي مجموعة متنوعة من الأوضاع المختلفة:
يعتمد اختيار نمط محتوى النص/HTML على استنشاق Doctype (استنشاق Doctype ، الذي تمت مناقشته لاحقًا في هذه المقالة). في IE8 ، يعتمد النمط أيضًا على عوامل أخرى. ومع ذلك ، افتراضيًا في IE8 ، تعتمد أنماط المواقع غير الوريدية التي لم يتم توفيرها على القائمة السوداء لـ Microsoft على نوع المستند.
ليس من المبالغة التأكيد على الفرق في السلوك الدقيق للأنماط في كل متصفح ، حتى لو كان هناك مناقشة موحدة في هذه المقالة.
في Firefox و Safari و Chrome و Opera ، فإن تطبيق المحتوى/XHTML+XML HTTP (وليس عنصر meta أو doctype!) سيؤدي إلى ظهور نمط XML. في نمط XML ، يحاول المتصفح إعطاء وثائق XML المواصفات الصحيحة إلى الحد الذي يكون فيه في المتصفح.
لا تدعم IE6 و 7 و 8 التطبيق/XHTML+XML ، وكذلك Mac ie5.
في متصفح Nokia S60 المستند إلى WebKit ، لا يمكن أن يؤدي نوع محتوى Application/XHTML+XML HTTP إلى تشغيل مخطط XML لأن التركيز في الحدائق المسورة المتنقلة هو التوافق مع المحتوى غير المنتظم. (لا يمكن للمتصفحات المحمولة على الطراز القديم استخدام محلات XML الحقيقية لأنه تم وضع علامة على المحتوى غير القياسي XML.)
نظرًا لأن Konqueror لم يتم اختباره بالكامل ، لا أستطيع أن أقول بالضبط ما سيحدث في هذا المتصفح.
الأنماط التي لا علاقة لها ببعض المحركات مع محتوى الويب. للاكتمال ، تم ذكرهم هنا فقط. الأوبرا لديها وضع WML2.0. يحتوي WebKit على Leopard على وضع محدد لعناصر لوحة المعلومات القديمة.
فيما يلي الآثار الرئيسية لهذه الأنماط:
يؤثر نمط النص/HTML بشكل أساسي على تخطيط CSS. على سبيل المثال ، إنه أمر مريح للجداول ألا ترث الأنماط. في وضع بعض المتصفحات ، يصبح نموذج المربع نموذجًا لـ IE5.5. لا يسرد هذا المستند جميع المراوغات.
وضع شبه قياسي (في المتصفحات مع هذا الوضع) ، تختلف خلايا الجدول التي تحتوي فقط على الصور في الوضع العالي والقياسي.
في مخطط XML ، يتمتع المحددون بسلوكيات حساسة للحالة. بالإضافة إلى ذلك ، لا يمكن تطبيق القواعد الفريدة لعناصر جسم HTML على المتصفحات القديمة التي لا تنفذ أحدث تغييرات CSS2.1.
هناك أيضًا بعض المراوغات التي تؤثر على تحليل HTML و CSS وستتسبب في تحليل صفحات الويب التي تلبي المعايير بشكل غير صحيح. يحدد تخطيط المراوغات ما إذا كان يتم تشغيل هذه المراوغات. على أي حال ، من المهم للغاية فهم أوجه التشابه والاختلاف الرئيسي لأنماط quirk والأنماط القياسية في تخطيط CSS وتحليلها (تحليل غير HTML).
يطلق بعض الأشخاص عن طريق الخطأ وضع التحليل الصارم للوضع القياسي ، مما يجعل الناس يسيئون فهم قواعد بناء جملة HTML الخاصة بالمتصفح وتقييم المتصفح لصحة العلامات. هذا ليس هو الحال. حتى عندما ينطلق تخطيط الوضع القياسي ، سيظل المتصفح يصنع حساء العلامة (حساء العلامة ، http://en.wikipedia.org/wiki/tag_soup) العمل. (قبل إصدار NetScape6 في عام 2000 ، كان لدى Mozilla أنماط تحليل لفرض قواعد بناء جملة HTML. تم التخلي عن هذه الأنماط مع محتوى الويب الحالي.)
هناك اعتقاد خاطئ شائع آخر حول تحليل XHTML. يُعتقد عادة أنه يتم الحصول على أهداف مختلفة باستخدام XHTML Doctype. في الواقع ، هذا ليس هو الحال. نوع المحتوى هو نفس مستند المحلل و HTML المستخدم في مستند XHTML للنص/HTML. ما يهتم به المتصفحات الآن هو أن XHTML مع نص نوع المستند/HTML هو مجرد حساء علامة مع كروت (مائل إضافي في كل مكان).
فقط عند استخدام مستند نوع مستند XML (على سبيل المثال: Application/XHTML+XML أو XMAPPLICATION/) ، سيؤدي المحلل المحلل إلى تشغيل مخطط XML لتحليله. يختلف المحلل في هذا الوقت تمامًا عن محلل HTML.
في حين أن نمط Quirk يدور بشكل أساسي حول CSS ، بعضها يدور حول البرمجة النصية. على سبيل المثال ، في نمط Quirk الخاص بـ Firefox ، تنشئ سمة معرف HTML إشارات كائن إلى نطاق البرنامج النصي العالمي تمامًا كما في IE. تأثير البرامج النصية في IE8 يستحق الاهتمام أكثر من المتصفحات الأخرى.
في مخطط XML ، تتصرف بعض واجهات برمجة تطبيقات DOM بشكل مختلف تمامًا لأن سلوك API DOM لـ 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 على الملاحظة. عندما يتم تصميم Sctype Sniffing ، فإن معظم المراوغات لا تحتوي على إعلانات نوع المستند أو الإشارات إلى DTDs القديمة. يقبل HTML5 هذه الحقيقة ويعرف Doctype على أنه تحويل الوضع الوحيد في النص/HTML.
يحتوي إعلان نوع المستند قبل HTML5 النموذجي (PRE-HTML5) على (مفصولة بالفراغات) <! سلسلة doctype ، معرف شائع لعنصر الجذر (HTML) ، سلسلة عامة ، معرف شائع DTD في اقتباسات ، معرف النظام المحتمل (URL) وشخصية لنفس DTD. إعلان نوع المستند هو قبل بدء عنصر جذر المستند.
فيما يلي دليل بسيط لكيفية اختيار Doctype عند إنشاء مستند نص/HTML جديد:
لا أوصي بأي doctype XHTML ، حيث يعتبر XHTML ضارًا باستخدام النص/HTML. على أي حال ، إذا اخترت استخدام XHTML Doctype ، لاحظ أن إعلان XML يسبب IE6 (ولكن ليس IE7!) لإثارة نمط quirk.
دليل بسيط للتطبيق/XHTML+XML لا يستخدم Doctype أبدًا. صفحات الويب تحت هذه الطريقة لا تتفق تمامًا مع XHMTL1.0 ، ولكن هذا لا يهم. (يرجى الاطلاع على الملحق أدناه)
قائمة بصرف النظر عن أن IE8 ستستخدم تحويل الأنماط المستندة إلى العناصر الفوقية كأحد عوامل اختيار النمط ، بالإضافة إلى Doctype. (انظر مراجعات إيان هيكسون وديفيد بارون وديفيد بارون مرة أخرى وروبرت أوكاهان ومكيج ستاتشيواك.)
هناك 4 أوضاع لـ IE8: IE5.5 وضع Quirk ، وضع IE7 القياسي ، وضع IE8 Qual-Standard و IE8 القياسي. يعتمد اختيار الوضع على البيانات من عدة جوانب: Doctype ، وعناصر Meta ، ورؤوس HTTP ، وبيانات التنزيل العادية من Microsoft ، ومجالات LAN ، والإعدادات التي أدلى بها المستخدمون ، والإعدادات التي أدلى بها المستخدمون من قبل المستخدمين ، وأنماط الإطار الأصل (إن وجدت) وزر عرض BAR القابل للتطبيق. (للتطبيقات الأخرى المضمنة في المحرك ، يعتمد النمط أيضًا على التطبيق المضمن.)
لحسن الحظ ، سوف تستخدم IE8 عمومًا استنشاق Doctype مثل المتصفحات الأخرى إذا حدث ما يلي:
باستثناء الحالتين المتعلقة بـ X-UA المتوافقة ، يقوم IE8 بإجراء استنشاق Doctype مثل IE7. ويسمى IE7 مضاهاة (مضاهاة IE7) عرض متوافق.
في حالة توافق X-UA المتوافق ، يتصرف IE8 بشكل مختلف تمامًا عن المتصفحات الأخرى. أود أن أرى التذييل أو المخطط الانسيابي في تنسيقات PDF و PNG في هذه الصفحة.
لسوء الحظ ، لا يوجد رأس HTTP أو علامة التعريف لـ X-UA المتوافقة ، وحتى مع وجود Doctype المناسب ، يتيح IE8 للمستخدمين تقليل الصفحة عن طريق الخطأ من الوضع القياسي لـ IE8 إلى وضع IE7 ، وهو وضع قياسي IE7 محاكي. والأسوأ من ذلك ، أن مسؤولي الشبكة المحلية يمكنهم فعل الشيء نفسه. يمكن لـ Microsoft أيضًا إدراج جميع أسماء النطاق التي تستخدمها.
للتعامل مع هذه التأثيرات ، لا يكفي Doctype ، فأنت بحاجة إلى رأس HTTP المتوافق مع X-UA وعلامة التعريف.
الدليل البسيط التالي هو مستندات النص/HTML الجديد الذي يحتوي بالفعل على وضع قياسي Doctype أو وضع شبه قياسي في متصفحات أخرى حول كيفية اختيار رأس HTTP المتوافق مع X-UA أو علامة التعريف:
يرجى عدم إحضار Doctype استنشاق إلى XML.
إن استنشاق Doctype هو حل مشكلة حساء تشوودر المسمى باستخدام طريقة تشبه حساء تشوودر. Sniffing Doctype هو نهج مبدئي مصمم بعد إطلاق مواصفات HTML4 و CSS2 ، والتي تميز المستندات القديمة من المستندات لمطابقة السلوكيات التي قد يتوقعها مؤلفوها.
من حين لآخر ، يُقترح استخدام Doctype Sniffing على XML لجدولة معالجة مختلفة ، أو تحديد المفردات المستخدمة ، أو لتنشيط الميزات. هذه فكرة سيئة. يجب أن تعتمد الجدولة والتعرف على المفردات على مساحة الاسم ، في حين يجب أن يعتمد تنشيط الميزة على تعليمات أو عناصر معالجة صريحة.
الفكرة الكاملة للتشكيل الجيد هي تقديم تحليل DTD الذي يسمح XML ، وتعزيز المستندات الخالية من Doctype. في الحالات الرسمية ، لها مستندتان XML نفس النموذج القانوني ويقوم التطبيق بمعالجةهما بشكل مختلف (وليس لأنه لا يوجد خيار للتعامل مع الكيانات الخارجية) ، قد يتم كسر التطبيق. في الممارسة العملية ، إذا تسبب مستندتان XML في الإبلاغ عن نفس المحتوى (تجاهل QNames) لمعالج محتوى SAX2 ومعالجة التطبيق المستند بشكل مختلف ، فقد يتم كسر التطبيق. بالنظر إلى أنه بصفته مؤلفًا على شبكة الإنترنت ، فمن المستحيل تصديق أن الجميع سيقومون بتحليل صفحاتهم باستخدام معالجات XMLProcesss التي تتناول كيانات إضافية (حتى لو بدا أن بعض المتصفحات تفعل ذلك ، لأنها تخطط لبعض المعرفات العامة للـ DTD التي تحدد الكيان مع وجود عائق في غالبًا ما يكون على الويب. (لا تزال تستخدم ميزة تجاوز DTD لمقحة W3C للتحقق من DTD ، على الرغم من أن مصادقة W3C سيقول إن النتيجة مؤقتة فقط. أو الأفضل من ذلك ، يمكنك استخدام التحقق من الاسترخاء ، وهو ما لا يلوث المستند الذي يشار إليه النمط.) من السخف للغاية أن تتطلب doctype ، حتى لو كان هذا عملًا في ممارسة HTML.
علاوة على ذلك ، عندما تحدد المواصفات ذات المستوى المنخفض شيئين متساويين ، يجب ألا تحاول المواصفات عالية المستوى أن تمنحهم معاني مختلفة. يرجى النظر في <! doctype html public -// w3c // dtd xhtml 1.0 Strict // en http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd>. إذا تم حذف المعرف العام ، فلا يزال يتم تحديد نفس DTD ، لذلك doctype <! doctype html system http://www.w3 هل يجب أن يتم استنشاقهم بشكل مختلف؟ يمكن أن تكون نظرية أخرى. افترض نسخة إلى example.com a dtd يسمى foobar.dtd: <! doctype html system http://example.com/foobar.dtd>. كيف تستنشق هذا؟ يجب أن يكون له نفس المعنى. حتى DTD بأكمله يمكن نشره في المستند.
بمعنى آخر ، إذا كان هناك #include foo.h ، يجب ألا تربط أي سحر أسود بالاسم foo.h ، حيث يجب أن يسمح بنسخ محتويات foo.h في المستند أو نسخ foo.h إلى bar.h وتمثيل #include bar.h.
السبب في أنني لست قلقًا بشأن HTML و SGML لبناء نفس المعلمات هو أن متصفح الويب لا يستخدم محلل SGML حقيقيًا لتحليل HTML ، لذلك أعتقد أنه من غير المجدي أن يتنكر مثل SGML للمعالجة. على أي حال ، إذا كنت لا تصدق ذلك ، فيرجى قراءة مقالة دبليو إليوت كيمبر حول هذه المسألة comp.text.sgml
في الجدول التالي ، يتم تمثيل نمط quirk والنمط القياسي والمعايير شبه Q و S و A ، على التوالي. عندما يكون للمتصفح وضعين فقط ، يتم تمييز الوضع القياسي على أنه S إذا كان ارتفاع الصف لخلية الجدول يتسق مع أداء الوضع القياسي لـ Mozilla ، ويتم تمييز الوضع القياسي على أنه ارتفاع صف خلية الجدول يتسق مع أداء الوضع القياسي لموزيلا.
يرجى ملاحظة أن خدمة XHTML باستخدام نموذج محتوى XML يتم تقديمها في وضع XML.
الغرض من هذا الجدول لا يعني القول أن جميع أنواع docty في الجدول هي خيارات معقولة لإنشاء صفحات جديدة. الغرض من هذا الجدول هو إظهار نوع البيانات التي تعتمد عليها توصياتي.
تُستخدم رموز الاختصار التالية لعناوين الأعمدة:
| Doctype | NS6 | موز القديم | Moz & Safari & Opera10 & HTML5 | Opera9.0 | IE8 و Opera9.5 | IE7 و Opera7.10 | IE6 و Opera7.0 | ماك IE5 | konq3.2 |
|---|---|---|---|---|---|---|---|---|---|
| لا أحد | س | س | س | س | س | س | س | س | س |
| <! Doctype html public -// w3c // dtd html 3.2 final // en> | س | س | س | س | س | س | س | س | س |
| <! Doctype html public -// w3c // dtd html 4.0 // en> | ق | ق | ق | ق | ق | أ | أ | أ | أ |
| <! Doctype html public -// w3c // dtd html 4.01 // en> | ق | ق | ق | ق | ق | أ | أ | س | أ |
| <! Doctype HTML Public -// W3C // DTD HTML 4.0 // EN http://www.w3.org/tr/html4/strict.dtd> | ق | ق | ق | ق | ق | أ | أ | أ | أ |
| <! Doctype HTML Public -// W3C // DTD HTML 4.01 // EN http://www.w3.org/tr/html4/strict.dtd> | ق | ق | ق | ق | ق | أ | أ | أ | أ |
| <! Doctype html public -// w3c // dtd html 4.0 Transitional // en> | س | س | س | س | س | س | س | س | س |
| <! Doctype html public -// w3c // dtd html 4.01 Transitional // en> | س | س | س | س | س | س | س | س | س |
| <! 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 Transitional // EN http://www.w3.org/tr/1999/rec-html401-19991224/loose.dtd> | س | ق | أ | أ | أ | أ | أ | أ | س |
| <! Doctype html public -// w3c // dtd html 4.0 transitional // en http://www.w3.org/tr/html4/loose.dtd> | س | س | س | س | أ | أ | أ | أ | س |
| <! 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> | ق | ق | ق | ق | ق | أ | أ | أ | أ |
| <! 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> | ق | ق | أ | أ | أ | أ | أ | أ | س |
| <؟ | ق | ق | ق | ق | ق | أ | س | أ | س |
| <؟ xml الإصدار = 1.0 الترميز = UTF-8؟> <! DOCTYPE HTML Public-// W3C // DTD XHTML BASIC 1.0 // EN http://www.w3 | ق | ق | ق | ق | ق | أ | س | أ | س |
| <؟ xml الإصدار = 1.0 الترميز = UTF -8؟> <! DOCTYPE HTML Public -// W3C // DTD XHTML 1.0 Strict // EN http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd> | ق | ق | ق | ق | ق | أ | س | أ | س |
| <؟ xml الإصدار = 1.0 الترميز = UTF -8؟> <! DOCTYPE HTML Public -// W3C // DTD XHTML 1.0 Transitional // EN http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd> | ق | ق | أ | أ | أ | أ | س | أ | س |
| <! Doctype HTML Public ISO/IEC 15445: 2000 // DTD HTML // EN> | س | ق | ق | س | س | س | س | س | س |
| <! Doctype HTML Public ISO/IEC 15445: 2000 // DTD MADETTEXT TAMP اللغة // en> | س | ق | ق | ق | ق | أ | أ | أ | س |
| <! Doctype HTML Public ISO/IEC 15445: 1999 // DTD HTML // EN> | ق | ق | ق | س | س | س | س | س | س |
| <! Doctype HTML Public ISO/IEC 15445: 1999 // DTD MADETTEXT MADEUP اللغة // en> | ق | ق | ق | ق | ق | أ | أ | أ | س |
| <! doctype html> | س | ق | ق | ق | ق | أ | أ | أ |
تم تعديل رمز استنشاق Moziila بشكل كبير في أكتوبر 2000 وسبتمبر 2001 ويونيو 2002. يمكن رؤية الولايات التي أنشأتها Mozilla (و Netscape 6.x) الموصوفة في هذا المستند على ftp.mozilla.org منذ 2000.10.19. لا يعالج هذا المستند كيف يعمل Sniffing Doctype في موزيلا M18 (و Netscape 6.0 PR3). كما تم تعديل رمز استنشاق Safari Doctype إلى حد كبير منذ الإصدار التجريبي العام الأول. لا يتضمن هذا المستند سلوكيات في وقت سابق من الإصدار V73 ، وتسمى أيضًا 0.9.
يبدو أن رمز الاستنشاق Doctype قبل Konqueror3.5 يأتي من نسخة مبكرة من Safari. يطابق Konqueror الآن Safari ، ويأتي رمز الاستنشاق Doctype من Mozilla.
كما يتضح من الطاولة ، يتغير استنشاق Doctype من Opera من مثل IE يشبه إلى موزيلا ، على الرغم من أن Opera9.5 و 9.6 في طريقهم للخلف. وفي الوقت نفسه ، تم تبديل سلوك تخطيط وضع Quirk Opera من تقليد وضع Quirk الخاص بـ IE6 إلى وضع Quirk الخاص بـ Mozilla.
يمكن رؤية هذه الخطوات من خلال المخططات الانسيابية بتنسيقات PDF و PNG.
بفضل سيمون بيترز وسيمون بيترز وآن فان كيسترن لمساعدتي في تصحيح طاولات الأنماط وتعليقاتهم على إصدارات الأوبرا المختلفة. بفضل سايمون بيترز لصنع مخطط انسيابي آخر IE8.