डिस्प्ले और नॉर्मल फ्लो

बिना किसी CSS के एक पेज पर तीन पैराग्राफ और कुछ लिंक डालें, और वे अपने आप ही लेआउट कर लेंगे: पैराग्राफ पेज के नीचे स्टैक हो जाते हैं, लिंक उस टेक्स्ट के अंदर बैठते हैं जहां आपने उन्हें लिखा है। किसी ने ब्राउज़र को ऐसा करने के लिए नहीं कहा। इससे पहले कि आप एक भी लेआउट नियम लिखें, पहले से ही एक लेआउट मौजूद होता है, और बाद में जो भी तकनीक आप इस्तेमाल करते हैं वह शुरुआत से नहीं बल्कि इसमें बदलाव होता है। यह अध्याय उस शुरुआती बिंदु और एक प्रॉपर्टी के बारे में है जो इसे नियंत्रित करती है।
नॉर्मल फ्लो
जब कोई ब्राउज़र बिना आपकी लेआउट CSS के एक पेज को लेआउट करता है, तो यह नॉर्मल फ्लो का उपयोग करता है: वह डिफ़ॉल्ट तरीका जिससे तत्व अपने आप को व्यवस्थित करते हैं। ब्लॉक जैसी चीजें, पैराग्राफ और हेडिंग ऊपर से नीचे तक स्टैक होती हैं, प्रत्येक अपनी स्वयं की लाइन पर। टेक्स्ट और लिंक एक लाइन के अंदर, बाएं से दाएं, चलते हैं, जब वे जगह से बाहर निकल जाते हैं तो अगली लाइन में लपेटते हैं।
आप पहले से ही जो टुकड़े फ्लो कर रहे हैं उनसे मिल चुके हैं: यह अध्याय बॉक्स मॉडल पर बनाता है, क्योंकि यह वे बॉक्स हैं जो फ्लो करते हैं। नॉर्मल फ्लो का नाम देना इसलिए लायक है क्योंकि लेआउट में सब कुछ इसके विरुद्ध परिभाषित किया गया है। फ्लेक्सबॉक्स, ग्रिड, और पोजिशनिंग सभी तरीके हैं "इन्हें डिफ़ॉल्ट से अलग तरीके से व्यवस्थित करने" के लिए, इसलिए डिफ़ॉल्ट जानना यह समझने के लिए है कि परिवर्तन क्यों समझदारी रखते हैं।
ब्लॉक बॉक्स और इनलाइन बॉक्स
तत्व नॉर्मल फ्लो में दो मुख्य प्रकार के होते हैं। एक ब्लॉक बॉक्स अपने कंटेनर की पूरी चौड़ाई लेता है और अपनी स्वयं की लाइन पर स्टैक होता है, अगले तत्व को नीचे धकेलता है। एक पैराग्राफ <p>, एक हेडिंग <h1>, और एक <div> सभी ब्लॉक हैं, जो है कि वे एक दूसरे के नीचे एक पंक्ति में क्यों खड़े होते हैं।
एक इनलाइन बॉक्स अलग होता है। यह टेक्स्ट की एक लाइन के अंदर बैठता है और केवल उतनी ही जगह लेता है जितनी उसकी सामग्री को चाहिए, इसलिए कई एक लाइन साझा कर सकते हैं। एक <span> या एक लिंक <a> इनलाइन होता है, जो है कि एक वाक्य के अंदर एक लिंक शब्दों के प्रवाह में क्यों रहता है बजाय अपनी स्वयं की लाइन पर कूदने के।
<!-- यह पैराग्राफ एक ब्लॉक है, इसलिए यह अपनी स्वयं की लाइन पर बैठता है -->
<p>This paragraph is a block, so it sits on its own line.</p>
<!-- लिंक इनलाइन है, इसलिए यह वाक्य के अंदर रहता है -->
<p>Read the <a href="/css/box-model">box model</a> for more.</p><p> और <div> जैसे ब्लॉक बॉक्स पूरी चौड़ाई लेते हैं और अपनी स्वयं की लाइनों पर स्टैक होते हैं। <span> और <a> जैसे इनलाइन बॉक्स एक लाइन के अंदर बैठते हैं और केवल उतनी ही जगह लेते हैं जितनी उन्हें चाहिए। यह है कि एक लिंक आपके वाक्य के अंदर क्यों रहता है बजाय अपनी स्वयं की पंक्ति पर टूटने के। डिस्प्ले प्रॉपर्टी
हर तत्व का एक डिफ़ॉल्ट प्रकार होता है, ब्लॉक या इनलाइन, लेकिन आप इस तक सीमित नहीं हैं। डिस्प्ले प्रॉपर्टी आपको यह बदलने देती है कि कोई तत्व कैसे व्यवहार करता है। एक लिंक पर display: block सेट करें और यह अब अपनी स्वयं की लाइन लेता है; एक सूची आइटम पर display: inline सेट करें और यह एक पंक्ति में बैठता है।
एक तीसरा मान है जो एक सामान्य समस्या को हल करता है: display: inline-block। यह इनलाइन बॉक्स की तरह लाइन में बहता है, लेकिन यह एक चौड़ाई, एक ऊंचाई, और लंबवत पैडिंग स्वीकार करता है जैसे एक ब्लॉक। यह है कि आप क्या चाहते हैं किसी चीज़ के लिए जैसे एक बटन या एक नाव गोली जो अपने पड़ोसियों के बगल में बैठनी चाहिए फिर भी एक सेट आकार लें।
.nav-link {
display: inline-block; /* लाइन में बहता है, लेकिन चौड़ाई और पैडिंग स्वीकार करता है */
padding: 8px 16px; /* लंबवत पैडिंग अब काम करता है, सादे इनलाइन के विपरीत */
}display प्रॉपर्टी यह बदलती है कि कोई तत्व ब्लॉक के रूप में या इनलाइन बॉक्स के रूप में व्यवहार करता है। block अपनी स्वयं की लाइन लेता है, inline टेक्स्ट लाइन में बैठता है। सहज मध्य विकल्प inline-block है, जो लाइन में बहता है फिर भी चौड़ाई और पैडिंग स्वीकार करता है, इसलिए यह है कि आप बटन और नाव लिंक के लिए क्या चाहते हैं। चीजों को छिपाना: डिस्प्ले नोन बनाम दृश्यमानता छिपी
कभी-कभी आप चाहते हैं कि एक तत्व न दिखे। दो तरीके हैं, और वे अलग तरीके से व्यवहार करते हैं। display: none तत्व को पूरी तरह से हटा देता है: यह गायब हो जाता है और कोई अंतर नहीं छोड़ता है, जैसे कि यह पेज पर बिल्कुल न हो। visibility: hidden इसे अदृश्य बनाता है लेकिन इसकी जगह रखता है, इसलिए वहां एक खाली छेद होता है जहां यह हुआ करता था।
कौन सा आप चाहते हैं यह इस बात पर निर्भर करता है कि आप जगह वापस चाहते हैं या नहीं। display: none का उपयोग करें कुछ को पूरी तरह से छोड़ने के लिए, एक बंद मेनू की तरह। visibility: hidden का उपयोग करें जब आप कुछ को लेआउट कूदने के बिना छिपाना चाहते हैं, क्योंकि इसका बॉक्स आरक्षित रहता है।
.closed-menu {
display: none; /* चला गया, और कोई अंतर नहीं छोड़ा गया */
}
.placeholder {
visibility: hidden; /* अदृश्य, लेकिन अभी भी अपनी जगह लेता है */
}display: none तत्व को हटाता है और कोई अंतर नहीं छोड़ता है, visibility: hidden इसे अदृश्य बनाता है लेकिन इसकी जगह रखता है। display: none चुनें जब आप जगह को भी चला जाना चाहते हैं, एक बंद मेनू की तरह। visibility: hidden चुनें जब आप नहीं चाहते कि लेआउट कूदे। डिस्प्ले कैसे आंतरिक लेआउट को बदलता है
आपने देखा है display एक तत्व को ब्लॉक और इनलाइन के बीच स्विच करता है। यह गहरे सिरे पर इससे अधिक करता है। समान प्रॉपर्टी है कि पंक्तियों और स्तंभों में बच्चों को व्यवस्थित करने के लिए एक कंटेनर को फ्लेक्सबॉक्स या ग्रिड में बदलता है। अभी के लिए, जो कुछ पकड़ना है वह यह है कि display एक डायल है जो निर्धारित करता है कि एक बॉक्स कैसे लेआउट होता है और इसके बच्चे इसके अंदर कैसे लेआउट होते हैं।
लेआउट एक बड़ा स्विच नहीं है जिसे आप एक बार फ्लिप करते हैं। आप display को विशिष्ट कंटेनर पर बदलते हैं जिन्हें एक अलग व्यवस्था की आवश्यकता है, और जो कुछ आप अकेले छोड़ते हैं वह नॉर्मल फ्लो में रहता है। फ्लेक्सबॉक्स और पोजिशनिंग अध्याय यहां से चलते हैं।
display प्रॉपर्टी जो ब्लॉक और इनलाइन को स्विच करता है वह भी है जो फ्लेक्सबॉक्स या ग्रिड में बच्चों को व्यवस्थित करने के लिए एक कंटेनर को बदलता है। लेआउट एक स्विच नहीं है जिसे आप एक बार फ्लिप करते हैं; आप display को कंटेनर पर बदलते हैं जिन्हें इसकी आवश्यकता है और बाकी को नॉर्मल फ्लो में छोड़ते हैं। फ्लेक्सबॉक्स और पोजिशनिंग अध्याय यहां से चलते हैं। 
