هل كتابة علامات الإغلاق الذاتي للعناصر ليست ممارسة سيئة فارغة تقليديًا؟

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

  •  20-08-2019
  •  | 
  •  

سؤال

لقد لاحظت أن jQuery (أو هو Firefox) سيحول بعضًا من ملفاتي <span class="presentational"></span> into <span class="presentational" />

سؤالي الآن هو، هل هذا مقبول لكتابة الترميز الخاص بي بهذه الطريقة؟هل ستختنق أي متصفحات عليه؟

أنا شخصياً أعتقد أن الأمر يبدو أكثر نظافة <span class="presentational" /> إذا كان سيكون فارغا.

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

المحلول

أفترض أن سؤالك يتعلق بالشرطة المائلة الحمراء على عناصر الإغلاق الذاتي عند عرض المصدر في Firefox.إذا كان الأمر كذلك، فقد تعثرت في واحدة من المناقشات الأكثر عنفًا، ولكن في الوقت نفسه، عدوانية سلبية بين صانع المتصفح وصانع المتصفح.حروب مطوري الويب.XHTML لا يتعلق فقط بترميز المستند.يتعلق الأمر أيضًا بكيفية تقديم المستندات عبر الويب.

قبل ان ابدا؛أحاول جاهدة عدم الانحياز هنا.

تنص مواصفات XHTML 1.1 على أن خادم الويب يجب أن يخدم XHTML مع نوع محتوى التطبيق/xhtml+xml.يقوم Firefox بتمييز تلك الخطوط المائلة اللاحقة على أنها غير صالحة لأنه يتم تقديم المستند الخاص بك كنص/html بدلاً من application/xhtml+xml.خذ هذين المثالين؛ترميز متطابق، أحدهما يعمل كـ application/xhtml+xml، والآخر كـ text/html.

http://alanstorm.com/testbed/xhtml-as-html.php

http://alanstorm.com/testbed/xhtml-as-xhtml.php

يضع Firefox علامة على الشرطة المائلة اللاحقة في العلامة الوصفية على أنها غير صالحة للمستند الذي يتم تقديمه مع text/html، وصالح للمستند الذي يتم تقديمه مع application/xhtml+xml.

لماذا هذا مثير للجدل

بالنسبة لمطور المتصفح، الهدف من XHTML هو أنه يمكنك التعامل مع المستند الخاص بك على أنه XML، مما يعني أنه إذا أرسل إليك شخص ما شيئًا غير صالح، فإن المواصفات تنص على أنه ليس عليك تحليله.لذلك، إذا تم تقديم مستند كـ application/xhtml+xml ويحتوي على محتوى غير جيد، يُسمح للمطور أن يقول "ليست مشكلتي".يمكنك أن ترى ذلك في العمل هنا

http://alanstorm.com/testbed/xhtml-not-valid.php

عندما يتم تقديم مستند كنص/html، يعامله Firefox على أنه مستند HTML قديم عادي ويستخدم إجراءات التسامح، وإصلاحه لك، والتحليل

http://alanstorm.com/testbed/xhtml-not-valid-as-html.php

لذا، بالنسبة لصانع المتصفح، فإن تقديم XHTML كنص/html أمر مثير للسخرية، لأنه لا يتم التعامل معه مطلقًا على أنه XML بواسطة محرك العرض الخاص بالمتصفح.

منذ عدة سنوات مضت، كان مطورو الويب يتطلعون إلى أن يكونوا أكثر من مجرد علامات على القرود (إخلاء المسؤولية:(أدرج نفسي كواحد منهم) بدأت في البحث عن طرق لتطوير أفضل الممارسات التي لا تتضمن جداول متداخلة ثلاث مرات، ولكنها لا تزال تسمح بتجربة تصميم مقنعة.لقد تمسكوا/نحن بـ XHTML/CSS، لأن W3C قال أن هذا هو المستقبل، وكان الخيار الآخر الوحيد هو عالم يتحكم فيه بائع واحد (Microsoft) في مواصفات العلامات الفعلية.الشر الحقيقي هناك هو بائع واحد, ، وليس الكثير من مايكروسوفت.أقسم.

فأين الجدل؟هناك مشكلتان في application/xhtml+xml.الأول هو إنترنت إكسبلورر.يوجد خطأ/ميزة قديمة في IE حيث سيطالب المحتوى المقدم كتطبيق/xhtml+xml المستخدم بتنزيل المستند.إذا حاولت زيارة ملف xhtml-as-xhtml.php المذكور أعلاه باستخدام IE، فمن المحتمل أن يكون هذا هو ما حدث.هذا يعني أنه إذا كنت تريد استخدام application/xhtml+xml، فيجب عليك القيام بذلك شم المتصفح لـ IE, ، حدد رأس Accepts وقم بعرض application/xhtml+xml فقط لتلك المتصفحات التي تقبله.هذا هو ليست تافهة كما يبدو أنه صحيح، ويتعارض أيضًا مع مبدأ "الكتابة مرة واحدة" الذي كان مطورو الويب يسعون لتحقيقه.

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

إضافة المزيد من البنزين إلى المشكلة هو أن مواصفات XHTML 1.0 (وليس 1.1) تقول أن مستندات XHTML يمكن سيتم تقديمه كنص/html، على افتراض معين إرشادات التوافق ويلي.أشياء مثل علامة img التي يتم إغلاقها ذاتيًا وما شابه.الكلمة الأساسية هنا هي يمكن.في RFC يتكلم, ، قد يعني اختياري.لقد اختار Firefox عدم التعامل مع المستندات المقدمة باستخدام نوع مستند XHTML ولكن مع نوع محتوى نص/html على أنه XHTML.ومع ذلك، سيسعد مدقق W3C الإبلاغ عن صحة هذه المستندات.

سأترك للقارئ أن يفكر في العجب/الرعب المتزامن للثقافة التي تكتب وثيقة لتحديد ما يقصدونه بالكلمة يمكن.

تحرك للأمام

وأخيرا، وهذا هو ما برمته أتش تي أم أل 5 الشيء يدور حول.أصبحت XHTML موضوعًا سياسيًا ساخنًا لدرجة أن مجموعة من الأشخاص الذين أرادوا دفع اللغة إلى الأمام قرروا الذهاب في اتجاه آخر.لقد أنتجوا مواصفات لـ HTML 5.يتم حاليًا مناقشة هذا الأمر في W3C، ومن المتوقع أن ينتهي في وقت ما خلال العقد القادم.في هذه الأثناء، يقوم بائعو المتصفح بانتقاء واختيار الميزات من المواصفات قيد التقدم وتنفيذها.

التحديثات من التعليقات

في التعليقات، أليكس يشير إلى أنه إذا كنت تريد البحث عن شيء ما، فيجب عليك التحقق من رأس القبول لمعرفة ما إذا كان application/xhtml+xml مقبولًا بواسطة وكيل المستخدم.

هذا صحيح تماما.بشكل عام، إذا كنت ستقوم بالبحث، فابحث عن الميزة، وليس عن المتصفح.

نصائح أخرى

إضافة إلى الإجابات الأخرى:في IE، وجود عناصر مثل <span /> في الترميز الخاص بك سوف يسبب جميع أنواع المشاكل مع طرق اجتياز DOM في JavaScript.ألق نظرة على مستند XHTML التالي:

<?xml version="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">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Test</title>
    <script type="text/javascript">
        function show() {
            var span = document.getElementById("span");
            alert(span.innerHTML);
        }
    </script>
</head>
<body onload="show();">
<p id="p1">Paragraph containing some text followed by
           an empty span<span id="span"/></p>
<p id="p2">Second paragraph just containing text</p>
</body>
</html>

الفكرة هي أنه عند تحميل الصفحة، ستحصل JavaScript على إشارة إلى النطاق الفارغ وتعرض محتويات HTML الخاصة بها.ستكون هذه سلسلة فارغة، أليس كذلك؟ليس في IE لن يحدث ذلك.في IE، تحصل على كل المحتوى بعد الامتداد في المستند بأكمله:

</P>
<P id=p2>Second paragraph just containing text</P>

وأيضا الثاني <p> يظهر في فترة childNodes مجموعة.نفس الشيء <p> هو أيضا في الجسم childNodes جمع، يعني يمكن أن تحتوي العقدة على عدة آباء بشكل فعال.هذه ليست أخبارًا جيدة جدًا للنصوص البرمجية التي تعتمد على اجتياز DOM.

ولدي أيضا تدوين حول هذا.

نعم. أنه. انها سوف يسبب مشاكل في بعض الحالات لالمتصفحات القديمة.

<script type='text/javascript' src='script.js' />

في هذه الحالة، قد لا يفهم المتصفح القديم الذي العلامة <script> قد انتهت.

وشغل منصب التطبيق / XHTML + XML، <تمتد /> يعني إنشاء عنصر تمتد مع أي محتوى.

وشغل منصب النص / أتش تي أم أل، <تمتد /> يعني إنشاء عنصر فترة حيث محتويات العنصر تتبع هذه العلامة حتى واجه العلامة، أو علامة أخرى (أو EOF) أن يغلق ضمنا العنصر واجهت. أي في هذه الحالة <تمتد /> يعني نفس .

وبصرف النظر: HTML 5 وتعرف على حد سواء وHTML والتسلسلات XHTML، لذلك لا يؤثر على هذه المسألة بطريقة أو بأخرى. أنها لا تتطلب مثل XHTML 1.1، يمكن أن تتحقق أن XHTML كما التطبيق / XHTML + XML، على عكس XHTML 1.0. في الواقع على الرغم من هذا لا يغير شيئا لأن جميع المتصفحات علاج أي إصدار من XHTML بمثابة نص / HTML كما حساء العلامة.

والجدير بالذكر أيضا هو أن إعلان <?xml ...?> قبل DOCTYPE يلقي IE في وضع المراوغات.

واطلع على مذكرة بشأن موضوع تشكيل مجموعة عمل XHMTL: HTTP: // www.w3.org/TR/xhtml-media-types/

وباختصار - هو على ما يرام إذا XHTML الخاص بك سوف يتم التعامل معها على أنها XHTML. إذا كنت تسير على التظاهر هو HTML (التي تحتاج إلى القيام به إذا كنت تريد أن يتم تحميلها بواسطة Internet Explorer (بما في ذلك الإصدار 8، الأكثر وقت كتابة هذا التقرير) ثم عليك أن تقفز من خلال الأطواق).

ووالأطواق مزعج بما فيه الكفاية أن أوصي معظم الناس التمسك HTML 4.01.

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

و<script> هو واحد مهم لا بد من أن تكون مغلقة مع </script> لتجنب المشاكل.

وآخر هو <meta> التي تعمل على نحو أفضل بكثير مع العناكب كما هو مكتوب <meta></meta> بدلا من <meta />

وليس بالضبط السؤال، ولكن ذات الصلة، من حيث التنسيق، إصدارات IE لديهم مشاكل مع العناصر مجرد فارغة مثل <div></div> أو <div />. في هذه الحالة، لا بد <div>&nbsp;</div> للحفاظ على التنسيق.

وينبغي أن يقال explicitely أنه لا توجد علامات مغلقة النفس في HTML، لذلك كلما يقرر متصفح XHTML لعلاج ك HTML، فإنه لن ندرك أن العلامة مغلق. ليست مشكلة بالنسبة العلامات التي لا يجب أن تكون مغلقة في HTML، مثل <img>، ولكن من الواضح سيئة مع العلامات مثل <span>.

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