Grid

आपके पास एक पृष्ठ है जिसमें शीर्ष पर एक हेडर, बाईं ओर एक साइडबार, एक मुख्य सामग्री क्षेत्र, और एक फूटर है। आप कंटेनरों के एक ढेर को नेस्ट कर सकते हैं और प्रत्येक को जगह में धकेल सकते हैं, और यह मोटे तौर पर काम करेगा जब तक कि आपको व्यवस्था बदलने की आवश्यकता न हो। CSS grid इस समस्या के लिए बनाया गया था: एक ही समय में पंक्तियों और स्तंभों में एक पृष्ठ लेआउट करना। एक बार जब आप ट्रैक के एक सेट के रूप में लेआउट का वर्णन कर सकते हैं, तो रैपर और फ्लोट्स के साथ ज्यादातर फिडलिंग गायब हो जाती है।
Grid कंटेनर
आप किसी भी element को display: grid देकर एक grid में बदल देते हैं। वह element grid कंटेनर बन जाता है, और इसके सीधे बच्चे एक grid में snap करने वाली items बन जाती हैं जिसे आप define करते हैं। अपने आप पर, display: grid ज्यादा कुछ नहीं करता है, इसलिए आप यह भी बताते हैं कि आप कितने स्तंभ और पंक्तियां चाहते हैं और प्रत्येक कितना बड़ा होना चाहिए।
आप grid-template-columns के साथ स्तंभों का वर्णन करते हैं और grid-template-rows के साथ पंक्तियों का। सूची में प्रत्येक मान एक track है, और एक track एक ही स्तंभ या पंक्ति है:
.layout {
display: grid;
grid-template-columns: 200px 1fr; /* दो स्तंभ: एक fixed, फिर बाकी */
grid-template-rows: 80px 400px; /* दो पंक्तियां: एक छोटी, फिर एक लंबी */
}display: grid जोड़ें और यह एक grid कंटेनर बन जाता है, इसके सीधे बच्चे items के रूप में अंदर बैठते हैं। फिर आप कहते हैं कि आप कितने स्तंभ और पंक्तियां चाहते हैं grid-template-columns और grid-template-rows के साथ, प्रति track एक मान। कुछ भी तब तक line up नहीं होता है जब तक आप उन tracks को define नहीं करते हैं, इसलिए यह हमेशा आपकी पहली चाल है। Flexible tracks
Fixed pixel स्तंभ ठीक हैं, लेकिन अधिकांश layouts ऐसे स्तंभ चाहते हैं जो space को evenly साझा करें और screen के साथ grow करें। यह fr unit के लिए है। एक fr का मतलब leftover space का एक share है, इसलिए 1fr के तीन स्तंभ container का एक तिहाई लेते हैं:
.gallery {
display: grid;
grid-template-columns: 1fr 1fr 1fr; /* तीन equal स्तंभ */
}1fr को तीन बार typing करना tedious है, इसलिए repeat() इसे आपके लिए लिखता है। और gap tracks के बीच space सेट करता है, इसलिए आप हर item पर margins के लिए नहीं पहुंचते हैं:
.gallery {
display: grid;
grid-template-columns: repeat(3, 1fr); /* समान तीन equal स्तंभ */
gap: 16px; /* पंक्तियों और स्तंभों के बीच space */
}fr leftover space का एक share है, इसलिए 1fr 1fr 1fr आपको तीन equal स्तंभ देता है। repeat(3, 1fr) use करें ताकि आप एक ही value को बार-बार typing न कर रहे हों, और tracks के बीच space के लिए gap। एक बार fr मेरे लिए click करने के बाद, मैंने percentages के लिए reaching करना बंद कर दिया जो कभी add up नहीं होते थे। Items रखना
Default द्वारा प्रत्येक item अगले free cell में गिरता है, एक cell per, order में। जब आप चाहते हैं कि एक item एक से अधिक cell लेता है, आप grid-column और grid-row के साथ ऐसा कहते हैं। tracks के बीच lines को 1 से शुरू करते हुए numbered किया जाता है, इसलिए grid-column: 1 / 3 का मतलब है "line 1 से शुरू करें, line 3 पर समाप्त करें", दो स्तंभ cover करते हुए:
.featured {
grid-column: 1 / 3; /* column line 1 से line 3 तक span, दो स्तंभ wide */
}यदि आप lines count नहीं करना चाहते हैं, span कहता है कि जहां item lands वहां से कितने cells को cover करना है:
.featured {
grid-column: span 2; /* दो स्तंभ cover करें, जहां यह item बैठता है वहां से शुरू होकर */
}grid-column या grid-row के साथ cells में stretch करते हैं। Line numbers 1 पर शुरू होते हैं, इसलिए grid-column: 1 / 3 दो स्तंभ cover करता है, या यदि आप count नहीं करना चाहते हैं तो span 2 use करें। यह areas को single नाम देने से पहले अधिकांश layouts बनाने के लिए पर्याप्त है। Responsive grids मीडिया क्वेरी के बिना
कार्ड की एक row एक wide screen पर तीन के पार दिखनी चाहिए, एक tablet पर दो, एक phone पर एक। आप बिना breakpoints लिखे grid alone के साथ यह कर सकते हैं। trick एक line है:
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 16px;
}इसे अंदर से बाहर पढ़ें। minmax(200px, 1fr) का मतलब है कि प्रत्येक column कम से कम 200px और अधिकतम space का एक share है। auto-fit फिर उतने columns को fit करता है जितने container के पास room है। Wide screen, अधिक columns fit; narrow screen, कम fit, और कार्ड अपने आप reflow होते हैं।
repeat(auto-fit, minmax(200px, 1fr)) कार्ड को अपने आप reflow करता है, breakpoints की कोई जरूरत नहीं। प्रत्येक column कम से कम 200px है और अधिकतम space का एक share, और auto-fit उतने को pack करता है जितने fit होते हैं। 200px को change करें और आप change करते हैं कि कितने कार्ड side by side बैठते हैं। 
