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