मुझे पता है कि यह एक पुराना मुद्दा है, मैं इसे कई बार आया हूं। समस्या यह है कि यहां सभी फिक्स हैंक हैं जो संभावित रूप से अनपेक्षित परिणाम होंगे।
सबसे पहले, रूट समस्या के लिए एक आसान स्पष्टीकरण है। मार्जिन ढहने के तरीके के कारण, यदि किसी कंटेनर के अंदर पहला तत्व शीर्ष मार्जिन होता है, तो शीर्ष मार्जिन प्रभावी रूप से मूल कंटेनर पर लागू होता है। एक डिबगर में
<div>
<h1>Test</h1>
</div>
, इस को खोलने और div मंडराना: आप निम्न कार्य करके अपने दम पर इस परीक्षण कर सकते हैं। आप देखेंगे कि div वास्तव में वास्तव में रखा गया है जहां H1 तत्व का शीर्ष-मार्जिन बंद हो जाता है। यह व्यवहार ब्राउज़र द्वारा किया गया है।
तो अजीब हैक्स का सहारा लेने के बिना इसमें कोई आसान फिक्स नहीं है, क्योंकि यहां की अधिकांश पोस्ट (कोई अपमान नहीं है, यह सिर्फ सच है) - बस मूल स्पष्टीकरण पर वापस जाएं - ...if the first element inside a container has a top margin...
- उसके बाद, इसलिए आपको कंटेनर में पहले तत्व की आवश्यकता होगी में शीर्ष मार्जिन है। ठीक है, लेकिन आप उन तत्वों को जोड़ने के बिना कैसे करते हैं जो आपके दस्तावेज़ के साथ अर्थपूर्ण रूप से हस्तक्षेप नहीं करते हैं?
आसान! छद्म तत्वों! आप इसे कक्षा या पूर्व परिभाषित मिश्रण के माध्यम से कर सकते हैं।इस के साथ
.top-margin-fix:before {
content: ' ';
display: block;
width: 100%;
height: .0000001em;
}
, ऊपर मार्कअप उदाहरण आप इस तरह के रूप में अपने div को संशोधित करेगा निम्नलिखित: एक वर्ग के माध्यम से
सीएसएस: एक :before
छद्म तत्व जोड़ें
<div class="top-margin-fix">
<h1>Test</h1>
</div>
क्यों क्या यह काम करता है?
कंटेनर में पहला तत्व, यदि इसका कोई शीर्ष-मार्जिन नहीं है, तो अगले तत्व के शीर्ष मार्जिन की शुरुआत की स्थिति निर्धारित करता है। :before
छद्म-तत्व जोड़कर, ब्राउज़र वास्तव में आपके पहले तत्व को से पहले मूल कंटेनर में गैर-अर्थात् (अन्य शब्दों में, एसईओ के लिए अच्छा) तत्व जोड़ता है।
प्रश्न: ऊंचाई: .0000001em क्यों?
ए ब्राउज़र के मार्जिन तत्व को नीचे धक्का देने के लिए ऊंचाई की आवश्यकता होती है। यह ऊंचाई प्रभावी रूप से शून्य है, लेकिन यह आपको अभी भी पैरेंट कंटेनर में पैडिंग जोड़ने की अनुमति देगी। चूंकि यह प्रभावी रूप से शून्य है, इसलिए इसका कंटेनर के लेआउट पर कोई प्रभाव नहीं पड़ेगा। सुंदर।
अब आप अजीब डिस्प्ले शैलियों को जोड़ने की बजाय इस समस्या को ठीक करने के लिए एक वर्ग (या बेहतर, एसएएसएस/कम, एक मिक्सिन!) जोड़ सकते हैं जो अप्रत्याशित परिणाम देगा जब आप अपने तत्वों के साथ अन्य चीजों को करना चाहते हैं तत्वों पर मार्जिन को समाप्त करना और/या इसे पैडिंग के साथ बदलना, या अजीब स्थिति/फ्लोट शैलियों जो वास्तव में इस समस्या को हल करने के लिए नहीं हैं।
'ओवरफ्लो: छिपा' 90% मामलों के लिए बेहतर है। – vsync
अतिप्रवाह क्यों होगा: छुपा बेहतर हो सकता है? – peterchon
@ पीटररॉन - क्योंकि ऑटो स्क्रॉलबार का कारण बन सकता है – vsync