2011-07-09 38 views
6

एचटीएमएल संरचना:मार्जिन टॉप क्यों काम नहीं करता है?

<div id="main"> 
    <div id="left"></div> 
    <div id="right"></div> 
<div id="footer"></div> 
</div> 

शैली:

#main{ 
    margin: 0 auto; 
    width: 960px; 
} 
#left{ 
    float: left; 
    border: 1px solid red; 
    width: 300px; 
    margin-right: 10px; 
    height: 500px; 
} 
    #right{ 
    float: right; 
    border: 1px solid green; 
    width: 500px; 
    height: 500px; 
} 
#footer{ 
    clear: both; 
    margin-top: 20px; 
    border: 1px solid lime; 
    height: 200px; 
} 

क्यों पाद लेख में margin-top: 20px; काम नहीं करता है? इसका कारण क्या हो सकता है?

+2

के संभावित डुप्लिकेट सही दिखाई देगा [सीएसएस मार्जिन-टॉप में स्पष्ट के साथ काम नहीं कर रहा है: दोनों] (http://stackoverflow.com/questions/4198269/in-css-margin-top-is-not-working-with-clear-both) – Nicole

+0

भी [फ्लोटेड डिवी सीएसएस के नीचे मार्जिन-टॉप] का डुप्लिकेट (http://stackoverflow.com/questions/3236060/margin-top-under-a-floated-div-css) – Nicole

उत्तर

9

प्रयास करें जोड़ने के लिए कुछ स्पष्ट:

<div id="main"> 
    <div id="left"></div> 
    <div id="right"></div> 
    <div style="clear:both"></div> 
    <div id="footer"></div> 
</div> 

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

<div id="main"> 
    <div id="left" style="background:#FF000;border:solid 1px #000000;float:left">LEFT</div> 
    <div id="right" style="background:#00FF00;border:solid 1px #000000;float:right">RIGHT</div> 
    <div id="footer" style="clear:both;margin-top:10px;background:#00FFFF;border:solid 1px #000000;">FOOTER</div> 
</div> 

अतिरिक्त div के साथ:

अतिरिक्त div बिना

<div id="main"> 
    <div id="left" style="background:#FF000;border:solid 1px #000000;float:left">LEFT</div> 
    <div id="right" style="background:#00FF00;border:solid 1px #000000;float:right">RIGHT</div> 
    <div style="background:#0000FF;border:solid 1px #000000;clear:both">CLEARER</div> 
    <div id="footer" style="margin-top:10px;background:#00FFFF;border:solid 1px #000000;">FOOTER</div> 
</div> 

संसाधन:

http://www.w3.org/TR/CSS2/visuren.html#flow-control

+1

एमयू बहुत छोटा है, मैं क्यों जोड़ता हूं स्पष्ट: दोनों पाद लेख करने के लिए। यह काम नहीं कर सकता अगर मैं एक स्टाइल फ्लोट जोड़ता हूं: बाएं। मार्जिन टॉप काम करता है। अर्थात्: #footer {स्पष्ट: दोनों; फ्लोट: बाएं;} – zhuanzhou

+0

@zhuanzhou: मैंने बस डोमनोकज़ के स्वरूपण को ठीक किया है, एचटीएमएल और सीएसएस उनके हैं लेकिन यह छिपा हुआ था क्योंकि वह अपना कोड इंडेंट करना भूल गया था। –

+0

@zhuanzhou - मुझे आशा है कि मेरा संशोधन आपके दिमाग को साफ़ कर देगा। – dpp

1

चल आइटम साफ़ करने का एक div जोड़े

<div id="main"> 
    <div id="left"></div> 
    <div id="right"></div> 
    <div class="clear"></div> 
<div id="footer"></div> 
</div> 

और सीएसएस

.clear { 
    clear: both; 
} 

बाएँ और दाएँ जहां अस्थायी, अंतरिक्ष वे ढह पर कब्जा कर लिया के बाद से, तो नाव साफ़ करने से इस अंतरिक्ष वापस लाता है और पाद लेख के बाद यह

+0

मैं स्पष्ट क्यों जोड़ता हूं: दोनों पाद लेख में। मार्जिन टॉप काम नहीं कर सकता है। लेकिन अगर मैं एक स्टाइल फ्लोट जोड़ता हूं: इसे छोड़ दें। मार्जिन टॉप काम करता है। अर्थात्: #footer {स्पष्ट: दोनों; फ्लोट: बाएं;} - – zhuanzhou

+0

नहीं, आप फूटर को स्पष्ट रूप से नहीं जोड़ते हैं, खासकर यदि यह फ़्लोटिंग है, इसलिए मैंने अतिरिक्त div – Ibu

+0

जोड़ा है ठीक है, यह काम करता है, लेकिन क्या कारण है ... जब हम इसे जोड़ते हैं तो क्या होता है डीआईवी कक्षा = 'स्पष्ट'। सिद्धांत को समझने की आवश्यकता है ताकि हम अगली बार इसे लागू कर सकें। –

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