नीट सीएसएस-केवल समाधान
निम्नलिखित कोड का उपयोग अनैतिक रूप से आगे बढ़ने वाले डिव के लिए सामग्रीविहीन पहले-बच्चे को प्रस्तुत करने के लिए करें:
.parent:before
{content: '';position: relative;height: 0px;width: 0px;overflow: hidden;white-space: pre;}
इस पद्धति का लाभ यह है कि आपको किसी भी मौजूदा तत्व के सीएसएस को बदलने की आवश्यकता नहीं है, और इसलिए डिजाइन पर न्यूनतम प्रभाव पड़ता है। इस के आगे, तत्व यह है कि जोड़ा जाता है एक छद्म तत्व है, जो है नहीं डोम पेड़ में।
छद्म तत्वों का समर्थन व्यापक है: फ़ायरफ़ॉक्स 3+, सफारी 3+, क्रोम 3+, ओपेरा 10+, और IE 8+। यह किसी भी आधुनिक ब्राउज़र में काम करेगा (नए के साथ सावधान रहें ::before
, जो IE8 में समर्थित नहीं है)।
प्रसंग
यदि किसी तत्व का पहला बच्चा है margin-top
, तो अभिभावक निरर्थक मार्जिन को ढहाने के तरीके के रूप में अपनी स्थिति को समायोजित करेगा। क्यों? यह ऐसा ही है।
निम्नलिखित समस्या को देखते हुए:
<style type="text/css">
div {position: relative;}
.parent {background-color: #ccc;}
.child {margin-top: 40px;}
</style>
<div class="parent"><!--This div moves 40px too-->
<div class="child">Hello world!</div>
</div>
आप सामग्री के साथ एक बच्चे को जोड़कर इसे ठीक कर सकते हैं, जैसे कि एक साधारण स्थान। लेकिन हम सभी के लिए रिक्त स्थान जोड़ने से नफरत करते हैं, जो केवल एक डिजाइन का मुद्दा है। इसलिए, white-space
संपत्ति का उपयोग नकली सामग्री के लिए करें।
<style type="text/css">
div {position: relative;}
.parent {background-color: #ccc;}
.child {margin-top: 40px;}
.fix {position: relative;white-space: pre;height: 0px;width: 0px;overflow: hidden;}
</style>
<div class="parent"><!--This div won't move anymore-->
<div class="fix"></div>
<div class="child">Hello world!</div>
</div>
जहां position: relative;
फिक्स की सही स्थिति सुनिश्चित करता है। और white-space: pre;
आपको किसी भी सामग्री को जोड़ने की आवश्यकता नहीं है - एक सफेद स्थान की तरह - ठीक करने के लिए। और height: 0px;width: 0px;overflow: hidden;
यह सुनिश्चित करता है कि आप कभी भी फिक्स नहीं देखेंगे।
आपको प्राचीन IE ब्राउज़रों में वास्तव में शून्य को जोड़ने line-height: 0px;
या max-height: 0px;
सुनिश्चित करने की आवश्यकता हो सकती है (मैं अनिश्चित हूँ)। और वैकल्पिक रूप से आप <!--dummy-->
इसे पुराने IE ब्राउज़र में जोड़ सकते हैं , अगर यह काम नहीं करता है।
संक्षेप में, आप यह सब केवल सीएसएस के साथ कर सकते हैं (जो HTML डोम-ट्री में एक वास्तविक बच्चे को जोड़ने की आवश्यकता को हटा देता है):
<style type="text/css">
div {position: relative;}
.parent {background-color: #ccc;}
.child {margin-top: 40px;}
.parent:before {content: '';position: relative;height: 0px;width: 0px;overflow: hidden;white-space: pre;}
</style>
<div class="parent"><!--This div won't move anymore-->
<div class="child">Hello world!</div>
</div>