The CSS Podcast - 010: Flexbox
रिस्पॉन्सिव डिज़ाइन में, साइडबार एक ऐसा डिज़ाइन पैटर्न है जो कुछ कॉन्टेंट के साथ इनलाइन में दिखता है. जहां व्यूपोर्ट में जगह होती है वहां यह पैटर्न बेहतरीन तरीके से काम करता है. हालांकि, जहां जगह कम होती है वहां यह सख्त लेआउट समस्या पैदा कर सकता है.
फ़्लेक्सिबल बॉक्स लेआउट मॉडल (फ़्लेक्सबॉक्स), एक डाइमेंशन वाले कॉन्टेंट के लिए डिज़ाइन किया गया लेआउट मॉडल है. यह अलग-अलग साइज़, और उन आइटम के लिए सबसे अच्छा लेआउट लौटा सकता है.
यह साइडबार इस पैटर्न के लिए सबसे अच्छा लेआउट मॉडल है. फ़्लेक्सबॉक्स की मदद से, साइडबार और कॉन्टेंट को इनलाइन में व्यवस्थित करने के साथ-साथ, जहां ज़रूरत के मुताबिक जगह नहीं है वहां साइडबार को नई लाइन में ले जाया जा सकता है. ब्राउज़र के लिए सख्त डाइमेंशन सेट करने के बजाय, फ़्लेक्सबॉक्स के साथ, इसके बजाय, अलग-अलग सीमाएं बनाकर, कॉन्टेंट के दिखने के तरीके का पता लगाया जा सकता है.
फ़्लेक्सिबल लेआउट की मदद से क्या किया जा सकता है?
फ़्लेक्स लेआउट में ये सुविधाएं होती हैं, जिन्हें इस गाइड में देखा जा सकता है.
- इन्हें पंक्ति या कॉलम के तौर पर दिखाया जा सकता है.
- ये दस्तावेज़ के लिखने के मोड के हिसाब से काम करते हैं.
- ये डिफ़ॉल्ट रूप से एक लाइन में होते हैं, लेकिन इन्हें कई लाइनों में रैप करने के लिए कहा जा सकता है.
- लेआउट में मौजूद आइटम को, DOM में मौजूद उनके क्रम से अलग करके, विज़ुअल तौर पर फिर से क्रम में लगाया जा सकता है.
- आइटम के अंदर जगह बांटी जा सकती है, ताकि वे अपने पैरंट में उपलब्ध जगह के हिसाब से बड़े और छोटे हो सकें.
- बॉक्स अलाइनमेंट प्रॉपर्टी का इस्तेमाल करके, रैप किए गए लेआउट में आइटम और फ़्लेक्स लाइन के आस-पास स्पेस बांटा जा सकता है.
- आइटम को क्रॉस ऐक्सिस पर अलाइन किया जा सकता है.
मुख्य ऐक्सिस और क्रॉस ऐक्सिस
फ़्लेक्सबॉक्स को समझने के लिए मुख्य ऐक्सिस और क्रॉस ऐक्सिस के सिद्धांत को समझना है.
मुख्य ऐक्सिस, वह है जिसे आपकी flex-direction
प्रॉपर्टी ने सेट किया है.
अगर यह row
है, तो आपका मुख्य ऐक्सिस पंक्ति के साथ है. अगर यह column
है, तो आपका मुख्य ऐक्सिस कॉलम के साथ है.
Flex आइटम, मुख्य ऐक्सिस पर ग्रुप के तौर पर मूव करते हैं. याद रखें: हमारे पास बहुत सी चीज़ें हैं और हम उनके लिए एक ग्रुप के तौर पर सबसे अच्छा लेआउट पाने की कोशिश कर रहे हैं.
क्रॉस ऐक्सिस मुख्य ऐक्सिस पर दूसरी दिशा में चलता है,
इसलिए, अगर flex-direction
row
है, तो क्रॉस-ऐक्सिस कॉलम के साथ चलता है.
क्रॉस ऐक्सिस पर दो काम किए जा सकते हैं.
आइटम को अलग-अलग या एक ग्रुप के तौर पर एक से दूसरी जगह ले जाया जा सकता है, ताकि वे एक-दूसरे और फ़्लेक्स कंटेनर के साथ अलाइन हो सकें. साथ ही, अगर आपने फ़्लेक्स लाइनें रैप की हैं,
आप उन लाइनों को एक ग्रुप के तौर पर इस्तेमाल करके, यह कंट्रोल कर सकते हैं कि उन लाइनों में स्पेस कैसे असाइन किया जाए.
इस गाइड में आप जानेंगे कि यह सब व्यावहारिक तौर पर कैसे काम करता है,
अभी ध्यान रखें कि मुख्य ऐक्सिस, आपके flex-direction
के बाद आता है.
फ़्लेक्स कंटेनर बनाना
चलिए, देखते हैं कि अलग-अलग साइज़ के आइटम का एक ग्रुप लेकर, फ़्लेक्सबॉक्स कैसे काम करता है उन्हें बाहर निकाल दिया जाता है.
<div class="container" id="container">
<div>One</div>
<div>Item two</div>
<div>The item we will refer to as three</div>
</div>
फ़्लेक्सबॉक्स का इस्तेमाल करने के लिए, आपको एलान करना होगा कि आपको फ़्लेक्स फ़ॉर्मैटिंग कॉन्टेक्स्ट का इस्तेमाल करना है, न कि सामान्य फ़ॉर्मैट का
ब्लॉक और इनलाइन लेआउट.
ऐसा करने के लिए, display
प्रॉपर्टी की वैल्यू को flex
पर सेट करें.
.container {
display: flex;
}
जैसे-जैसे आपने लेआउट गाइड में सीखा है, तब आपको ब्लॉक-लेवल वाला बॉक्स दिखेगा. फ़्लेक्स आइटम चिल्ड्रेन के साथ. फ़्लेक्सिबल आइटम की शुरुआती वैल्यू का इस्तेमाल करके, वे तुरंत कुछ फ़्लेक्सबॉक्स व्यवहार दिखाना शुरू कर देते हैं.
शुरुआती वैल्यू का मतलब है कि:
- आइटम, एक पंक्ति के तौर पर दिखते हैं.
- ये रैप नहीं होते.
- ये कंटेनर भरने के लिए नहीं बड़े होते.
- ये कंटेनर की शुरुआत में एक लाइन में दिखते हैं.
आइटम की दिशा कंट्रोल करना
भले ही, आपने अब तक flex-direction
प्रॉपर्टी नहीं जोड़ी हो,
आइटम एक पंक्ति के रूप में दिखाई देते हैं, क्योंकि flex-direction
का शुरुआती मान row
है.
अगर आपको लाइन की ज़रूरत है, तो आपको प्रॉपर्टी जोड़ने की ज़रूरत नहीं है.
दिशा बदलने के लिए, प्रॉपर्टी और चार में से कोई एक वैल्यू जोड़ें:
row
: आइटम एक पंक्ति में दिखते हैं.row-reverse:
आइटम, फ़्लेक्स कंटेनर के आखिर से एक लाइन के तौर पर दिखते हैं.column
: आइटम कॉलम के तौर पर दिखते हैं.column-reverse
: आइटम, फ़्लेक्स कंटेनर के आखिर से कॉलम के तौर पर लेआउट होते हैं.
नीचे दिए गए डेमो में, आइटम के हमारे ग्रुप का इस्तेमाल करके सभी वैल्यू को आज़माया जा सकता है.
आइटम और सुलभता के फ़्लो को पहले जैसा करना
विज़ुअल डिसप्ले का क्रम बदलने वाली किसी भी प्रॉपर्टी का इस्तेमाल करते समय आपको सावधान रहना चाहिए
HTML दस्तावेज़ में चीज़ों को कैसे ऑर्डर किया जाता है,
क्योंकि इससे सुलभता पर बुरा असर पड़ सकता है.
row-reverse
और column-reverse
वैल्यू इसका अच्छा उदाहरण हैं.
क्रम में बदलाव सिर्फ़ विज़ुअल ऑर्डर के लिए होता है, लॉजिकल ऑर्डर के लिए नहीं.
यह समझना ज़रूरी है, क्योंकि लॉजिकल ऑर्डर वह क्रम होता है जिसमें स्क्रीन रीडर कॉन्टेंट को पढ़कर सुनाएगा और कीबोर्ड का इस्तेमाल करके नेविगेट करने वाला कोई भी व्यक्ति उसी क्रम का पालन करेगा.
आप नीचे दिए गए वीडियो में देख सकते हैं कि कैसे उलटे पंक्ति लेआउट में, जब कीबोर्ड नेविगेशन, विज़ुअल के बजाय डीओएम को फ़ॉलो करता है, तो लिंक के बीच टैब करना डिसकनेक्ट हो जाता है डिसप्ले.
फ़्लेक्सबॉक्स या ग्रिड में आइटम का क्रम बदलने वाली किसी भी वजह से यह समस्या हो सकती है. इसलिए, किसी भी क्रम में लगाने के प्रोसेस में पूरी तरह से जांच करना चाहिए, ताकि यह पता चल सके कि इससे आपकी साइट कुछ लोगों के लिए इसका इस्तेमाल करना मुश्किल होता है.
ज़्यादा जानकारी के लिए, यह देखें:
लिखने के मोड और दिशा
फ़्लेक्स आइटम, डिफ़ॉल्ट रूप से लाइन के तौर पर लेआउट होते हैं. जिस दिशा में वाक्य आपके राइटिंग मोड और स्क्रिप्ट में बदलते हैं, लाइन उसी दिशा में चलती है. इसका मतलब है कि अगर आपने ऐप्लिकेशन को ऐरेबिक में सेट किया है, तो आइटम दाईं ओर लाइन अप हो जाएंगे. ऐरेबिक में, स्क्रिप्ट की दिशा राइट-टू-लेफ़्ट (आरटीएल) होती है. टैब ऑर्डर भी दाईं ओर से शुरू होगा, क्योंकि अरबी में वाक्यों को इसी तरह पढ़ा जाता है.
अगर वर्टिकल राइटिंग मोड का इस्तेमाल किया जा रहा है,
जैसे कि कुछ जैपनीज़ टाइपफ़ेस में, स्क्रीन पर लाइन ऊपर से नीचे की ओर वर्टिकल तौर पर चलेगी.
इस डेमो में, वर्टिकल राइटिंग मोड का इस्तेमाल करके लिखे गए flex-direction
को बदलने की कोशिश करें.
इसलिए, फ़्लेक्स आइटम का डिफ़ॉल्ट तौर पर काम करने का तरीका, दस्तावेज़ के लिखने के मोड से जुड़ा होता है. ज़्यादातर ट्यूटोरियल, अंग्रेज़ी या किसी दूसरे हॉरिज़ॉन्टल फ़ॉर्मैट में लिखे जाते हैं. बाएं से दाएं लिखने वाला मोड चालू करें. इससे यह अनुमान लगाना आसान हो जाता है कि फ़्लेक्स आइटम बाईं ओर लाइन अप होते हैं और हॉरिज़ॉन्टल तरीके से चलते हैं.
मुख्य और क्रॉस ऐक्सिस के साथ-साथ, लिखने के मोड को ध्यान में रखते हुए, यह समझना आसान हो सकता है कि हम फ़्लेक्सबॉक्स में ऊपर, नीचे, बाईं, और दाईं के बजाय, शुरू और खत्म के बारे में बात करते हैं. हर अक्ष की शुरुआत और आखिर होती है. मुख्य अक्ष की शुरुआत को main-start कहा जाता है. इसलिए, शुरुआत में हमारे फ़्लेक्सिबल आइटम, मुख्य शुरुआत से लाइन अप होते हैं. उस ऐक्सिस का आखिरी हिस्सा main-end होता है. क्रॉस-ऐक्सिस का शुरुआती हिस्सा क्रॉस-स्टार्ट और आखिरी क्रॉस-एंड होता है.
फ़्लेक्स आइटम को रैप करना
flex-wrap
प्रॉपर्टी की शुरुआती वैल्यू nowrap
है.
इसका मतलब है कि अगर कंटेनर में ज़रूरत के मुताबिक जगह नहीं है, तो आइटम ओवरफ़्लो हो जाएंगे.
शुरुआती वैल्यू का इस्तेमाल करके दिखाए जा रहे आइटम, min-content
साइज़ तक छोटे हो जाएंगे. ऐसा तब होगा, जब ओवरफ़्लो होने से पहले आइटम का साइज़ छोटा हो जाएगा.
आइटम को रैप करने के लिए, फ़्लेक्स कंटेनर में flex-wrap: wrap
जोड़ें.
.container {
display: flex;
flex-wrap: wrap;
}
जब कोई फ़्लेक्स कंटेनर रैप करता है, तो यह कई फ़्लेक्स लाइन बनाता है. जगह के डिस्ट्रिब्यूशन के हिसाब से, हर लाइन एक नए फ़्लेक्स कंटेनर की तरह काम करती है. इसलिए, अगर पंक्तियों को रैप किया जा रहा है, तो पंक्ति 2 में मौजूद किसी चीज़ को पंक्ति 1 में मौजूद किसी चीज़ के साथ अलाइन नहीं किया जा सकता. फ़्लेक्सबॉक्स के एक डाइमेंशनल होने का यही मतलब है. अलाइनमेंट को एक अक्ष, पंक्ति या कॉलम में कंट्रोल किया जा सकता है, न कि दोनों को एक साथ, जैसा कि ग्रिड में किया जा सकता है.
फ़्लेक्स-फ़्लो शॉर्टहैंड
शॉर्टहैंड flex-flow
का इस्तेमाल करके, flex-direction
और flex-wrap
प्रॉपर्टी सेट की जा सकती हैं.
उदाहरण के लिए, flex-direction
को column
पर सेट करने और आइटम को रैप करने की अनुमति देने के लिए:
.container {
display: flex;
flex-flow: column wrap;
}
फ़्लेक्स आइटम में स्पेस को कंट्रोल करना
मान लें कि हमारे कंटेनर में आइटम दिखाने के लिए ज़रूरत से ज़्यादा जगह है, तो आइटम शुरू में लाइन में लग जाते हैं और जगह भरने के लिए बड़े नहीं होते.
कॉन्टेंट का साइज़ तय सीमा से ज़्यादा होने पर, वे बढ़ने बंद हो जाते हैं.
ऐसा इसलिए है, क्योंकि flex-
प्रॉपर्टी की शुरुआती वैल्यू यह है:
flex-grow: 0
: आइटम नहीं उगते.flex-shrink: 1
: आइटम अपनेflex-basis
से छोटे हो सकते हैं.flex-basis: auto
: आइटम का मूल आकारauto
है.
इसे flex: initial
कीवर्ड वैल्यू से दिखाया जा सकता है.
flex
शॉर्टहैंड प्रॉपर्टी या flex-grow
, flex-shrink
, और flex-basis
के लॉन्गहैंड, फ़्लेक्स कंटेनर के चाइल्ड पर लागू होते हैं.
आइटम को बढ़ाने के लिए,
साथ ही, बड़े आइटम में छोटे आइटम के लिए ज़्यादा जगह होने की वजह से flex:auto
का इस्तेमाल होता है.
ऊपर दिए गए डेमो का इस्तेमाल करके, इसे आज़माया जा सकता है.
इससे प्रॉपर्टी इन पर सेट हो जाती हैं:
flex-grow: 1
: आइटम, अपनेflex-basis
से बड़े हो सकते हैं.flex-shrink: 1
: आइटम,flex-basis
से छोटे हो सकते हैं.flex-basis: auto
: आइटम का बेस साइज़auto
है.
flex: auto
का इस्तेमाल करने पर, आइटम अलग-अलग साइज़ में दिखेंगे. ऐसा इसलिए होता है, क्योंकि आइटम के बीच शेयर की जाने वाली जगह, हर आइटम को मैक्स-कॉन्टेंट साइज़ के तौर पर लेआउट करने के बाद शेयर की जाती है.
इसलिए, बड़े आइटम के लिए ज़्यादा जगह मिलेगी.
सभी आइटम का साइज़ एक जैसा रखने के लिए, डेमो में कॉन्टेंट के साइज़ में हुए बदलाव को flex:auto
से flex: 1
पर अनदेखा करें.
इसे अनपैक करने पर यह दिखता है:
flex-grow: 1
: आइटम की पहुंच उनकेflex-basis
से ज़्यादा हो सकती है.flex-shrink: 1
: आइटम,flex-basis
से छोटे हो सकते हैं.flex-basis: 0
: आइटम का बेस साइज़0
है.
flex: 1
का इस्तेमाल करने से पता चलता है कि सभी आइटम का साइज़ शून्य है. इसलिए, फ़्लेक्स कंटेनर का सारा स्पेस बांटा जा सकता है.
सभी आइटम का flex-grow
फ़ैक्टर 1
होता है. इसलिए, सभी आइटम का साइज़ बराबर बढ़ता है और स्पेस को बराबर बांटा जाता है.
आइटम की संख्या में अलग-अलग दर से बढ़ोतरी की जा सकती है
आपको सभी आइटम के लिए flex-grow
का 1
फ़ैक्टर नहीं देना होगा.
अपने फ़्लेक्सिबल आइटम के लिए, अलग-अलग flex-grow
फ़ैक्टर सेट किए जा सकते हैं.
नीचे दिए गए डेमो में, पहले आइटम में flex: 1
, दूसरे में flex: 2
, और तीसरे में flex: 3
है.
जैसे-जैसे ये आइटम 0
से बढ़ते जाएंगे, फ़्लेक्स कंटेनर में मौजूद खाली जगह को छह में शेयर कर दिया जाएगा.
पहले आइटम को एक हिस्सा,
दूसरे आइटम को दो हिस्से, और
तीसरे आइटम को तीन हिस्से दिए जाते हैं.
auto
के flex-basis
से भी यही काम किया जा सकता है. हालांकि, इसके लिए आपको तीन वैल्यू बतानी होंगी.
पहली वैल्यू flex-grow
,
दूसरी flex-shrink
, और तीसरी flex-basis
है.
.item1 {
flex: 1 1 auto;
}
.item2 {
flex: 2 1 auto;
}
यह इस्तेमाल का कम सामान्य उदाहरण है, क्योंकि auto
के flex-basis
का इस्तेमाल करने की वजह यह है कि ब्राउज़र को स्पेस के बंटवारे का पता चल सके.
अगर आपको किसी आइटम की परफ़ॉर्मेंस को एल्गोरिदम के तय किए गए लेवल से थोड़ा ज़्यादा बढ़ाना है, तो यह सुविधा आपके लिए मददगार हो सकती है.
सुविधाजनक आइटम को फिर से क्रम में लगाना
order
प्रॉपर्टी का इस्तेमाल करके, अपने फ़्लेक्स कंटेनर में मौजूद आइटम का क्रम बदला जा सकता है.
इस प्रॉपर्टी की मदद से, आइटम को क्रम के हिसाब से ग्रुप में क्रम से लगाया जा सकता है.
आइटम, flex-direction
के निर्देशों के मुताबिक, सबसे कम वैल्यू पहले के क्रम में दिखाए जाते हैं.
अगर एक से ज़्यादा आइटम की वैल्यू एक जैसी है, तो उन्हें उस वैल्यू वाले अन्य आइटम के साथ दिखाया जाएगा.
नीचे दिया उदाहरण यह क्रम दिखाता है.
देखें कि आपको क्या समझ आया
फ़्लेक्सबॉक्स के बारे में अपनी जानकारी की जांच करें
डिफ़ॉल्ट flex-direction
row
column
डिफ़ॉल्ट रूप से, फ़्लेक्स कंटेनर में चाइल्ड शामिल होते हैं.
फ़्लेक्स चाइल्ड आइटम छोटा दिखता है. इस समस्या को कम करने में कौनसी फ़्लेक्स प्रॉपर्टी मदद करती है?
flex-shrink
flex-basis
flex-grow
Flexbox अलाइनमेंट की खास जानकारी
Flexbox के साथ इसमें कई प्रॉपर्टी जुड़ी हुई हैं, जो आइटम को अलाइन करने और उनके बीच स्पेस को बांटने के लिए काम करती हैं. ये प्रॉपर्टी इतनी काम की थीं कि उन्हें अपनी खास जानकारी में ले जाया गया है. आपको ये ग्रिड लेआउट में भी दिखेंगी. यहां यह जाना जा सकता है कि फ़्लेक्सबॉक्स का इस्तेमाल करने पर वे कैसे काम करते हैं.
प्रॉपर्टी के सेट को दो ग्रुप में रखा जा सकता है. स्पेस डिस्ट्रिब्यूशन के लिए प्रॉपर्टी और अलाइनमेंट के लिए प्रॉपर्टी. स्पेस डिस्ट्रिब्यूट करने वाली प्रॉपर्टी:
justify-content
: मुख्य ऐक्सिस पर स्पेस का डिस्ट्रिब्यूशन.align-content
: क्रॉस ऐक्सिस पर स्पेस का डिस्ट्रिब्यूशन.place-content
: ऊपर दी गई दोनों प्रॉपर्टी को सेट करने के लिए शॉर्टहैंड.
Flexbox में अलाइनमेंट के लिए इस्तेमाल की जाने वाली प्रॉपर्टी:
align-self
: क्रॉस ऐक्सिस पर एक आइटम को अलाइन करता है.align-items
: सभी आइटम को क्रॉस ऐक्सिस पर ग्रुप के तौर पर अलाइन करता है.
अगर मुख्य ऐक्सिस पर काम किया जा रहा है, तो प्रॉपर्टी justify-
से शुरू होती हैं.
क्रॉस ऐक्सिस पर, ये align-
से शुरू होते हैं.
मुख्य ऐक्सिस पर स्पेस डिस्ट्रिब्यूट किया जा रहा है
पहले इस्तेमाल किए गए एचटीएमएल में, फ़्लेक्स आइटम को पंक्ति के तौर पर दिखाया गया है. इसमें मुख्य ऐक्सिस पर जगह है.
आइटम इतने बड़े नहीं हैं कि वे फ़्लेक्स कंटेनर को पूरी तरह से भर सकें.
आइटम, फ़्लेक्स कंटेनर की शुरुआत में लाइन अप होते हैं, क्योंकि justify-content
की शुरुआती वैल्यू flex-start
है.
आइटम शुरुआत में लाइन में होते हैं और आखिर में अतिरिक्त स्पेस होता है.
फ़्लेक्स कंटेनर में justify-content
प्रॉपर्टी जोड़ें,
इसकी वैल्यू flex-end
है,
और आइटम कंटेनर के आखिर में लाइन अप हो जाते हैं और खाली जगह को कंटेनर के शुरुआत में रखा जाता है.
.container {
display: flex;
justify-content: flex-end;
}
justify-content: space-between
की मदद से, आइटम के बीच स्पेस भी बांटा जा सकता है.
डेमो में दी गई कुछ वैल्यू आज़माएं, और इसके पूरे सेट के लिए MDN देखें संभावित वैल्यू.
flex-direction: column
के साथ
अगर आपने flex-direction
को column
में बदल दिया है, तो कॉलम पर justify-content
काम करेगा.
कॉलम के रूप में काम करते समय अपने कंटेनर में खाली जगह बनाए रखने के लिए, आपको अपने कंटेनर को
height
या block-size
.
ऐसा न करने पर, आपके पास वीडियो बांटने के लिए जगह नहीं होगी.
इस बार फ़्लेक्सबॉक्स कॉलम लेआउट के साथ, अलग-अलग वैल्यू आज़माएं.
फ़्लेक्स लाइनों के बीच स्पेस देना
रैप किए गए फ़्लेक्स कंटेनर की मदद से, आपके पास क्रॉस ऐक्सिस पर डिस्ट्रिब्यूशन के लिए जगह हो सकती है.
इस मामले में, justify-content
की वैल्यू के साथ align-content
प्रॉपर्टी का इस्तेमाल किया जा सकता है.
justify-content
की डिफ़ॉल्ट वैल्यू flex-start
होती है, जबकि align-content
की शुरुआती वैल्यू stretch
होती है.
उस डिफ़ॉल्ट व्यवहार को बदलने के लिए, फ़्लेक्स कंटेनर में align-content
प्रॉपर्टी जोड़ें.
.container {
align-content: center;
}
इसे डेमो में आज़माएं.
उदाहरण में, फ़्लेक्स आइटम की रैप की गई लाइनें हैं. साथ ही, कंटेनर में block-size
है, ताकि हमारे पास कुछ खाली जगह हो.
place-content
शॉर्टहैंड
justify-content
और align-content
, दोनों को सेट करने के लिए, place-content
का इस्तेमाल एक आईपी पते के साथ किया जा सकता है
या दो वैल्यू होनी चाहिए.
अगर आपने पहली वैल्यू को align-content
और दूसरी वैल्यू को justify-content
के लिए इस्तेमाल करने के लिए कहा है, तो दोनों अक्षों के लिए एक ही वैल्यू का इस्तेमाल किया जाएगा.
.container {
place-content: space-between;
/* sets both to space-between */
}
.container {
place-content: center flex-end;
/* wrapped lines on the cross axis are centered,
on the main axis items are aligned to the end of the flex container */
}
आइटम को क्रॉस-ऐक्सिस पर अलाइन करना
क्रॉस ऐक्सिस पर, align-items
का इस्तेमाल करके अपने आइटम को फ़्लेक्स लाइन के अंदर भी अलाइन किया जा सकता है
और align-self
.
इस अलाइनमेंट के लिए उपलब्ध जगह, आइटम के रैप किए गए सेट के मामले में, फ़्लेक्स कंटेनर की ऊंचाई या फ़्लेक्स लाइन पर निर्भर करेगी.
align-self
की शुरुआती वैल्यू stretch
है.
यही वजह है कि पंक्ति में फ़्लेक्सिबल आइटम, डिफ़ॉल्ट रूप से सबसे ऊंचे आइटम की ऊंचाई तक जुड़ते हैं.
इसे बदलने के लिए, अपने किसी भी फ़्लेक्स आइटम में align-self
प्रॉपर्टी जोड़ें.
.container {
display: flex;
}
.item1 {
align-self: flex-start;
}
आइटम को अलाइन करने के लिए, इनमें से किसी भी वैल्यू का इस्तेमाल करें:
flex-start
flex-end
center
stretch
baseline
एमडीएन पर वैल्यू की पूरी सूची देखें.
अगले डेमो में, flex-direction: row
के साथ फ़्लेक्स आइटम की एक लाइन है.
आखिरी आइटम, फ़्लेक्स कंटेनर की ऊंचाई तय करता है.
पहले आइटम में align-self
प्रॉपर्टी है, जिसकी वैल्यू flex-start
है.
उस प्रॉपर्टी की वैल्यू बदलकर देखें कि वह क्रॉस ऐक्सिस पर उसके स्पेस में कैसे मूव करती है.
align-self
प्रॉपर्टी, अलग-अलग आइटम पर लागू होती है.
align-items
प्रॉपर्टी को फ़्लेक्स कंटेनर पर लागू किया जा सकता है
सभी अलग-अलग align-self
प्रॉपर्टी को एक ग्रुप के तौर पर सेट करने के लिए.
.container {
display: flex;
align-items: flex-start;
}
इस अगले डेमो में, क्रॉस ऐक्सिस पर सभी आइटम को एक ग्रुप के तौर पर अलाइन करने के लिए, align-items
की वैल्यू बदलने की कोशिश करें.
फ़्लेक्सबॉक्स में justify-self एट्रिब्यूट क्यों नहीं है?
Flex आइटम, मुख्य ऐक्सिस पर ग्रुप के तौर पर काम करते हैं. इसलिए, किसी ग्रुप के अलग-अलग आइटम को अलग-अलग करने की कोई सुविधा नहीं है.
ग्रिड लेआउट में justify-self
और justify-items
प्रॉपर्टी, इनलाइन ऐक्सिस पर काम करती हैं
ताकि ग्रिड एरिया में आइटम को अलाइन किया जा सके.
फ़्लेक्सिबल लेआउट में आइटम को एक ग्रुप के तौर पर ट्रीट करने के तरीके की वजह से,
ये प्रॉपर्टी फ़्लेक्सिबल कॉन्टेक्स्ट में लागू नहीं की जाती हैं.
यह जानना ज़रूरी है कि फ़्लेक्सबॉक्स, अपने-आप मार्जिन तय करने की सुविधा के साथ बहुत अच्छा काम करता है.
अगर आपको ग्रुप से कोई एक आइटम अलग करने की ज़रूरत पड़ती है,
या ग्रुप को दो ग्रुप में बांटने के लिए, मार्जिन का इस्तेमाल किया जा सकता है.
नीचे दिए गए उदाहरण में, आखिरी आइटम के बायां मार्जिन auto
है.
ऑटो मार्जिन, लागू होने वाली दिशा में पूरे स्पेस का इस्तेमाल करता है.
इसका मतलब है कि यह आइटम को दाईं ओर पुश करता है, जिससे ग्रुप बंट जाते हैं.
किसी आइटम को वर्टिकल और हॉरिज़ॉन्टल तौर पर बीच में कैसे लाएं
अलाइनमेंट प्रॉपर्टी का इस्तेमाल करके, किसी आइटम को दूसरे बॉक्स के बीच में रखा जा सकता है.
justify-content
प्रॉपर्टी, आइटम को मुख्य ऐक्सिस पर अलाइन करती है,
जो पंक्ति है. क्रॉस ऐक्सिस पर align-items
प्रॉपर्टी.
.container {
width: 400px;
height: 300px;
display: flex;
justify-content: center;
align-items: center;
}
देखें कि आपको कितना समझ आया है
फ़्लेक्सबॉक्स के बारे में अपनी जानकारी की जांच करें
.container {
display: flex;
direction: ltr;
}
फ़्लेक्सबॉक्स के साथ वर्टिकल अलाइन करने के लिए,
.container {
display: flex;
direction: ltr;
}
फ़्लेक्सबॉक्स के साथ हॉरिज़ॉन्टल तौर पर अलाइन करने के लिए,
.container {
display: flex;
direction: ltr;
}
डिफ़ॉल्ट रूप से, फ़्लेक्स आइटम stretch
के साथ अलाइन होते हैं. अगर आपको कॉन्टेंट चाहिए
बच्चों के आइटम के लिए इस्तेमाल किया जाने वाला साइज़ है, तो आप इनमें से किस शैली का इस्तेमाल करेंगे?
align-content: start
height: auto
align-items: flex-start
justify-content: flex-start
संसाधन
- MDN CSS फ़्लेक्सिबल बॉक्स लेआउट में, उदाहरणों के साथ ज़्यादा जानकारी वाली गाइड की सीरीज़ शामिल है.
- फ़्लेक्सबॉक्स के लिए सीएसएस की ट्रिक गाइड
- फ़्लेक्सबॉक्स फ़्लेक्स कंटेनर बनाने पर क्या होता है
- फ़्लेक्सबॉक्स में अलाइनमेंट के बारे में आपको जो कुछ भी जानना चाहिए
- फ़्लेक्सिबल बॉक्स कितना बड़ा है?
- फ़्लेक्सबॉक्स के इस्तेमाल के उदाहरण
- Chrome DevTools में सीएसएस फ़्लेक्सबॉक्स लेआउट की जांच करना और उन्हें डीबग करना