ما هي جميع عناصر الإغلاق الذاتي الصالحة في XHTML (كما تنفذها المتصفحات الرئيسية)؟

StackOverflow https://stackoverflow.com/questions/97522

سؤال

ما هي جميع عناصر الإغلاق الذاتي الصالحة (على سبيل المثال؟<br/>) في XHTML (كما هو مطبق بواسطة المتصفحات الرئيسية)؟

أعلم أن XHTML يسمح تقنيًا بإغلاق أي عنصر ذاتيًا، ولكنني أبحث عن قائمة بتلك العناصر التي تدعمها جميع المتصفحات الرئيسية.يرى http://dusan.fora.si/blog/self-closing-tags للحصول على أمثلة لبعض المشاكل الناجمة عن عناصر الإغلاق الذاتي مثل <div />.

هل كانت مفيدة؟

المحلول

كل متصفح يدعم XHTML (Firefox، Opera، Safari، IE9) يدعم بناء جملة الإغلاق الذاتي كل عنصر.

<div/>, <script/>, <br></br> كل شيء يجب أن يعمل على ما يرام.إذا لم يفعلوا ذلك، ثم لديك لغة البرمجة مع إضافة XHTML DOCTYPE بشكل غير مناسب.

لا يغير DOCTYPE كيفية تفسير المستند. نوع MIME فقط هو الذي يفعل ذلك.

قرار W3C بشأن تجاهل DOCTYPE:

لقد ناقشت مجموعة عمل HTML هذه المشكلة:كان القصد من ذلك هو السماح للمتصفحات القديمة (HTML فقط) بقبول مستندات XHTML 1.0 من خلال اتباع الإرشادات ، وخدمتها كنص/HTML.لذلك ، ينبغي التعامل مع المستندات التي يتم تقديمها كنص/HTML على أنها HTML وليس كـ XHTML.

إنه مأزق شائع جدًا، لأن W3C Validator يتجاهل هذه القاعدة إلى حد كبير، لكن المتصفحات تتبعها دينيًا.يقرأ فهم HTML وXML وXHTML من مدونة WebKit:

في الواقع، يتم تقديم الغالبية العظمى من مستندات XHTML المفترضة على الإنترنت text/html.مما يعني أنها ليست XHTML على الإطلاق، ولكنها في الواقع HTML غير صالح يحدث بسبب معالجة الأخطاء لموزعي HTML.كل هؤلاء "XHTML 1.0 صالح!" تقول الروابط على الويب حقًا "HTML 4.01 غير صالح!".


لاختبار ما إذا كان لديك XHTML حقيقي أو HTML غير صالح باستخدام DOCTYPE الخاص بـ XHTML، ضع هذا في مستندك:

<span style="color:green"><span style="color:red"/> 
 If it's red, it's HTML. Green is XHTML.
</span>

إنه يتحقق من صحته، ويعمل بشكل مثالي في لغة XHTML الحقيقية (انظر: 1 ضد 2).إذا كنت لا تصدق عينيك (أو لا تعرف كيفية تعيين أنواع MIME)، فافتح صفحتك عبر وكيل XHTML.

هناك طريقة أخرى للتحقق وهي عرض المصدر في Firefox.سيتم تمييز الخطوط المائلة باللون الأحمر عندما تكون غير صالحة.

في HTML5/XHTML5 لم يتغير هذا، والتمييز أكثر وضوحًا، لأنه ليس لديك حتى المزيد DOCTYPE. Content-Type هو الملك.


للعلم، تسمح مواصفات XHTML لأي عنصر بالإغلاق الذاتي عن طريق جعل XHTML تطبيق XML:[التأكيد على الألغام]

يمكن استخدام علامات العناصر الفارغة أي عنصر ليس له محتوى, ، سواء تم الإعلان عنه باستخدام الكلمة الأساسية فارغة أم لا.

كما يظهر بوضوح في مواصفات XHTML:

يجب العناصر الفارغة أيضاً لديك علامة نهاية أو يجب أن تنتهي علامة البداية بـ />.على سبيل المثال، <br/> أو <hr></hr>

نصائح أخرى

أحد العناصر التي يجب توخي الحذر الشديد بشأن هذا الموضوع هو <script> العنصر.إذا كان لديك ملف مصدر خارجي، فسوف يسبب مشاكل عند إغلاقه بنفسك.جربها:

<!-- this will not consistently work in all browsers! -->
<script type="text/javascript" src="external.js" />

سيعمل هذا في Firefox، ولكنه سيتعطل في IE6 على الأقل.أعلم ذلك، لأنني واجهت هذا عندما أغلقت نفسي بشكل مفرط كل عنصر رأيته؛-)

يعمل بناء جملة الإغلاق الذاتي على جميع العناصر في application/xhtml+xml.إنها غير مدعومة في أي عنصر في text/html، لكن العناصر "الفارغة" في HTML4 أو "باطلة" في HTML5 لا تأخذ علامة نهاية على أي حال، لذا إذا وضعت شرطة مائلة عليها فستبدو كما لو كانت تم دعم بناء جملة الإغلاق الذاتي.

من الموقع المرجعي لمدارس W3:

<area />
<base />
<basefont />
<br />
<hr />
<input />
<img />
<link />
<meta />

السؤال الأفضل سيكون:ما هي العلامات التي يمكن إغلاقها ذاتيًا حتى في وضع HTML دون التأثير على التعليمات البرمجية؟إجابة:فقط تلك التي تحتوي على محتوى فارغ (باطلة).وفق مواصفات HTML العناصر التالية باطلة:

area, base, br, col, embed, hr, img, input, keygen, link, menuitem, meta, param, source, track, wbr

الإصدار الأقدم من المواصفات مدرج أيضًا command.علاوة على ذلك، وفقًا لمصادر مختلفة، تعتبر العلامات القديمة أو غير القياسية التالية باطلة:

basefont, bgsound, frame, isindex

أمل أن هذا يساعد شخصاما:

<base />
<basefont />
<frame />
<link />
<meta />

<area />
<br />
<col />
<hr />
<img />
<input />
<param />

ماذا عن <meta> و <link>؟لماذا ليسوا في تلك القائمة؟

القاعدة الأساسية السريعة، لا تغلق ذاتيًا أي عنصر يُقصد به أن يحتوي على محتوى، لأنه سيؤدي بالتأكيد إلى حدوث مشكلات في المتصفح عاجلاً أم آجلاً.

تلك التي تنغلق ذاتيًا بشكل طبيعي، مثل <br> و <img>, ، ينبغي أن يكون واضحا.تلك التي ليست...فقط لا تغلقهم ذاتيًا!

في آخر مرة قمت فيها بالتحقق، كانت العناصر التالية فارغة/فارغة مدرجة في HTML5.

صالحة للمؤلفين:منطقة، قاعدة، br، col، أمر، تضمين، حدث مصدر، hr، img، إدخال، رابط، ميتا، بارام، مصدر

غير صالح للمؤلفين:الخط الأساسي، bgsound، الإطار، فاصل، wbr

إلى جانب العناصر القليلة الجديدة في HTML5، من المفترض أن يعطيك ذلك فكرة عن تلك التي قد تكون مدعومة عند تقديم XHTML كنص/html.(فقط اختبرها عن طريق فحص DOM المنتج.)

أما بالنسبة لـ XHTML الذي يتم تقديمه كتطبيق/xhtml+xml (مما يجعله XML)، تنطبق قواعد XML ويمكن أن يكون أي عنصر فارغًا (على الرغم من أن XHTML DTD لا يمكنه التعبير عن ذلك).

ينبغي عليك إلقاء نظرة على XHTML DTDs, ، لقد تم إدراجهم جميعًا.فيما يلي مراجعة سريعة لجميع العناصر الرئيسية:

<br />
<hr />
<img />
<input />

يطلق عليها عناصر "باطلة" في HTML 5.وهي مدرجة في مواصفات W3 الرسمية.

العنصر الفارغ هو عنصر لا يسمح نموذج محتواه أبدًا بالحصول على محتويات تحت أي ظرف من الظروف.

اعتبارًا من أبريل 2013، هم:

منطقة، قاعدة، br، col، أمر، تضمين، hr، img، إدخال، كجن، رابط، ميتا، بارام، مصدر، مسار، wbr

اعتبارًا من ديسمبر 2018 (HTML 5.2)، هم:

المنطقة، القاعدة، br، col، embed، hr، img، الإدخال، الرابط، meta، param، المصدر، المسار، wbr

مشكلة أخرى لعلامة الإغلاق الذاتي لـ IE هي عنصر العنوان.عندما يرى IE (الذي جربه للتو في IE7) ذلك، فإنه يقدم للمستخدم صفحة فارغة.ومع ذلك "عرض المصدر" وكل شيء هناك.

<title/>

لقد رأيت هذا في الأصل عندما قام XSLT بإنشاء علامة الإغلاق الذاتي.

لن أحاول المبالغة في هذا الأمر، خاصة وأن غالبية الصفحات التي أكتبها إما تم إنشاؤها أو أن العلامة تحتوي على محتوى.الشيءان الوحيدان اللذان سببا لي مشكلة عند إغلاقهما ذاتيًا هما:

<title/>

ولهذا السبب، لجأت ببساطة إلى إعطائها دائمًا علامة إغلاق منفصلة، ​​لأنه بمجرد وجودها هناك في <head></head> إنه لا يجعل الكود الخاص بك أكثر فوضوية للعمل معه على أي حال.

<script/>

هذه هي المشكلة الكبيرة التي واجهت مشاكل معها مؤخرًا.لسنوات كنت أستخدم الإغلاق الذاتي دائمًا <script/> العلامات عندما يأتي البرنامج النصي من مصدر خارجي.لكنني بدأت مؤخرًا في تلقي رسائل خطأ JavaScript حول نموذج فارغ.بعد عدة أيام من البحث، وجدت أن المشكلة (من المفترض) هي أن المتصفح لم يصل مطلقًا إلى ملف <form> العلامة لأنها لم تدرك أن هذه كانت نهاية <script/> بطاقة شعار.لذلك عندما جعلتها منفصلة <script></script> العلامات، عملت كل شيء.لا أعرف لماذا تختلف الصفحات المختلفة التي قمت بإنشائها على نفس المتصفح، ولكن كان من المريح جدًا العثور على الحل!

<hr /> شيء آخر

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top