सीएसएस का सबग्रिड

सीएसएस ग्रिड एक बहुत ही बेहतरीन लेआउट इंजन है. हालांकि, पैरंट ग्रिड पर बनाई गई पंक्ति और कॉलम ट्रैक का इस्तेमाल, ग्रिड कंटेनर के छोटे बच्चों को सीधे तौर पर रखने के लिए ही किया जा सकता है. नाम वाले ग्रिड एरिया और लाइनों को तय करने वाले सभी लेखक, डायरेक्ट चाइल्ड के बजाय किसी भी दूसरे एलिमेंट पर खो जाते हैं. subgrid की मदद से, ट्रैक के साइज़, टेंप्लेट, और नामों को नेस्ट किए गए ग्रिड के साथ शेयर किया जा सकता है. इस लेख में बताया गया है कि यह सुविधा कैसे काम करती है.

सबग्रिड से पहले, कॉन्टेंट को अक्सर खास तौर पर हाथ से बनाया जाता था, ताकि इस तरह के रगड़ भरे लेआउट से बचा जा सके.

तीन कार्ड एक साथ दिखाए जाते हैं. हर कार्ड में तीन हिस्से होते हैं:
हेडर, पैराग्राफ़, और लिंक. हर टेक्स्ट की लंबाई अलग-अलग होती है. इस वजह से, कार्ड में जब वे एक-दूसरे के बगल में होते हैं, तब आपको अजीब अलाइनमेंट होते हैं.

सबग्रिड के बाद, अलग-अलग साइज़ के कॉन्टेंट को अलाइन किया जा सकता है.

तीन कार्ड एक साथ दिखाए जाते हैं. हर कार्ड में तीन हिस्से होते हैं:
हेडर, पैराग्राफ़, और लिंक. हर टेक्स्ट की लंबाई अलग-अलग होती है. हालांकि, सबग्रिड ने अलाइनमेंट को ठीक कर दिया है. ऐसा इसलिए किया गया है, क्योंकि सबग्रिड ने हर कॉन्टेंट आइटम के सबसे ऊंचे हिस्से को पंक्ति की ऊंचाई सेट करने और अलाइनमेंट से जुड़ी समस्याओं को ठीक करने की अनुमति दी है.

ब्राउज़र सहायता

  • 117
  • 117
  • 71
  • 16

सोर्स

सबग्रिड की बुनियादी बातें

यहां इस्तेमाल का एक सीधा उदाहरण दिया गया है. इसमें सीएसएस subgrid की बुनियादी बातें बताई गई हैं. एक ग्रिड को दो नाम वाले कॉलम से बनाया गया है, जिसमें पहला 20ch चौड़ा है और दूसरा "बाकी" स्पेस का 1fr है. कॉलम के नाम देना ज़रूरी नहीं है, लेकिन वे उदाहरण के तौर पर और जानकारी देने के मकसद से इस्तेमाल किए गए हैं.

.grid {
  display: grid;
  gap: 1rem;
  grid-template-columns: [column-1] 20ch [column-2] 1fr;
}

इसके बाद, उस ग्रिड का कोई चाइल्ड उन दो कॉलम में फैला हुआ होता है और ग्रिड कंटेनर के तौर पर सेट हो जाता है. साथ ही, grid-template-columns को subgrid पर सेट करके, अपने पैरंट कॉलम के कॉलम को शामिल करता है.

.grid > .subgrid {
  grid-column: span 2;

  display: grid;
  grid-template-columns: subgrid; /* 20ch 1fr */
}
सीएसएस ग्रिड DevTools का स्क्रीनशॉट, जिसमें दो कॉलम को अगल-बगल में दिखाया गया है और कॉलम की लाइन की शुरुआत में एक नाम दिया गया है.
https://codepen.io/web-dot-dev/pen/NWezjXv

बस, पैरंट ग्रिड के कॉलम को एक लेवल नीचे जाकर सब-ग्रिड बना दिया गया है. यह सबग्रिड अब इनमें से किसी भी कॉलम में चाइल्ड असाइन कर सकता है.

चुनौती! इसी डेमो को दोहराएं, लेकिन grid-template-rows के लिए ऐसा करें.

पेज लेवल का "मैक्रो" ग्रिड शेयर करें

डिज़ाइनर अक्सर शेयर किए गए ग्रिड के साथ काम करते हैं. ये पूरे डिज़ाइन पर लाइन बनाते हैं और मनमुताबिक बनाए गए किसी भी एलिमेंट को अलाइन करते हैं. अब वेब डेवलपर भी ऐसा कर सकते हैं! अब सटीक वर्कफ़्लो पूरा किया जा सकता है. साथ ही, कई और काम भी किए जा सकते हैं.

मैक्रो ग्रिड से लेकर डिज़ाइन तैयार करने तक. ग्रिड के नाम वाले एरिया, पहले से ही बना दिए जाते हैं और बाद के कॉम्पोनेंट को ज़रूरत के मुताबिक रखा जाता है.

सबसे सामान्य डिज़ाइनर ग्रिड वर्कफ़्लो को लागू करने से, subgrid की क्षमताओं, वर्कफ़्लो, और क्षमताओं के बारे में अहम जानकारी मिल सकती है.

यहां मोबाइल पेज लेआउट मैक्रो ग्रिड के Chrome DevTools से लिया गया स्क्रीनशॉट दिया गया है. लाइनों में नाम होते हैं और कॉम्पोनेंट प्लेसमेंट के लिए साफ़ तौर पर जगह दी गई होती है.

Chrome CSS ग्रिड DevTools का एक स्क्रीनशॉट, जिसमें मोबाइल साइज़ का ग्रिड लेआउट दिख रहा है. इसमें पंक्तियों और कॉलम के नाम तेज़ी से पहचानने के लिए रखे गए हैं: फ़ुल ब्लीड,
सिस्टम-स्टेटस, प्राइमरी-नेविगेशन, प्राइमरी-हेडर, मेन, फ़ुटर और सिस्टम-हाथ के जेस्चर.

नीचे दिया गया सीएसएस, डिवाइस लेआउट के लिए नाम वाली पंक्तियों और कॉलम के साथ यह ग्रिड बनाता है. हर पंक्ति और कॉलम का एक साइज़ होता है.

.device {
    display: grid;
    grid-template-rows:
      [system-status] 3.5rem
      [primary-nav] 3rem
      [primary-header] 4rem
      [main] auto
      [footer] 4rem
      [system-gestures] 2rem
    ;
    grid-template-columns: [fullbleed-start] 1rem [main-start] auto [main-end] 1rem [fullbleed-end];
}

कुछ अन्य स्टाइल से यह डिज़ाइन मिलता है.

पहले जैसा ही सीएसएस DevTools ग्रिड ओवरले था, लेकिन इस बार मोबाइल सिस्टम यूज़र इंटरफ़ेस (यूआई) मौजूद है, कुछ शैडो और थोड़ा रंग है. इससे यह देखने में मदद मिलती है कि
डिज़ाइन किस दिशा में काम कर रहा है.

इस पैरंट में, नेस्ट किए गए कई एलिमेंट मौजूद हैं. इस डिज़ाइन के लिए नेविगेशन और हेडर पंक्तियों के नीचे पूरी चौड़ाई वाला इमेज होना ज़रूरी है. सबसे बाईं और दाईं ओर के कॉलम की लाइन के नाम fullbleed-start और fullbleed-end हैं. इस तरह से ग्रिड लाइन का नाम रखने से, बच्चे हर एक को fullbleed के प्लेसमेंट शॉर्टहैंड के साथ अलाइन कर सकते हैं. यह बहुत सुविधाजनक है, जल्द ही दिखेगा.

DevTools से ग्रिड ओवरले के स्क्रीनशॉट को ज़ूम करके दिखाया गया है. इसमें खास तौर पर, फ़ुल ब्लीड-स्टार्ट और फ़ुल ब्लीड-एंड कॉलम के नामों पर फ़ोकस किया गया है.

अच्छे नाम वाली पंक्तियों और कॉलम के साथ बनाए गए पूरे डिवाइस लेआउट के साथ, सही नाम वाली पंक्तियों और कॉलम को नेस्ट किए गए ग्रिड लेआउट में भेजने के लिए, subgrid का इस्तेमाल करें. यह वह subgrid जादुई क्षण है. डिवाइस लेआउट, नाम वाली पंक्तियों और कॉलम को ऐप्लिकेशन कंटेनर में भेजता है, जो इसे अपने हर बच्चे को भेजता है.

.device > .app,
.app > * {
    display: grid;
    grid: subgrid / subgrid;

    /* same as */
    grid-template-rows: subgrid;
    grid-template-columns: subgrid;
}

सीएसएस सबग्रिड ऐसी वैल्यू है जिसे ग्रिड ट्रैक की सूची की जगह इस्तेमाल किया जाता है. एलिमेंट के पैरंट पर जिन पंक्तियों और कॉलम में फैली हैं वे अब वही पंक्तियां और कॉलम हैं जो वह ऑफ़र करता है. इससे .device ग्रिड की लाइन के नाम .app के चिल्ड्रेन के लिए उपलब्ध हो जाते हैं, न कि सिर्फ़ .app के. .app के अंदर के एलिमेंट, सबग्रिड से पहले .device के बनाए गए ग्रिड ट्रैक का रेफ़रंस नहीं दे सकते थे.

इन सभी चीज़ों के बारे में बताने के बाद, subgrid की मदद से, नेस्ट की गई इमेज लेआउट में पूरा ब्लीड कर सकती है. कोई नकारात्मक वैल्यू या तरकीब नहीं. इसके बजाय, “मेरा लेआउट fullbleed-start से fullbleed-end तक फैला हुआ है” वाला एक अच्छा वन-लाइनर है.

.app > main img {
    grid-area: fullbleed;
}
इस मैक्रो लेआउट में पूरी चौड़ाई वाली एक नेस्ट की गई इमेज मौजूद है, जो मुख्य नेव और हेडर पंक्तियों के साथ ठीक से मौजूद है. साथ ही, यह फ़ुल ब्लीड नाम वाली हर कॉलम लाइन तक फैली हुई है.
https://codepen.io/web-dot-dev/pen/WNLyjzX

वहां आपके पास, एक मैक्रो ग्रिड है, जैसे कि डिज़ाइनर इस्तेमाल करते हैं. इसे सीएसएस में लागू किया गया है. इस सिद्धांत को आपकी ज़रूरत के हिसाब से बड़े स्तर पर इस्तेमाल किया जा सकता है और आगे भी बढ़ाया जा सकता है.

देखें कि सहायता उपलब्ध है या नहीं

सीएसएस और सबग्रिड के साथ प्रोग्रेसिव बेहतर बनाने की सुविधा को समझना और आसान है. @supports का इस्तेमाल करें और ब्रैकेट में ब्राउज़र से पूछें कि क्या वह सबग्रिड को टेंप्लेट कॉलम या पंक्तियों के लिए वैल्यू के तौर पर समझता है. इस उदाहरण से पता चलता है कि grid-template-columns प्रॉपर्टी, subgrid कीवर्ड के साथ काम करती है या नहीं. अगर यह सही है, तो इसका मतलब है कि सबग्रिड का इस्तेमाल किया जा सकता है

@supports (grid-template-columns: subgrid) {
  /* safe to enhance to */
}

डेवलपर टूल

Chrome, Edge, Firefox, और Safari सभी में बेहतरीन सीएसएस ग्रिड DevTools होते हैं. साथ ही, Chrome, Edge, और Firefox में सब-ग्रिड के लिए खास टूल होते हैं. Chrome ने अपने टूल 115 में लॉन्च किए, जबकि Firefox उन्हें एक साल या उससे ज़्यादा समय से उपलब्ध करा रहा है.

एलिमेंट पैनल में एलिमेंट पर सबग्रिड बैज की स्क्रीनशॉट की झलक.

सबग्रिड बैज, ग्रिड बैज की तरह काम करता है. हालांकि, देखकर यह पता चलता है कि कौनसे ग्रिड, सबग्रिड हैं और कौनसे नहीं.

संसाधन

इस सूची में सबग्रिड लेख, डेमो, और शुरुआत करने के लिए प्रेरणा दी गई है. अगर आप अपनी सबग्रिड शिक्षा के लिए अगले चरण की तलाश कर रहे हैं, तो इन सभी बेहतरीन संसाधनों को एक्सप्लोर करने का आनंद लें!

यह इंटरऑपरेबल (दूसरे सिस्टम के साथ काम करने वाली नई) सीरीज़ का हिस्सा है