flexbox
एक गतिशील चिनाई लेआउट flexbox के साथ संभव नहीं है, कम से कम एक साफ और कुशल तरीके से नहीं।
फ्लेक्सबॉक्स एक आयामी लेआउट प्रणाली है। इसका मतलब यह है कि यह क्षैतिज या ऊर्ध्वाधर रेखाओं के साथ आइटम संरेखित कर सकता है। एक फ्लेक्स आइटम अपनी पंक्ति या स्तंभ तक ही सीमित है।
एक सच्ची ग्रिड प्रणाली द्वि-आयामी है, जिसका अर्थ है कि यह क्षैतिज और ऊर्ध्वाधर रेखाओं के साथ वस्तुओं को संरेखित कर सकती है। सामग्री आइटम पंक्तियों और स्तंभों पर एक साथ फैल सकते हैं, जो कि फ्लेक्स आइटम नहीं कर सकते हैं।
यही कारण है कि फ्लेक्सबॉक्स में ग्रिड के निर्माण की सीमित क्षमता होती है। यह भी एक कारण है कि W3C ने एक और CSS3 तकनीक, ग्रिड लेआउट विकसित किया है ।
row wrap
के साथ एक फ्लेक्स कंटेनर में flex-flow: row wrap
, फ्लेक्स आइटम को नई पंक्तियों में लपेटना चाहिए ।
इसका मतलब यह है कि एक फ्लेक्स आइटम एक ही पंक्ति में किसी अन्य आइटम के नीचे लपेट नहीं सकता है ।
ऊपर दी गई सूचना कि कैसे # 3 div # 1 के नीचे लपेटता है , एक नई पंक्ति बनाता है। यह div # 2 के नीचे नहीं लपेट सकता ।
नतीजतन, जब आइटम पंक्ति में सबसे ऊंचे नहीं होते हैं, तो सफेद जगह बनी रहती है, जिससे भद्दे अंतराल बनते हैं।
column wrap
यदि आप स्विच करते हैं flex-flow: column wrap
, तो ग्रिड जैसा लेआउट अधिक प्राप्य है। हालाँकि, एक स्तंभ-दिशा वाले कंटेनर में बल्ले से चार संभावित समस्याएं हैं:
- फ्लेक्स आइटम क्षैतिज रूप से बहते हैं, क्षैतिज रूप से नहीं (जैसे आपको इस मामले में ज़रूरत है)।
- कंटेनर क्षैतिज रूप से फैलता है, लंबवत नहीं (जैसे Pinterest लेआउट)।
- कंटेनर को एक निश्चित ऊंचाई की आवश्यकता होती है, इसलिए आइटम जानते हैं कि कहां लपेटना है।
- इस लेखन के रूप में, सभी प्रमुख ब्राउज़रों में इसकी कमी है जहां अतिरिक्त कॉलम को समायोजित करने के लिए कंटेनर का विस्तार नहीं होता है ।
नतीजतन, एक स्तंभ-दिशा कंटेनर इस मामले में, और कई अन्य मामलों में एक विकल्प नहीं है।
सीएसएस ग्रिड मद आयाम के साथ अपरिभाषित
ग्रिड लेआउट आपकी समस्या का एक सही समाधान होगा यदि सामग्री वस्तुओं की विभिन्न ऊंचाइयों को पूर्व-निर्धारित किया जा सकता है । ग्रिड की क्षमता के भीतर अन्य सभी आवश्यकताएं अच्छी तरह से हैं।
ग्रिड आइटम की चौड़ाई और ऊंचाई आसपास की वस्तुओं के साथ अंतराल को बंद करने के लिए जानी जानी चाहिए।
तो ग्रिड, जो कि सबसे अच्छी सीएसएस है, को क्षैतिज रूप से बहने वाली चिनाई लेआउट के निर्माण के लिए पेश करना पड़ता है, इस मामले में कम पड़ता है।
वास्तव में, जब तक सीएसएस तकनीक अंतराल को स्वचालित रूप से बंद करने की क्षमता के साथ आती है, तब तक सामान्य रूप से सीएसएस का कोई समाधान नहीं होता है। कुछ इस तरह से शायद दस्तावेज़ को फिर से भरने की आवश्यकता होगी, इसलिए मुझे यकीन नहीं है कि यह कितना उपयोगी या कुशल होगा।
आपको एक स्क्रिप्ट की आवश्यकता होगी।
जावास्क्रिप्ट समाधान निरपेक्ष स्थिति का उपयोग करते हैं, जो बिना किसी अंतराल के उन्हें फिर से व्यवस्थित करने के लिए दस्तावेज़ प्रवाह से सामग्री आइटम निकालता है। यहाँ दो उदाहरण हैं:
सीएसएस ग्रिड परिभाषित आइटम आयामों के साथ
लेआउट के लिए जहां सामग्री की चौड़ाई और ऊंचाई ज्ञात है, यहां शुद्ध सीएसएस में क्षैतिज रूप से बहने वाली चिनाई लेआउट है:
grid-container {
display: grid; /* 1 */
grid-auto-rows: 50px; /* 2 */
grid-gap: 10px; /* 3 */
grid-template-columns: repeat(auto-fill, minmax(30%, 1fr)); /* 4 */
}
[short] {
grid-row: span 1; /* 5 */
background-color: green;
}
[tall] {
grid-row: span 2;
background-color: crimson;
}
[taller] {
grid-row: span 3;
background-color: blue;
}
[tallest] {
grid-row: span 4;
background-color: gray;
}
grid-item {
display: flex;
align-items: center;
justify-content: center;
font-size: 1.3em;
font-weight: bold;
color: white;
}
<grid-container>
<grid-item short>01</grid-item>
<grid-item short>02</grid-item>
<grid-item tall>03</grid-item>
<grid-item tall>04</grid-item>
<grid-item short>05</grid-item>
<grid-item taller>06</grid-item>
<grid-item short>07</grid-item>
<grid-item tallest>08</grid-item>
<grid-item tall>09</grid-item>
<grid-item short>10</grid-item>
<grid-item tallest>etc.</grid-item>
<grid-item tall></grid-item>
<grid-item taller></grid-item>
<grid-item short></grid-item>
<grid-item short></grid-item>
<grid-item short></grid-item>
<grid-item short></grid-item>
<grid-item tall></grid-item>
<grid-item short></grid-item>
<grid-item taller></grid-item>
<grid-item short></grid-item>
<grid-item tall></grid-item>
<grid-item short></grid-item>
<grid-item tall></grid-item>
<grid-item short></grid-item>
<grid-item short></grid-item>
<grid-item tallest></grid-item>
<grid-item taller></grid-item>
<grid-item short></grid-item>
<grid-item tallest></grid-item>
<grid-item tall></grid-item>
<grid-item short></grid-item>
</grid-container>
यह काम किस प्रकार करता है
- एक ब्लॉक-स्तरीय ग्रिड कंटेनर स्थापित करें। (
inline-grid
अन्य विकल्प होगा)
grid-auto-rows
संपत्ति स्वतः उत्पन्न पंक्तियों की ऊंचाई निर्धारित करता है। इस ग्रिड में प्रत्येक पंक्ति 50px लंबी है।
grid-gap
संपत्ति के लिए एक आशुलिपि है grid-column-gap
और grid-row-gap
। यह नियम ग्रिड आइटम के बीच 10px का अंतर निर्धारित करता है । (यह आइटम और कंटेनर के बीच के क्षेत्र पर लागू नहीं होता है।)
grid-template-columns
संपत्ति स्पष्ट रूप से परिभाषित स्तंभों की चौड़ाई निर्धारित करता है।
repeat
अंकन दोहरा कॉलम (या पंक्तियाँ) के एक पैटर्न को परिभाषित करता है।
auto-fill
समारोह ग्रिड बताता कंटेनर बह निकला बिना के रूप में कई कॉलम (या पंक्तियाँ) संभव के रूप में पंक्तिबद्ध करने के लिए। (यह फ्लेक्स लेआउट के समान व्यवहार बना सकता है flex-wrap: wrap
।)
minmax()
समारोह प्रत्येक स्तंभ (या पंक्ति) के लिए एक न्यूनतम और अधिकतम आकार सीमा निर्धारित करता है। ऊपर दिए गए कोड में, प्रत्येक कॉलम की चौड़ाई कंटेनर का न्यूनतम 30% होगी और जो भी खाली स्थान उपलब्ध है, उसमें से अधिकतम।
fr
इकाई ग्रिड कंटेनर में मुक्त अंतरिक्ष के एक अंश का प्रतिनिधित्व करता है। यह Flexbox की flex-grow
संपत्ति के बराबर है ।
के साथ grid-row
और span
हम ग्रिड आइटम को बता रहे हैं कि उन्हें कितनी पंक्तियों में भर जाना चाहिए।
सीएसएस ग्रिड के लिए ब्राउज़र समर्थन
- Chrome - 8 मार्च, 2017 तक पूर्ण समर्थन (संस्करण 57)
- फ़ायरफ़ॉक्स - 6 मार्च 2017 तक पूर्ण समर्थन (संस्करण 52)
- सफारी - 26 मार्च 2017 तक पूर्ण समर्थन (संस्करण 10.1)
- एज - 16 अक्टूबर 2017 तक पूर्ण समर्थन (संस्करण 16)
- IE11 - वर्तमान कल्पना के लिए कोई समर्थन नहीं; अप्रचलित संस्करण का समर्थन करता है
यहां देखें पूरी तस्वीर: http://caniuse.com/#search=grid
फ़ायरफ़ॉक्स में कूल ग्रिड ओवरले सुविधा
फ़ायरफ़ॉक्स डेव टूल्स में, जब आप ग्रिड कंटेनर का निरीक्षण करते हैं, तो सीएसएस घोषणा में एक छोटा ग्रिड आइकन होता है। क्लिक करने पर यह पृष्ठ पर आपके ग्रिड की रूपरेखा प्रदर्शित करता है।
अधिक विवरण यहां: https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Examine_grid_layouts