html - एचटीएमएल: वैकल्पिक समापन टैग शामिल, या बहिष्कृत?




html5 html4 (10)

कुछ HTML 1 बंद टैग वैकल्पिक हैं , यानी:

</HTML>
</HEAD>
</BODY>
</P>
</DT>
</DD>
</LI>
</OPTION>
</THEAD>
</TH>
</TBODY>
</TR>
</TD>
</TFOOT>
</COLGROUP>

नोट: समापन टैग के साथ उलझन में नहीं होना चाहिए जिन्हें शामिल करने के लिए मना किया गया है, यानी:

</IMG>
</INPUT>
</BR>
</HR>
</FRAME>
</AREA>
</BASE>
</BASEFONT>
</COL>
</ISINDEX>
</LINK>
</META>
</PARAM>

नोट: xhtml एचटीएमएल से अलग है। xhtml xml का एक रूप है, जिसके लिए प्रत्येक तत्व के पास एक बंद टैग होना आवश्यक है। एचटीएमएल में एक बंद टैग वर्जित किया जा सकता है, फिर भी xhtml में अनिवार्य है।

वैकल्पिक समापन टैग हैं

  • आदर्श रूप से शामिल है , लेकिन अगर आप उन्हें भूल गए हैं, तो हम उन्हें स्वीकार करेंगे
  • आदर्श रूप से शामिल नहीं है , लेकिन अगर आप उन्हें डालते हैं तो हम उन्हें स्वीकार करेंगे

दूसरे शब्दों में, क्या मुझे उन्हें शामिल करना चाहिए, या मुझे उन्हें शामिल नहीं करना चाहिए?

तत्व टैग टैग को बंद करने के बारे में एचटीएमएल 4.01 स्पेक वार्ता वैकल्पिक है , लेकिन यह नहीं कहता कि क्या उन्हें शामिल करना बेहतर है, या उन्हें शामिल करने के लिए बेहतर नहीं है।

दूसरी ओर, देवगुरु पर एक यादृच्छिक लेख कहता है :

अंतिम टैग वैकल्पिक है। हालांकि, यह अनुशंसा की जाती है कि इसे शामिल किया जाए।

कारण मैं पूछता हूं क्योंकि आप जानते हैं कि यह संगतता कारणों के लिए वैकल्पिक है; और अगर वे हो सकते थे तो वे उन्हें ( अनिवार्य | वर्जित ) बनाते।

इसे एक और तरीका दें: एचटीएमएल 1, 2, 3 ने इनके संबंध में क्या किया, अब वैकल्पिक, बंद टैग। एचटीएमएल 5 क्या करता है? और मुझे क्या करना चाहिए?

ध्यान दें

एचटीएमएल में कुछ तत्व बंद टैग होने से मना कर रहे हैं। आप इससे असहमत हो सकते हैं, लेकिन यह विनिर्देश है, और यह बहस के लिए नहीं है। मैं वैकल्पिक समापन टैग के बारे में पूछ रहा हूं, और इरादा क्या था।

फुटनोट

1 एचटीएमएल 4.01


एचटीएमएल 5 क्या करता है?

इस प्रश्न का उत्तर डब्ल्यू 3 सी वर्किंग ड्राफ्ट में है: http://www.w3.org/TR/html5/syntax.html#syntax-tag-omission

और मुझे क्या करना चाहिये?

यह शैली का मामला है। मैं कभी भी अंत टैग को छोड़ने की कोशिश नहीं करता क्योंकि यह मुझे कठोर होने में मदद करता है और आवश्यक टैग को छोड़ नहीं देता है।


कारण मैं पूछता हूं क्योंकि आप जानते हैं कि यह संगतता कारणों के लिए वैकल्पिक है; और अगर वे हो सकते थे तो वे उन्हें (अनिवार्य | वर्जित) बनाते।

यह एक दिलचस्प अनुमान है। इसका मेरा पठन यह है कि किसी भी समय किसी टैग को विश्वसनीय रूप से अनुमानित किया जा सकता है, टैग वैकल्पिक है। डिजाइन से पता चलता है कि इरादा इसे लिखना तेज़ और आसान बनाना था।

एचटीएमएल 1, 2, 3 ने इनके संबंध में क्या किया, अब वैकल्पिक, बंद टैग।

एचटीएमएल 2 के लिए डीटीडी RFC में एम्बेडेड है, जिसमें मूल एचटीएमएल डीटीडी के साथ , जगह पर वैकल्पिक शुरुआत और अंत टैग हैं।

एचटीएमएल 3 को छोड़ दिया गया था (ब्राउज़र युद्धों के लिए धन्यवाद) और एचटीएमएल 3.2 के साथ प्रतिस्थापित किया गया था (जिसे वेब की तत्कालीन वर्तमान स्थिति का वर्णन करने के लिए डिज़ाइन किया गया था)।

एचटीएमएल 5 क्या करता है?

एचटीएमएल 5 शुरुआत से ही "cowpaths फ़र्श" की ओर तैयार किया गया था।

और मुझे क्या करना चाहिये?

आह, अब वह व्यक्तिपरक और तर्कवादी है :)

कुछ लोग सोचते हैं कि पाठकों की आंखों के सामने होने के कारण स्पष्ट टैग पठनीयता और रखरखाव के लिए बेहतर हैं।

कुछ लोग सोचते हैं कि अनुमानित टैग संपादक के अव्यवस्था के आधार पर पठनीयता और रखरखाव के लिए बेहतर हैं।


ऐसे मामले हैं जहां स्पष्ट टैग मदद करते हैं, लेकिन कभी-कभी यह अनावश्यक pedantism है।

ध्यान दें कि एचटीएमएल स्पेक स्पष्ट रूप से निर्दिष्ट करता है कि यह टैग को छोड़ने के लिए मान्य है, इसलिए यह हमेशा एक त्रुटि नहीं है।

उदाहरण के लिए आपको कभी भी </body></html> । किसी ने कभी भी <tbody> स्पष्ट रूप से (उस बिंदु तक नहीं देखा है कि एक्सएचटीएमएल ने इसके लिए अपवाद बनाए हैं)।

आपको </head><body> की आवश्यकता नहीं है जब तक कि आपके पास डोम-मैनिपुलेटिंग स्क्रिप्ट्स नहीं हैं जो वास्तव में <head> (फिर इसे स्पष्ट रूप से बंद करना बेहतर होता है, क्योंकि <head> अंतर्निहित अंत के लिए नियम आपको आश्चर्यचकित कर सकते हैं)।

नेस्टेड सूचियां वास्तव में </li> बिना बेहतर होती हैं, क्योंकि तब त्रुटिपूर्ण ul > ul पेड़ बनाना कठिन होता है।

मान्य:

<ul>
  <li>item
  <ul>
    <li>item
  </ul>
</ul>

अमान्य:

<ul>
  <li>item</li>
  <ul>
    <li>item</li>
  </ul>
</ul>

और ध्यान रखें कि अंत टैग्स को निहित किया गया है कि आप सभी तत्वों को बंद करने का प्रयास करते हैं या नहीं। अंत टैग डालने से स्वचालित रूप से अधिक मजबूत पार्सिंग नहीं हो जाएगी:

<p>foo <p>bar</p> baz</p>

के रूप में पार्स होगा:

<p>foo</p><p>bar</p> baz

यह केवल तभी मदद कर सकता है जब आप दस्तावेजों को प्रमाणित करते हैं।


जो कुछ भी आपको लगता है वह कोड को और अधिक पठनीय और रखरखाव योग्य बनाता है।

व्यक्तिगत रूप से मैं हमेशा <td> और <tr> को बंद करने के इच्छुक हूं, लेकिन मैं कभी भी <li> परेशान नहीं होगा।


मेरी सिफारिश यह है कि आप सबसे वैकल्पिक करीबी टैग, और सभी वैकल्पिक विशेषताओं को छोड़ देते हैं जिन्हें आप दूर कर सकते हैं। कई आईडीई शिकायत करेंगे ताकि आप इनमें से कुछ को छोड़ने में सक्षम न हों लेकिन यह आमतौर पर छोटे फ़ाइल आकार और कम अव्यवस्था के लिए बेहतर होता है। यदि आपके पास कोड जनरेटर निश्चित रूप से अंत टैग को छोड़ देते हैं क्योंकि आप इससे कुछ अच्छे आकार में कमी प्राप्त कर सकते हैं। आमतौर पर यह वास्तव में एक तरफ या दूसरे से कोई फर्क नहीं पड़ता।

लेकिन जब यह कोई फर्क पड़ता है तो उस पर कार्रवाई करें। मेरे कुछ हालिया कार्यों पर मैं खुले टैग के लिए जेनरेट किए गए अंत और अनावश्यक मूल्य विशेषताओं को समाप्त करके 1.5 एमबी से 800 केबी तक मेरे प्रस्तुत एचटीएमएल के आकार को कम करने में सक्षम था, जहां तत्व का पाठ समान था मूल्य। मेरे पास लगभग 200 टैग हैं। मैं इसे किसी अन्य तरीके से पूरी तरह कार्यान्वित कर सकता हूं, लेकिन यह अधिक काम ($$$) होगा, इसलिए यह मुझे पृष्ठ को और अधिक उत्तरदायी बनाने में मदद करता है।

जिज्ञासा से बाहर मुझे पता चला कि अगर मैंने उन गुणों के चारों ओर उद्धरण हटा दिए जिन्हें उनकी आवश्यकता नहीं थी तो मैं 20 KB बचा सकता था, लेकिन मेरा आईडीई (विजुअल स्टूडियो) इसे पसंद नहीं करता है। मुझे यह भी आश्चर्य हुआ कि एएसपी.नेट वास्तव में लंबी आईडी है जो मेरी फाइल के 20% के लिए खाता उत्पन्न करता है।

यह विचार कि हम कभी भी HTML के किसी भी प्रासंगिक अंश को सख्ती से वैध मान सकते हैं, पहले स्थान पर गुमराह किया गया था, इसलिए जो भी आपके और आपके ग्राहकों के लिए सबसे अच्छा काम करता है। मैंने जो कभी भी देखा या उपयोग किया है, वे कहेंगे कि वे एक्सएचटीएमएल उत्पन्न करते हैं, लेकिन वे वास्तव में 100% काम नहीं करते हैं, और वैसे भी सख्त पालन करने का कोई फायदा नहीं है।


मैं विभिन्न विरोधाभासों को समझने के लिए, HTML के इतिहास में आपकी सहायता के लिए यहां कुछ लिंक जोड़ रहा हूं। यह आपके प्रश्न का उत्तर नहीं है, लेकिन आप इन विभिन्न digests पढ़ने के बाद और जानेंगे।

एचटीएमएल 5 में गोताखोरी से कुछ अंश:

[टी] वह तथ्य है कि "टूटा" एचटीएमएल मार्कअप अभी भी वेब ब्राउज़र में काम करता है लेखकों को टूटी हुई HTML पेज बनाने के लिए प्रेरित किया। बहुत सारे टूटे हुए पेज। कुछ अनुमानों से, वेब पर 99% से अधिक HTML पृष्ठों में उनमें से कम से कम एक त्रुटि है। लेकिन चूंकि ये त्रुटियां ब्राउज़र को दृश्य त्रुटि संदेशों को प्रदर्शित करने का कारण नहीं बनाती हैं, इसलिए कोई भी उन्हें ठीक नहीं करता है।

डब्ल्यू 3 सी ने इसे वेब के साथ मौलिक समस्या के रूप में देखा, और उन्होंने इसे सही करने के लिए तैयार किया। एक्सएमएल, 1 99 7 में प्रकाशित, क्षमा करने वाले ग्राहकों की परंपरा से तोड़ दिया और अनिवार्य है कि एक्सएमएल का उपभोग करने वाले सभी कार्यक्रमों को तथाकथित "अच्छी तरह से गठित" त्रुटियों को घातक के रूप में माना जाना चाहिए। यूनानी नेता Draco बाद पहली त्रुटि पर असफल होने की इस अवधारणा को "ड्रैकोनियन त्रुटि प्रबंधन" के रूप में जाना जाने लगा, जिसने अपने कानूनों के अपेक्षाकृत मामूली अवरोधों के लिए मृत्युदंड की स्थापना की। जब डब्लू 3 सी ने एचटीएमएल शब्दावली के रूप में एचटीएमएल को संशोधित किया, तो उन्होंने अनिवार्य किया कि नए application/xhtml+xml एमआईएमई प्रकार के साथ काम किए गए सभी दस्तावेज draconian त्रुटि हैंडलिंग के अधीन होंगे। यदि आपके एक्सएचटीएमएल पेज में भी एक अच्छी तरह से गठबंधन त्रुटि थी [...] वेब ब्राउज़र के पास प्रसंस्करण रोकने और अंतिम उपयोगकर्ता को त्रुटि संदेश प्रदर्शित करने के अलावा कोई विकल्प नहीं होगा।

यह विचार सार्वभौमिक रूप से लोकप्रिय नहीं था। मौजूदा पृष्ठों पर 99% की अनुमानित त्रुटि दर, अंतिम उपयोगकर्ता को त्रुटियों को प्रदर्शित करने की वर्तमान उपस्थिति, और लागत को औचित्य देने के लिए एक्सएचटीएमएल 1.0 और 1.1 में नई सुविधाओं की कमी के साथ, वेब लेखकों ने मूल रूप से application/xhtml+xml अनदेखा किया । लेकिन इसका मतलब यह नहीं है कि उन्होंने एक्सएचटीएमएल को पूरी तरह नजरअंदाज कर दिया। ओह, सबसे निश्चित रूप से नहीं। एक्सएचटीएमएल 1.0 विनिर्देश के परिशिष्ट सी ने दुनिया के वेब लेखकों को एक छेड़छाड़ दी: "ऐसा कुछ ऐसा करें जो एक्सएचटीएमएल सिंटैक्स की तरह दिखता है, लेकिन इसे text/html एमआईएमई प्रकार के साथ प्रस्तुत करते रहें।" और यही वही है जो हजारों वेब डेवलपर्स ने किया : उन्होंने एक्सएचटीएमएल सिंटैक्स में "अपग्रेड" किया लेकिन इसे टेक्स्ट / एचटीएमएल एमआईएमई प्रकार के साथ प्रस्तुत किया।

आज भी, लाखों वेब पेज एक्सएचटीएमएल होने का दावा करते हैं। वे पहली पंक्ति पर एक्सएचटीएमएल डक्ट टाइप के साथ शुरू करते हैं, लोअरकेस टैग नामों का उपयोग करते हैं, विशेषता मानों के चारों ओर उद्धरण का उपयोग करते हैं, और <br /> और <hr /> जैसे खाली तत्वों के बाद पीछे पीछे स्लैश जोड़ते हैं। लेकिन इन पृष्ठों का केवल एक छोटा सा अंश application/xhtml+xml एमआईएम प्रकार के साथ परोसा जाता है जो एक्सएमएल के ड्रैकोनियन त्रुटि हैंडलिंग को ट्रिगर करेगा। किसी भी पृष्ठ को एमआईएमई प्रकार के text/html साथ परोसा जाता है - डॉटटाइप, सिंटैक्स या कोडिंग स्टाइल के बावजूद - "क्षमा करने" एचटीएमएल पार्सर का उपयोग करके पार्स किया जाएगा, किसी भी मार्कअप त्रुटियों को चुपचाप अनदेखा कर दिया जाएगा, और कभी भी अंतिम उपयोगकर्ताओं (या किसी और को) को चेतावनी नहीं देगा यदि पृष्ठ तकनीकी रूप से टूटे हुए हैं।

एक्सएचटीएमएल 1.0 में इस छेड़छाड़ को शामिल किया गया था, लेकिन एक्सएचटीएमएल 1.1 ने इसे बंद कर दिया, और कभी-कभी अंतिम एक्सएचटीएमएल 2.0 ने ड्रैकोनियन त्रुटि प्रबंधन की आवश्यकता की परंपरा जारी रखी। और यही कारण है कि अरबों पृष्ठ हैं जो एक्सएचटीएमएल 1.0 होने का दावा करते हैं, और केवल एक मुट्ठी भर जो एक्सएचटीएमएल 1.1 (या एक्सएचटीएमएल 2.0) होने का दावा करती है। तो क्या आप वास्तव में एक्सएचटीएमएल का उपयोग कर रहे हैं? अपने एमआईएम प्रकार की जांच करें। (असल में, यदि आप नहीं जानते कि आप किस एमआईएमई प्रकार का उपयोग कर रहे हैं, तो मैं बहुत अधिक गारंटी दे सकता हूं कि आप अभी भी text/html का उपयोग कर रहे हैं।) जब तक कि आप अपने पृष्ठों को एमआईएमई प्रकार के application/xhtml+xml , आपका तथाकथित "एक्सएचटीएमएल" एक्सएमएल केवल नाम में है।

[टी] वह लोग जिन्होंने एचटीएमएल और एचटीएमएल फॉर्मों का विकास करने का प्रस्ताव दिया था, उन्हें दो विकल्पों का सामना करना पड़ा: डब्ल्यू 3 सी के बाहर अपना काम छोड़ना जारी रखें या जारी रखें। उन्होंने बाद वाले को चुना, whatwg.org डोमेन पंजीकृत किया, और जून 2004 में, WHAT वर्किंग ग्रुप का जन्म हुआ

[टी] वह कामकाजी समूह चुपचाप कुछ अन्य चीजों पर भी काम कर रहा था। उनमें से एक विनिर्देश था, शुरुआत में वेब फॉर्म 2.0 नामक, जिसने एचटीएमएल रूपों में नए प्रकार के नियंत्रण जोड़े। (आप एक फॉर्म ऑफ मैडनेस में वेब फॉर्म के बारे में और जानेंगे।) दूसरा एक मसौदा विनिर्देश था जिसे "वेब एप्लीकेशन 1.0" कहा जाता था, जिसमें डायरेक्ट-मोड ड्राइंग कैनवास जैसी प्रमुख नई सुविधाएं और प्लगइन के बिना ऑडियो और वीडियो के लिए देशी समर्थन शामिल था।

अक्टूबर 200 9 में, डब्ल्यू 3 सी ने एक्सएचटीएमएल 2 वर्किंग ग्रुप को बंद कर दिया और अपने फैसले को समझाने के लिए इस कथन को जारी किया :

जब डब्ल्यू 3 सी ने मार्च 2007 में एचटीएमएल और एक्सएचटीएमएल 2 कार्यकारी समूहों की घोषणा की, तो हमने संकेत दिया कि हम एक्सएचटीएमएल 2 के लिए बाजार की निगरानी करना जारी रखेंगे। डब्ल्यू 3 सी समुदाय के लिए एचटीएमएल के भविष्य के बारे में स्पष्ट संकेत के महत्व को पहचानता है।

जबकि हम वर्षों में एक्सएचटीएमएल 2 वर्किंग ग्रुप के योगदान के मूल्य को पहचानते हैं, प्रतिभागियों के साथ चर्चा के बाद, डब्ल्यू 3 सी प्रबंधन ने कार्य समूह के चार्टर को 200 9 के अंत में समाप्त होने और इसे नवीनीकृत करने की अनुमति देने का निर्णय लिया है।

जीतने वाले लोग जहाज हैं।


यदि यह अनिवार्य है, तो इसे छोड़ दें।

यदि यह एक उद्देश्य प्रदान करता है (यहां तक ​​कि एक मामूली मामूली उद्देश्य, जैसे कि आपकी आईडीई को खुश करना या आपकी आंखों को खुश करना), इसे छोड़ दें।

वैकल्पिक वस्तुओं को देखने के लिए एक अच्छी तरह से परिभाषित स्पेक में दुर्लभ है जो व्यवहार को प्रभावित नहीं करते हैं। निश्चित रूप से "टिप्पणियों" के अपवाद के साथ। लेकिन एचटीएमएल स्पेक एक डिजाइन स्पेक से कम है, और वर्तमान प्रमुख कार्यान्वयन की स्थिति के एक दस्तावेज़ के अधिक है। तो जब कोई आइटम HTML में वैकल्पिक होता है और ऐसा लगता है कि कोई उद्देश्य नहीं है, तो हम अनुमान लगा सकते हैं कि वैकल्पिक प्रकृति केवल विशिष्ट ब्राउज़र में एक क्विर्क का दस्तावेज़ीकरण है।

उपरोक्त लिंक किए गए एचटीएमएल -5 स्पेक आरएफसी अनुभाग को देखते हुए, आप देखते हैं कि वैकल्पिक टैग अजीब तरह से टिप्पणियों की उपस्थिति से जुड़े हुए हैं! आपको यह बताने चाहिए कि लेखक डिजाइन टोपी नहीं पहन रहे हैं। वे इसके बजाय बड़े कार्यान्वयन में "दस्तावेज क्विर्क" का खेल खेल रहे हैं। इसलिए हम इस संबंध में कल्पना को गंभीरता से नहीं ले सकते हैं।

तो, समाधान है: इसे पसीना मत करो। वास्तव में मायने रखता है कि कुछ पर ले जाएँ। :)


वर्जित बंद प्रकारों के लिए वाक्यविन्यास का उपयोग करें: <img /> xml में स्वीकार किए गए टैग को बंद करने के लिए <img /> साथ


व्यक्तिगत रूप से, मैं एक्सएचटीएमएल का प्रशंसक हूं और, जैसे कि गॉपपे, "मैं कभी भी अंत टैग को छोड़ने की कोशिश नहीं करता क्योंकि यह मुझे कठोर होने में मदद करता है और आवश्यक टैग को छोड़ नहीं देता है।"

परंतु

यदि आप जानबूझकर HTML 4.n का उपयोग कर रहे हैं, तो कोई भी तर्क नहीं दे सकता कि उनमें से दस्तावेज़ को उपभोग करना आसान बनाता है, क्योंकि वैधता के विपरीत अच्छी तरह से गठबंधन की धारणा एक एक्सएमएल अवधारणा है, और आप उस लाभ को खो देते हैं जब आप कुछ करीबी टैग को मना कर दें। तो एकमात्र मुद्दा वैधता बन जाता है ... और यदि यह अभी भी उनके बिना मान्य है ... तो आप बैंडविड्थ को भी बचा सकते हैं, नहीं?


सी # जैसी कुछ घुंघराले ब्रैकेट भाषाओं में, यदि आप केवल दो पंक्तियों के लंबे होते हैं तो आप घुंघराले ब्रेसिज़ को एक कथन के चारों ओर छोड़ सकते हैं। उदाहरण के लिए...

अगर ([हालत])
[कोड]

लेकिन आप यह नहीं कर सकते ...

अगर ([हालत])
[कोड]
[कोड]

तीसरी पंक्ति अगर कथन का हिस्सा नहीं होगी। यह पठनीयता को नुकसान पहुंचाता है, और बग आसानी से पेश किया जा सकता है, और खोजने में मुश्किल हो सकती है।

इसी कारण से, मैं सभी टैग बंद करता हूं। आईएमजी टैग जैसे टैग अभी भी बंद होने की आवश्यकता है, बस एक अलग बंद टैग के साथ नहीं।





html4