डिजाइन निर्णय - क्यों <p> बिना </ p> उत्पन्न करें?


14

tl; डॉ

कुछ व्यापक रूप से उपयोग किए जाने वाले प्रोग्राम, जो HTML उत्पन्न करते हैं, केवल ओपनिंग टैग्स उत्पन्न करेंगे, और न ही बंद करने वाले, यह मानते हुए कि ब्राउज़र ठीक से पैराग्राफ बंद कर देगा।

इसके चेहरे पर, यह मुझे लगता है कि यह धारणा कि ब्राउज़र ठीक से पैराग्राफ को बंद कर देगा सही नहीं है। क्या मेरी व्याख्या सही है? आम तौर पर, इस तरह के फैसले में कौन से ट्रेडऑफ शामिल होते हैं?


मोइनमॉइन स्रोत कोड के माध्यम से ब्राउज़ करते हुए, कोड की निम्नलिखित पंक्ति ने मेरी आंख को पकड़ लिया:

# We only open those tags and let the browser auto-close them:
_auto_closing_tags = set(['p'])

( स्रोत )

बाकी कार्यान्वयन को पूरा करने के बाद, मैंने खुद को आश्वस्त किया है कि हाँ, वास्तव में, जब मोइनोइन अपने किसी एक पृष्ठ के लिए html कोड बनाता है, तो यह सही ढंग से पैराग्राफ ओपन टैग उत्पन्न करेगा, जहाँ उचित होगा, जबकि उसी समय उद्देश्यपूर्ण रूप से किसी भी तरह से बचना पैराग्राफ करीब टैग (तुच्छ रूप से ऐसा करने में सक्षम होने के बावजूद)।

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

क्या यह कोड ब्राउज़र कार्यान्वयन के बारे में एक मान्य धारणा बना रहा है? क्या उत्पन्न HTML वैध है? अधिक आम तौर पर, मैं यहां क्या कर सकता हूं?


2
वर्तमान उत्तर के बावजूद, यह एक नैतिक डिजाइन की तरह दिखता है। "आप जो कुछ भी भेजते हैं उसमें उदारवादी और रूढ़िवादी होते हैं" और वह सब। यह भी पूरी तरह से अनावश्यक है। मैं निश्चित रूप से एक (जोरदार शब्द) बग रिपोर्ट मोइनमॉइन को प्रस्तुत करूंगा। बहुत कम से कम उन्हें इस स्पष्ट व्यवहार का दस्तावेज और टिप्पणी करनी चाहिए।
कोनराड रुडोल्फ

जवाबों:


33

pतत्वों के लिए अंतिम टैग HTML में वैकल्पिक थे, और केवल XHTML में आवश्यक थे। हालाँकि, HTML5 ड्राफ्ट शर्तों का एक सेट पेश करता है जब pअंतिम टैग वास्तव में वैकल्पिक होता है:

यदि कोई तत्व, पता, लेख, एक तरफ, ब्लॉकचोट, dir, div, dl, फ़ील्ड, पाद, फ़ॉर्म, h1, h2, h3, h4, h5, h6, शीर्ष लेख का अनुसरण करता है, तो p तत्व का अंतिम टैग छोड़ा जा सकता है। , hgroup, hr, menu, nav, ol, p, pre, section, table, or ul, element, या यदि मूल तत्व में कोई अधिक सामग्री नहीं है और मूल तत्व तत्व नहीं है।

स्रोत: एचटीएमएल 5 विनिर्देश

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


5
महान दिमाग एक जैसा सोचते हैं, मुझे लगता है। :)
रॉबर्ट हार्वे

@ रोबर्टहेरवे आप इस राउंड को 12 सेकंड तक जीतते हैं ...
यानि

2
अंतिम टैग को छोड़ने के पक्ष में एक और तर्क: वे दस्तावेज़ संरचना से स्पष्ट हैं, और जब इसका दुरुपयोग किया जाता है, तो यह बहुत बढ़िया गोरे लोगों को भी पेश कर सकता है।
जॉन प्यूडी

1
एंड-टैग को छोड़ने में सक्षम होना स्पष्ट रूप से SGML का एक डिज़ाइन फीचर था, जो HTML पर आधारित था। यह स्पष्ट रूप से XML की विशेषता नहीं थी, जो कि XHTML पर आधारित है।
एलन शटको

4
एक तर्क मुझे बहुत दिखता है कि वह साफ दिखता है। विशेष रूप से <li>टैग के मामले में , टैग बुलेट पॉइंट्स की तरह कार्य करते हैं।
असंतुष्टगीत 10

16

एचटीएमएल 5 के लिए W3C विनिर्देश विशेष रूप से कहा गया है कि:

यदि कोई तत्व, पता, लेख, एक तरफ, ब्लॉकचोट, dir, div, dl, फ़ील्ड, पाद, फ़ॉर्म, h1, h2, h3, h4, h5, h6, शीर्ष लेख का अनुसरण करता है, तो p तत्व का अंतिम टैग छोड़ा जा सकता है। , घंटा, मेन्यू, नेवी, पी, पी, प्री, सेक्शन, टेबल, या एल एल एलिमेंट, या अगर पैरेंट एलिमेंट में ज्यादा कंटेंट नहीं है और पैरेंट एलिमेंट एलीमेंट नहीं है।

तो मूल रूप से कल्पना ने बहुत सारे तरीके प्रदान किए हैं जिनके द्वारा टैग को बंद करने की जटिलता (बड़ी या छोटी हो सकती है) से बचा जा सकता है। किसी भी अनुरूप ब्राउज़र कार्यान्वयन को इन अपवादों को समायोजित करना होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.