लचीला बॉक्स लेआउट
CSS फ्लेक्सिबल बॉक्स के आगमन के साथ , कई वेब डिज़ाइनर्स के बुरे सपने 1 हल हो गए हैं। सबसे अधिक हैसी में से एक, ऊर्ध्वाधर संरेखण। अब यह अज्ञात ऊंचाइयों में भी संभव है ।
"दो दशक की लेआउट हैकिंग समाप्त हो रही है। शायद कल नहीं, लेकिन जल्द ही, और हमारे जीवन के बाकी हिस्सों के लिए।"
- W3Conf 2013 में सीएसएस लीजेंडरी एरिक मेयर
फ्लेक्सिबल बॉक्स (या संक्षेप में, फ्लेक्सबॉक्स), एक नया लेआउट सिस्टम है जिसे विशेष रूप से लेआउट उद्देश्यों के लिए डिज़ाइन किया गया है। विनिर्देश राज्यों :
फ्लेक्स लेआउट ब्लॉक लेआउट के समान सतही है। इसमें कई अधिक जटिल पाठ- या दस्तावेज़-केंद्रित गुणों का अभाव है, जिनका उपयोग ब्लॉक लेआउट में किया जा सकता है, जैसे कि फ़्लोट्स और कॉलम। बदले में यह अंतरिक्ष को वितरित करने और वेबैप और जटिल वेब पेजों में अक्सर सामग्री को संरेखित करने के लिए सरल और शक्तिशाली उपकरण प्राप्त करता है।
इस मामले में यह कैसे मदद कर सकता है? अच्छा चलो देखते हैं।
लंबवत संरेखित स्तंभ
ट्विटर बूटस्ट्रैप का उपयोग करके हम .row
कुछ .col-*
एस कर रहे हैं। हम सभी को वांछित .row
2 को एक फ्लेक्स कंटेनर बॉक्स के रूप में प्रदर्शित करना है और फिर उसके सभी फ्लेक्स आइटम s (कॉलम) को align-items
संपत्ति द्वारा लंबवत संरेखित करना है ।
उदाहरण यहाँ (कृपया ध्यान से टिप्पणी पढ़ें)
<div class="container">
<div class="row vertical-align"> <!--
^-- Additional class -->
<div class="col-xs-6"> ... </div>
<div class="col-xs-6"> ... </div>
</div>
</div>
.vertical-align {
display: flex;
align-items: center;
}
उत्पादन
रंगीन क्षेत्र स्तंभों के पैडिंग-बॉक्स को प्रदर्शित करता है।
पर स्पष्ट करना align-items: center
8.3 क्रॉस-अक्ष संरेखण: align-items
संपत्ति
फ्लेक्स आइटम को फ्लेक्स कंटेनर की वर्तमान लाइन के क्रॉस अक्ष में गठबंधन किया जा सकता है , justify-content
लेकिन समान दिशा में। align-items
अनाम फ्लेक्स आइटम सहित सभी फ्लेक्स कंटेनर के आइटम के लिए डिफ़ॉल्ट संरेखण सेट करता है ।
align-items: center;
केंद्र मूल्य द्वारा, फ्लेक्स आइटम का मार्जिन बॉक्स लाइन के भीतर क्रॉस अक्ष में केंद्रित होता है ।
बड़ा अलर्ट
महत्वपूर्ण नोट # 1: ट्विटर बूटस्ट्रैप width
अतिरिक्त छोटे उपकरणों में स्तंभों को निर्दिष्ट नहीं करता है जब तक कि आप किसी एक .col-xs-#
वर्ग को कॉलम नहीं देते।
इसलिए इस विशेष डेमो में, मैंने .col-xs-*
मोबाइल मोड में स्तंभों को ठीक से प्रदर्शित करने के लिए कक्षाओं का उपयोग किया है, क्योंकि यह width
कॉलम के स्पष्ट रूप से निर्दिष्ट करता है।
लेकिन वैकल्पिक रूप से आप सकता है स्विच बंद flexbox बदलकर बस लेआउट display: flex;
के लिए display: block;
विशिष्ट स्क्रीन आकार में। उदाहरण के लिए:
/* Extra small devices (767px and down) */
@media (max-width: 767px) {
.row.vertical-align {
display: block; /* Turn off the flexible box layout */
}
}
या आप केवल विशिष्ट स्क्रीन आकारों पर ही निर्दिष्ट.vertical-align
कर सकते हैं :
/* Small devices (tablets, 768px and up) */
@media (min-width: 768px) {
.row.vertical-align {
display: flex;
align-items: center;
}
}
उस मामले में, मैं @ केविननेलसन के दृष्टिकोण के साथ जाऊँगा ।
महत्वपूर्ण नोट # 2: संक्षिप्तता के कारण वेंडर उपसर्ग छोड़े गए। फ्लेक्सबॉक्स सिंटैक्स को समय के दौरान बदल दिया गया है। नया लिखित सिंटैक्स वेब ब्राउज़र के पुराने संस्करणों पर काम नहीं करेगा (लेकिन इंटरनेट एक्सप्लोरर 9 के रूप में पुराना नहीं है! फ्लेक्सबॉक्स इंटरनेट एक्सप्लोरर 10 और बाद में समर्थित है)।
इसका मतलब है कि आपको display: -webkit-box
उत्पादन मोड में वेंडर-प्रीफ़िक्स किए गए गुणों का उपयोग करना चाहिए ।
यदि आप डेमो में "टॉगल संकलित दृश्य" पर क्लिक करते हैं , तो आपको सीएसएस घोषणाओं का पूर्वनिर्मित संस्करण ( ऑटोप्रेक्सिफ़र के लिए धन्यवाद ) दिखाई देगा।
ऊर्ध्वाधर संरेखित सामग्री के साथ पूर्ण-ऊंचाई वाले स्तंभ
जैसा कि आप पिछले डेमो में देखते हैं , कॉलम (फ्लेक्स आइटम) अब उनके कंटेनर (फ्लेक्स कंटेनर .row
मेनू) (तत्व) के रूप में अधिक नहीं हैं।
यह संपत्ति के center
लिए मूल्य का उपयोग करने के कारण है align-items
। डिफ़ॉल्ट मान stretch
इतना है कि आइटम मूल तत्व की पूरी ऊंचाई भर सकते हैं।
इसे ठीक करने के लिए, आप display: flex;
कॉलम में भी जोड़ सकते हैं :
उदाहरण यहाँ (फिर, टिप्पणियों पर ध्यान दें)
.vertical-align {
display: flex;
flex-direction: row;
}
.vertical-align > [class^="col-"],
.vertical-align > [class*=" col-"] {
display: flex;
align-items: center; /* Align the flex-items vertically */
justify-content: center; /* Optional, to align inner flex-items
horizontally within the column */
}
उत्पादन
रंगीन क्षेत्र स्तंभों के पैडिंग-बॉक्स को प्रदर्शित करता है।
अंतिम, लेकिन कम से कम , ध्यान दें कि लक्ष्य को प्राप्त करने के लिए आधुनिक दृष्टिकोण प्रदान करने के लिए, यहां डेमो और कोड स्निपेट्स आपको एक अलग विचार देने के लिए हैं। कृपया " बिग अलर्ट " अनुभाग को ध्यान में रखें यदि आप वास्तविक दुनिया की वेबसाइटों या अनुप्रयोगों में इस दृष्टिकोण का उपयोग करने जा रहे हैं।
ब्राउज़र समर्थन सहित आगे पढ़ने के लिए, ये संसाधन उपयोगी होंगे:
1. खड़ी ऊंचाई के साथ एक div के अंदर एक छवि को संरेखित करें
2. ट्विटर बूटस्ट्रैप के डिफ़ॉल्ट को बदलने के लिए नहीं एक अतिरिक्त वर्ग का उपयोग करना बेहतर है .row
।
div
, अंदर कोई पाठ नहीं, कुछ इस तरह से jsfiddle.net/corinem/Aj9H9 लेकिन इस उदाहरण में मैं बूटस्ट्रैप का उपयोग नहीं करता हूं