निम्नलिखित सीएसएस नियम क्या करता है:
.clear { clear: both; }
और हमें इसका उपयोग करने की आवश्यकता क्यों है?
निम्नलिखित सीएसएस नियम क्या करता है:
.clear { clear: both; }
और हमें इसका उपयोग करने की आवश्यकता क्यों है?
जवाबों:
मैं यह नहीं समझा रहा हूँ कि कैसे फ़्लोट्स यहाँ (विस्तार से) काम करते हैं, क्योंकि यह सवाल आम तौर पर ध्यान केंद्रित करता है कि उपयोग क्यों करते हैं clear: both;या clear: both;वास्तव में क्या करते हैं ...
मैं इस उत्तर को सरल, और बिंदु पर रखूँगा, और आपको रेखांकन करके समझाऊँगा कि clear: both;यह क्यों आवश्यक है या यह क्या करता है ...
आम तौर पर डिजाइनर तत्वों को बाएं या दाएं तैरते हैं, जो दूसरी तरफ एक खाली स्थान बनाता है जो अन्य तत्वों को शेष स्थान को ऊपर ले जाने की अनुमति देता है।
जब तत्वों को 2 ब्लॉक स्तर के तत्वों की आवश्यकता होती है, तो तत्व फ्लोट किए जाते हैं। उदाहरण के लिए, हम एक मूल वेबसाइट डिजाइन करना चाहते हैं, जिसमें नीचे की तरह एक लेआउट है ...

डेमो इमेज का लाइव उदाहरण ।
डेमो के लिए कोड
नोट: आप को जोड़ने के लिए हो सकता है header, footer, aside, sectionके रूप में (और अन्य एचटीएमएल 5 तत्वों) display: block;स्पष्ट रूप से उल्लेख है कि तत्वों ब्लॉक स्तर तत्व हैं के लिए अपने स्टाइलशीट में।
मेरे पास एक बुनियादी लेआउट, 1 हेडर, 1 साइड बार, 1 सामग्री क्षेत्र और 1 पाद है।
के लिए कोई फ़्लोट नहीं होता है header, इसके बाद asideटैग आता है जो मैं अपनी वेबसाइट साइडबार के लिए उपयोग करूंगा, इसलिए मैं तत्व को बाईं ओर तैरने दूंगा।
नोट: डिफ़ॉल्ट रूप से, ब्लॉक स्तर का तत्व दस्तावेज़ को 100% चौड़ाई तक ले जाता है, लेकिन जब इसे बाएँ या दाएँ फ़्लोट किया जाता है, तो यह आपके द्वारा रखी गई सामग्री के अनुसार आकार देगा।
तो जैसा कि आप ध्यान दें, बाईं ओर तैरने divवाला स्थान अपने सही अप्रयुक्त स्थान को छोड़ देता है, जो divइसके बाद शेष स्थान पर शिफ्ट होने की अनुमति देगा ।
divअगर वे फ्लोट नहीं हैं तो एक के बाद एक रेंडर करेंगेdiv एक-दूसरे के बगल में शिफ्ट होगा यदि बाएं या दाएं तैरते हैंठीक है, तो यह है कि ब्लॉक स्तर के तत्व बाएं या दाएं तैरते समय कैसे व्यवहार करते हैं, इसलिए अब क्यों clear: both;आवश्यक है और क्यों?
तो अगर आप लेआउट डेमो में ध्यान दें - यदि आप भूल गए हैं, तो यहाँ यह है ..
मैं नामक एक वर्ग का उपयोग कर रहा हूं .clearऔर यह एक संपत्ति रखता है जिसका clearमूल्य कहा जाता है both। तो देखते हैं कि इसकी आवश्यकता क्यों है both।
मैंने फ्लोट किया है asideऔर sectionतत्वों को बाईं ओर है, इसलिए एक परिदृश्य को मानें, जहां हमारे पास एक पूल है, जहां headerठोस भूमि है, asideऔर sectionपूल में तैर रहे हैं और पाद फिर से ठोस भूमि है, कुछ इस तरह से ।।

तो नीले पानी का कोई पता नहीं है कि फ्लोट किए गए तत्वों का क्षेत्र क्या है, वे पूल या छोटे से बड़े हो सकते हैं, इसलिए यहां एक सामान्य मुद्दा आता है जो सीएसएस शुरुआती के 90% को परेशान करता है: कंटेनर तत्व की पृष्ठभूमि क्यों नहीं खिंची जाती है जब यह तैरते हुए तत्व रखता है। ऐसा इसलिए है क्योंकि कंटेनर तत्व यहां एक पीओएल है और पीओओएल को पता नहीं है कि कितनी वस्तुएं तैर रही हैं, या फ्लोट किए गए तत्वों की लंबाई या चौड़ाई क्या है, इसलिए यह बस खिंचाव नहीं करेगा।
( यह करने के लिए साफ तरीके से इस उत्तर के अनुभाग को देखें [स्पष्ट करें] । मैं divस्पष्टीकरण उद्देश्य के लिए जानबूझकर एक खाली उदाहरण का उपयोग कर रहा हूं )
मैंने ऊपर 3 उदाहरण प्रदान किए हैं, 1 सामान्य दस्तावेज़ प्रवाह है जहां redपृष्ठभूमि बस के रूप में प्रस्तुत करना होगा क्योंकि कंटेनर किसी भी फ्लोटेड ऑब्जेक्ट को नहीं रखता है।
दूसरे उदाहरण में, जब ऑब्जेक्ट को बाईं ओर फ्लोट किया जाता है, तो कंटेनर तत्व (POOL) फ्लोट किए गए तत्वों के आयामों को नहीं जान पाएंगे और इसलिए यह फ्लोट किए गए तत्वों की ऊँचाई तक नहीं पहुंचेंगे।

उपयोग करने के बाद clear: both;, कंटेनर तत्व को उसके फ्लोटेड तत्व आयामों तक बढ़ाया जाएगा।

clear: both;उपयोग किया जाने वाला एक अन्य कारण तत्व को शेष स्थान में स्थानांतरित करने से रोकना है।
कहते हैं कि आप 2 तत्वों को एक साथ और उनके नीचे एक और तत्व चाहते हैं ... तो आप 2 तत्वों को बाईं ओर तैरेंगे और आप उनके नीचे दूसरे तत्वों को चाहते हैं।
divsectionबचे हुए स्थान में स्थानांतरित होने के कारण तैरता छोड़ दिया गयाdivसाफ़ किया जाता है ताकि sectionटैग फ्लोटेड divs के नीचे रेंडर हो जाए 

अंतिम लेकिन कम से कम नहीं, footerटैग किए गए तत्वों के बाद टैग प्रदान किया जाएगा क्योंकि मैंने clearअपने footerटैग घोषित करने से पहले कक्षा का उपयोग किया है , जो यह सुनिश्चित करता है कि सभी फ्लोट किए गए तत्व (बाएं / दाएं) उस बिंदु तक साफ हो गए हैं।
समाशोधन के लिए आ रहा है जो तैरने से संबंधित है। जैसा कि पहले से ही @Elky द्वारा निर्दिष्ट किया गया है , जिस तरह से हम इन झांकियों को साफ कर रहे हैं, वह ऐसा करने का एक साफ तरीका नहीं है क्योंकि हम एक खाली divतत्व का उपयोग कर रहे हैं जो एक divतत्व नहीं है । इसलिए यहाँ स्पष्टता आती है।
इसे एक आभासी तत्व के रूप में सोचें जो आपके मूल तत्व के समाप्त होने से पहले आपके लिए एक खाली तत्व बना देगा। यह आपके रैपर तत्व को तैरते हुए तत्वों को पकड़े हुए अपने आप साफ कर देगा। यह तत्व आपके DOM में शाब्दिक रूप से मौजूद नहीं होगा, लेकिन काम करेगा।
किसी भी आवरण तत्व को तैरते हुए तत्वों को साफ करने के लिए, हम उपयोग कर सकते हैं
.wrapper_having_floated_elements:after { /* Imaginary class name */
content: "";
clear: both;
display: table;
}
उसके :afterलिए मेरे द्वारा उपयोग किए गए छद्म तत्व पर ध्यान दें class। इससे पहले कि यह अपने आप बंद हो जाए, रैपर तत्व के लिए एक आभासी तत्व बनाया जाएगा। अगर हम डोम में देखें तो आप देख सकते हैं कि यह डॉक्यूमेंट ट्री में कैसे दिखता है।
इसलिए यदि आप देखते हैं, तो यह फ्लोट किए गए बच्चे के बाद प्रदान किया जाता है, divजहां हम फ्लोट्स को साफ करते हैं, जो कि संपत्ति के divसाथ एक खाली तत्व के बराबर कुछ भी नहीं है clear: both;जो हम इसके लिए भी उपयोग कर रहे हैं। अब क्यों display: table;और contentइस जवाब के दायरे से बाहर है लेकिन आप यहां छद्म तत्व के बारे में अधिक जान सकते हैं ।
ध्यान दें कि यह IE8 में भी काम करेगा क्योंकि IE8 :afterछद्म का समर्थन करता है ।
अधिकांश डेवलपर अपने पृष्ठों पर अपनी सामग्री को बाएं या दाएं तैरते हैं, शायद लोगो, साइडबार, सामग्री आदि को विभाजित करते हैं, इन विभाजनों को बाईं या दाईं ओर फ्लोट किया जाता है, बाकी जगह अप्रयुक्त छोड़ देता है और इसलिए यदि आप अन्य कंटेनरों को रखते हैं, तो यह होगा बचे हुए स्थान में भी तैरते हैं, इसलिए clear: both;इसका उपयोग करने से रोकने के लिए , यह बाएं या दाएं तैरते हुए सभी तत्वों को साफ करता है।
------------------ ----------------------------------
div1(Floated Left) Other div takes up the space here
------------------ ----------------------------------
अब क्या होगा अगर आप नीचे दिए गए अन्य div रेंडर करना चाहते हैं div1, तो आप इसका उपयोग करेंगे clear: both;ताकि यह सुनिश्चित हो सके कि आप सभी फ्लोट्स को छोड़ दें या दाएं
------------------
div1(Floated Left)
------------------
<div style="clear: both;"><!--This <div> acts as a separator--></div>
----------------------------------
Other div renders here now
----------------------------------
display: inline-blockएक तत्व पर रखना है , और माता-पिता पर आप उपयोग कर सकते हैं text-align: left, text-align: centerया text-align: rightउदाहरण के लिए।
clearसंपत्ति इंगित करता है कि बाएं, सही है या एक तत्व के दोनों ओर एक ही ब्लॉक स्वरूपण संदर्भ में पहले जारी तत्वों के निकट नहीं हो सकता। साफ किए गए तत्वों को संबंधित तैरने वाले तत्वों के नीचे धकेल दिया जाता है। उदाहरण:
clear: none; तत्व तैरते हुए तत्वों के समीप रहता हैclear: left; तत्व नीचे तैरने वाले तत्वों के नीचे धकेल दिया गयाclear: right; तत्व नीचे तैरने वाले तत्वों के नीचे धकेल दिया गयाclear: both; तत्व सभी अस्थायी तत्वों के नीचे धकेल दिया गयाclear वर्तमान ब्लॉक स्वरूपण संदर्भ के बाहर फ़्लोट्स को प्रभावित नहीं करता हैdisplay: inline-block;इस परिदृश्य से सीएसएस संपत्ति को हटा दें तो क्या होगा ? यह inline-blockमूल तत्व को उसके सहोदर तत्व तक ले जाएगा, जिसमें कक्षा है float-left। जो "स्पष्ट वर्तमान ब्लॉक प्रारूपण संदर्भ के बाहर झांकियों को प्रभावित नहीं करता है" बयान को गलत बनाता है। कृपया कोई समझा सकता है?
display: inline-blockमतलब है कि यह अब ब्लॉक स्वरूपण संदर्भ उत्पन्न नहीं करता है (बी) उस तत्व के अंदर फ्लोट्स / क्लीयर करता है और पहले फ्लोट सभी एक ही ब्लॉक स्वरूपण संदर्भ (व्यूपोर्ट) का हिस्सा बन जाते हैं।
बस clear:bothइसके divसाथ संपत्ति को हटाने की कोशिश करें class sampleऔर देखें कि यह कैसे चल रहा है divs।
श्री एलियन का जवाब एकदम सही है, लेकिन वैसे भी मैं इस्तेमाल करने की सलाह नहीं देता <div class="clear"></div>क्योंकि यह सिर्फ एक हैक है जो आपके मार्कअप को गंदा कर देता है। यह divखराब संरचना और शब्दार्थ के मामले में बेकार है , यह आपके कोड को लचीला नहीं बनाता है। कुछ ब्राउज़रों में यह div अतिरिक्त ऊंचाई का कारण बनता है और आपको इसे और height: 0;भी बदतर बनाना होगा। लेकिन असली परेशानी तब शुरू होती है जब आप अपने तैरते हुए तत्वों के आसपास की पृष्ठभूमि या सीमा को जोड़ना चाहते हैं - यह सिर्फ ढह जाएगा क्योंकि वेब को बुरी तरह से डिजाइन किया गया था । मैं फ्लोट किए गए तत्वों को कंटेनर में लपेटने की सलाह देता हूं जिसमें सीएसएस नियम स्पष्ट है । यह हैक के रूप में अच्छी तरह से है, लेकिन सुंदर और अधिक लचीला उपयोग करने के लिए और मानव और एसईओ रोबोट के लिए पठनीय है।
clearfix: stackoverflow.com/questions/211383/…
जब आप चाहते हैं कि एक तत्व नीचे अन्य तत्व में रखा जाए तो आप सीएसएस में इस कोड का उपयोग करें। इसका उपयोग झांकियों के लिए किया जाता है।
यदि आप सामग्री तैरते हैं तो आप बाएं या दाएं तैर सकते हैं ... इसलिए एक सामान्य लेआउट में आपके पास एक बाएं नौसेना, एक सामग्री div और एक पाद हो सकता है।
यह सुनिश्चित करने के लिए कि फ़ूटर इन दोनों फ़्लोट्स से नीचे रहता है (यदि आपने बाएँ और दाएँ फ़्लोट किया है) तो आप फ़ूटर को इस प्रकार रखें clear: both।
इस तरह यह दोनों झांकियों के नीचे रहेगा।
(यदि आप केवल बाएं समाशोधन कर रहे हैं तो आपको केवल वास्तव में इसकी आवश्यकता है clear: left;।)
इस ट्यूटोरियल से गुजरें:
floatऔर नीचे या अगले तत्व चाहते हैं, दाएं या बाएं नहीं।