2009-02-25 8 views
47

सबसे लंबे समय तक, मैं समझना चाहता हूं कि ब्राउजर एचटीएमएल तत्वों के बीच खाली जगह क्यों जोड़ता है जब उनके बीच एक न्यूलाइन है, उदाहरण के लिए:ब्राउज़र अंतरिक्ष के रूप में एक नई लाइन क्यों प्रस्तुत करता है?

<span>Hello</span><span>World</span> 

उपरोक्त एचटीएमएल "हैलोवर्ल्ड" स्ट्रिंग आउटपुट करेगा के बिना "हैलो" और "वर्ल्ड" के बीच एक जगह, हालांकि निम्न उदाहरण में:

<span>Hello</span> 
<span>World</span> 

उपरोक्त एचटीएमएल "हैलो वर्ल्ड" स्ट्रिंग को "हैलो" और "वर्ल्ड" के बीच एक जगह के साथ "हैलो वर्ल्ड" स्ट्रिंग आउटपुट करेगा "।

अब, मुझे यह स्वीकार करने में कोई समस्या नहीं है कि यह वही तरीका है जो यह कार्य करता है, लेकिन जो चीज मुझे थोड़ी सी चीजें करती है वह यह है कि मैं हमेशा इस धारणा के तहत था कि एचटीएमएल तत्वों के बीच रिक्त स्थान (या न्यूलाइन) कोई फर्क नहीं पड़ता उस समय जब ब्राउज़र ने उपयोगकर्ता को एचटीएमएल प्रस्तुत किया था।

तो मेरा सवाल यह है कि अगर कोई जानता है कि इस व्यवहार के पीछे दार्शनिक या तकनीकी कारण क्या है।

धन्यवाद।

उत्तर

44

ब्राउज़र्स प्रतिपादन करते समय एक ही स्थान पर एकाधिक व्हाइटस्पेस वर्ण (न्यूलाइन सहित) को घनत्व देते हैं। एकमात्र अपवाद <pre> तत्वों के भीतर है या जिनके पास CSS property white-spacepre या pre-wrap सेट पर सेट है। (या एक्सएचटीएमएल में, xml:space="preserve" विशेषता।)

+0

या 'व्हाइट-स्पेस: प्री-लाइन;' –

+0

@AndrewEvt जहां तक ​​मैं कह सकता हूं, 'प्री-लाइन' अभी भी कई रिक्त स्थान को तोड़ने का कारण बनता है, न्यूलाइन के अलावा। हालांकि आपकी टिप्पणी ने मुझे 'प्री-रैप' ढूंढने का नेतृत्व किया था। –

1

यदि आपके पास दो टैग के बीच 'ए' चरित्र था, तो आप इसे प्रस्तुत करने की अपेक्षा करेंगे। इस मामले में, आपके पास दो टैग के बीच एक वर्ण '\ n' है; व्यवहार समान है, और संगत ('\ n' एक एकल सफेद स्थान के रूप में प्रस्तुत किया जाता है)।

47

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

निम्न उदाहरण पर विचार करें:

This is my colored HelloWorld example 
:

<p>This is my colored <span class="red_text">Hello</span> <span class="blue_text">World</span> example</p> 

आदर्श मामले में, आप उपयोगकर्ता दो फैला के बीच सफेद स्थान को निकाल तथापि में परिणाम होगा

This is my colored Hello World example 

देखना चाहते हैं

लेकिन उसी नमूने को एक लेखक द्वारा पुनः लिखा जा सकता है (HTML प्रारूप के बारे में ओसीडी के साथ ng :-)) के रूप में:

<p> 
    This is my colored 
    <span class="red_text">Hello</span> 
    <span class="blue_text">World</span> 
    example 
</p> 

यह बेहतर होगा अगर यह पिछले उदाहरण के साथ लगातार प्रस्तुत किया गया हो।

+0

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

-1

ब्राउज़र एक गलती यहाँ बनाने:

http://www.w3.org/TR/html4/appendix/notes.html#h-B.3.1

SGML, (देखें [ISO8879], धारा 7.6.1) यह बताता है कि एक लाइन के बाद एक स्टार्ट टैग पर ध्यान नहीं दिया जाना चाहिए तुरंत टूट एक लाइन ब्रेक चाहिए के रूप में एक अंत टैग से पहले तुरंत। यह अपवाद के बिना सभी HTML तत्वों पर लागू होता है।

+3

नहीं, आप यहां एक गलती कर रहे हैं: ओपी के उदाहरण में लाइन ब्रेक * अंत * टैग के बाद है! –

संबंधित मुद्दे