फ्लोट किए गए तत्व कंटेनर तत्व की ऊँचाई में नहीं जुड़ते हैं, और इसलिए यदि आप उन्हें साफ़ नहीं करते हैं, तो कंटेनर की ऊँचाई नहीं बढ़ेगी ...
मैं आपको नेत्रहीन दिखाऊंगा:
अधिक स्पष्टीकरण:
<div>
<div style="float: left;"></div>
<div style="width: 15px;"></div> <!-- This will shift
besides the top div. Why? Because of the top div
is floated left, making the
rest of the space blank -->
<div style="clear: both;"></div>
<!-- Now in order to prevent the next div from floating beside the top ones,
we use `clear: both;`. This is like a wall, so now none of the div's
will be floated after this point. The container height will now also include the
height of these floated divs -->
<div></div>
</div>
आप overflow: hidden;
कंटेनर तत्वों को भी जोड़ सकते हैं , लेकिन मैं आपको clear: both;
इसके बजाय उपयोग करने का सुझाव दूंगा।
इसके अलावा, यदि आप किसी ऐसे तत्व को स्वयं साफ़ करना चाहें, जिसका आप उपयोग कर सकते हैं
.self_clear:after {
content: "";
clear: both;
display: table;
}
सीएसएस फ्लोट कैसे काम करता है?
क्या वास्तव में फ्लोट है और यह क्या करता है?
float
संपत्ति सबसे शुरुआती द्वारा गलत समझा है। खैर, वास्तव में क्या करता float
है? प्रारंभ में, float
संपत्ति को छवियों के चारों ओर पाठ प्रवाह करने के लिए पेश किया गया था, जो कि फ्लोट किए गए हैं left
या right
। यहाँ @Madara Uchicha द्वारा एक और स्पष्टीकरण दिया गया है।
तो, क्या float
बक्से को साइड में रखने के लिए संपत्ति का उपयोग करना गलत है ? उत्तर है नहीं ; यदि आप float
संपत्तियों का उपयोग साइड बॉक्स को सेट करने के लिए करते हैं तो कोई समस्या नहीं है ।
एक inline
या block
स्तर तत्व फ्लोटिंग तत्व तत्व की तरह व्यवहार करेगा inline-block
।
डेमो
यदि आप एक तत्व तैरते हैं left
या right
, width
तत्व की सामग्री उस सामग्री तक सीमित होगी, जब तक width
कि इसे स्पष्ट रूप से परिभाषित नहीं किया जाता है ...
आप float
एक तत्व नहीं कर सकते center
। यह सबसे बड़ा मुद्दा है जिसे मैंने हमेशा शुरुआती लोगों के साथ देखा है float: center;
, जिसका उपयोग करना float
संपत्ति के लिए मान्य मूल्य नहीं है । float
आमतौर पर float
सामग्री को बहुत बाईं ओर या बहुत दाईं ओर ले जाने के लिए उपयोग किया जाता है । केवल हैं चार के लिए मान्य मानों float
संपत्ति यानी left
, right
, none
(डिफ़ॉल्ट) और inherit
।
मूल तत्व ढह जाता है, जब इसमें फ्लोट किए गए बाल तत्व होते हैं, इसे रोकने के लिए, हम clear: both;
संपत्ति का उपयोग करते हैं, दोनों पक्षों पर फ्लोट किए गए तत्वों को साफ करने के लिए, जो मूल तत्व के ढहने को रोकेंगे। अधिक जानकारी के लिए, आप यहां मेरे दूसरे जवाब का उल्लेख कर सकते हैं ।
(महत्वपूर्ण) इसके बारे में सोचें जहां हमारे पास विभिन्न तत्वों का ढेर है। जब हम उपयोग करते हैं float: left;
या float: right;
तत्व एक के बाद एक स्टैक से ऊपर जाता है। इसलिए सामान्य दस्तावेज़ प्रवाह में तत्व फ्लोट किए गए तत्वों के पीछे छिप जाएंगे क्योंकि यह सामान्य फ्लोट किए गए तत्वों के ऊपर स्टैक स्तर पर है। (कृपया इससे संबंधित न हों z-index
क्योंकि यह पूरी तरह से अलग है।)
एक उदाहरण के रूप में एक मामला लेते हुए यह समझाने के लिए कि कैसे सीएसएस तैरता है, यह मानते हुए कि हमें हेडर, फुटर और 2 कॉलम के साथ एक सरल 2 कॉलम लेआउट की आवश्यकता है, इसलिए यहां पर ब्लूप्रिंट कैसा दिखता है ...
उपरोक्त उदाहरण में, हम, या तो आप कर सकते हैं चल केवल लाल बक्से हो जाएगा float
दोनों के लिए left
, या आप कर सकते हैं float
करने के लिए पर left
करने के लिए, और एक अन्य right
अगर यह 3 कॉलम है, आप कर सकते हैं और साथ ही, लेआउट पर निर्भर करता है, float
2 करने के लिए कॉलम left
, जहां एक और ऐसा करने के लिए एक right
निर्भर करता है, हालांकि इस उदाहरण में, हमारे पास एक सरलीकृत 2 कॉलम लेआउट है ताकि float
एक को left
और दूसरे को right
।
मार्कअप और लेआउट बनाने के लिए शैलियों को और नीचे समझाया गया है ...
<div class="main_wrap">
<header>Header</header>
<div class="wrapper clear">
<div class="floated_left">
This<br />
is<br />
just<br />
a<br />
left<br />
floated<br />
column<br />
</div>
<div class="floated_right">
This<br />
is<br />
just<br />
a<br />
right<br />
floated<br />
column<br />
</div>
</div>
<footer>Footer</footer>
</div>
* {
-moz-box-sizing: border-box; /* Just for demo purpose */
-webkkit-box-sizing: border-box; /* Just for demo purpose */
box-sizing: border-box; /* Just for demo purpose */
margin: 0;
padding: 0;
}
.main_wrap {
margin: 20px;
border: 3px solid black;
width: 520px;
}
header, footer {
height: 50px;
border: 3px solid silver;
text-align: center;
line-height: 50px;
}
.wrapper {
border: 3px solid green;
}
.floated_left {
float: left;
width: 200px;
border: 3px solid red;
}
.floated_right {
float: right;
width: 300px;
border: 3px solid red;
}
.clear:after {
clear: both;
content: "";
display: table;
}
चलिए लेआउट के साथ कदम से कदम मिलाते हैं और देखते हैं कि फ्लोट कैसे काम करता है ..
सबसे पहले, हम मुख्य आवरण तत्व का उपयोग करते हैं, आप केवल यह मान सकते हैं कि यह आपका व्यूपोर्ट है, फिर हम वहां बहुत सारे अन्य header
फ़ेसबुक का उपयोग और असाइन करते height
हैं 50px
। यह सिर्फ एक सामान्य गैर फ्लोटेड ब्लॉक स्तर का तत्व है जो 100%
क्षैतिज स्थान तक ले जाएगा जब तक कि यह फ्लोट नहीं हो जाता है या हम inline-block
इसे असाइन नहीं करते हैं।
पहले मान्य मान के लिए float
है left
हमारे उदाहरण में ऐसा है, तो हम उपयोग float: left;
के लिए .floated_left
है, तो हम करने के लिए एक ब्लॉक फ्लोट करने का इरादा left
हमारे कंटेनर तत्व की।
स्तंभ बाईं ओर तैरता था
और हां, अगर आप देखें, तो मूल तत्व, जो .wrapper
ढह गया है, जिसे आप एक हरे रंग की सीमा के साथ देखते हैं, उसका विस्तार नहीं हुआ, लेकिन क्या यह सही है? थोड़ी देर में वापस आएँगे, अभी के लिए, हमें एक कॉलम मिला है left
।
दूसरे कॉलम में आकर, इसे float
यह करने देता हैright
एक अन्य स्तंभ दाईं ओर तैरता है
यहाँ, हम एक है 300px
विस्तृत स्तंभ है जो हम float
करने के लिए right
है, जो पहले कॉलम के बगल में बैठेंगे के रूप में यह करने के लिए जारी है left
, और के बाद से यह करने के लिए जारी है left
, यह करने के लिए खाली गटर बनाई गई right
है, और के बाद से पर अंतरिक्ष की पर्याप्त नहीं था right
, हमारे right
तैरता हुआ तत्व पूरी तरह से left
एक के पास बैठा था ।
फिर भी, मूल तत्व ढह गया है, ठीक है, चलो अब इसे ठीक करें। मूल तत्व को ढहने से रोकने के कई तरीके हैं।
- एक खाली ब्लॉक स्तर तत्व जोड़ें और
clear: both;
मूल तत्व समाप्त होने से पहले उपयोग करें , जो फ्लोट किए गए तत्व रखता है, अब यह clear
आपके अस्थायी तत्वों का एक सस्ता समाधान है जो आपके लिए काम करेगा लेकिन, मैं आपको इसका उपयोग नहीं करने की सलाह दूंगा।
समाप्त <div style="clear: both;"></div>
होने से पहले जोड़ें, .wrapper
div
जैसे
<div class="wrapper clear">
<!-- Floated columns -->
<div style="clear: both;"></div>
</div>
डेमो
ठीक है, यह बहुत अच्छी तरह से ठीक हो जाता है, कोई भी ध्वस्त अभिभावक नहीं होता है, लेकिन यह DOM में अनावश्यक मार्कअप जोड़ देता है, इसलिए कुछ सुझाव देते हैं, overflow: hidden;
अभिभावक तत्व पर तैरते हुए बाल तत्वों को रखने के लिए उपयोग करें जो कि काम करते हैं।
overflow: hidden;
पर प्रयोग करें.wrapper
.wrapper {
border: 3px solid green;
overflow: hidden;
}
डेमो
हमें हर बार हमें एक तत्व की बचत होती है, clear
float
लेकिन जैसा कि मैंने इसके साथ विभिन्न मामलों का परीक्षण किया, यह एक विशेष रूप से विफल हो गया, जो box-shadow
बाल तत्वों पर उपयोग करता है ।
डेमो (सभी 4 पक्षों पर छाया नहीं देख सकता,overflow: hidden;
इस समस्या का कारण बनता है)
तो अब क्या? एक तत्व को सहेजें, overflow: hidden;
इसलिए कोई स्पष्ट फिक्स हैक के लिए न जाएं, अपने सीएसएस में नीचे दिए गए स्निपेट का उपयोग करें, और जैसे आप overflow: hidden;
मूल तत्व के लिए उपयोग करते हैं, class
नीचे के तत्व को स्वयं स्पष्ट करने के लिए कॉल करें ।
.clear:after {
clear: both;
content: "";
display: table;
}
<div class="wrapper clear">
<!-- Floated Elements -->
</div>
डेमो
यहां, छाया इच्छित उद्देश्य के साथ काम करती है, साथ ही, यह मूल तत्व को भी साफ कर देती है जो टूटने से बचाता है।
और अंत में, हम clear
फ़्लोट किए गए तत्वों के बाद पाद का उपयोग करते हैं।
डेमो
किसी भी तरह से float: none;
उपयोग किया जाता है, क्योंकि यह डिफ़ॉल्ट है, इसलिए घोषित करने के लिए कोई उपयोग float: none;
?
खैर, यह निर्भर करता है, यदि आप एक उत्तरदायी डिजाइन के लिए जा रहे हैं, तो आप इस मूल्य का उपयोग कई बार करेंगे, जब आप अपने फ़्लोट किए गए तत्वों को एक निश्चित रिज़ॉल्यूशन पर एक दूसरे के नीचे प्रस्तुत करना चाहते हैं। उस float: none;
संपत्ति के लिए वहाँ एक महत्वपूर्ण भूमिका निभाता है।
कुछ वास्तविक दुनिया उदाहरण है कि कैसे float
उपयोगी है।
- पहला उदाहरण जो हमने पहले ही देखा था, वह एक या एक से अधिक स्तंभ लेआउट बनाना है।
img
अंदर फ़्लोटिंग का उपयोग करना p
जिससे हमारी सामग्री चारों ओर प्रवाहित हो सकेगी।
डेमो (अस्थायी के बिनाimg
)
डेमो 2 (img
फ्लोट किए गएleft
)
float
क्षैतिज मेनू बनाने के लिए उपयोग करना - डेमो
फ्लोट दूसरे तत्व के रूप में अच्छी तरह से, या `मार्जिन` का उपयोग करें
पिछले नहीं बल्कि कम से कम, मैं इस विशेष मामले की व्याख्या करना चाहता हूं, जहां आप float
केवल एक तत्व हैं left
लेकिन आप float
दूसरे को नहीं करते हैं, इसलिए क्या होता है?
मान लीजिए अगर हम float: right;
अपने से हटाते हैं .floated_right
class
, तो इसे div
चरम से प्रदान किया जाएगा left
क्योंकि यह तैरता नहीं है।
डेमो
तो इस मामले में, या तो आप कर सकते हैं float
करने के लिए left
के रूप में अच्छी तरह से
या
आप का उपयोगmargin-left
200px
कर सकते हैं जो बाएँ फ़्लोट किए गए स्तंभ के आकार के बराबर होगा यानी विस्तृत होगा ।