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

पब्लिश होने की तारीख: 28 सितंबर, 2023

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

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

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

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

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

Browser Support

  • Chrome: 117.
  • Edge: 117.
  • Firefox: 71.
  • Safari: 16.

Source

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

यहां सीएसएस 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 */
}
CSS ग्रिड 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];
}

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

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

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

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

डिवाइस के पूरे लेआउट में, अच्छी तरह से नाम वाली पंक्तियों और कॉलम का इस्तेमाल किया गया है. इन पंक्तियों और कॉलम को नेस्ट किए गए ग्रिड लेआउट में पास करने के लिए, 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 */
}

DevTools

Chrome, Edge, Firefox, और Safari में बेहतरीन सीएसएस ग्रिड डेवलपर टूल हैं. साथ ही, Chrome, Edge, और Firefox में सबग्रिड से जुड़ी मदद करने के लिए खास टूल हैं. Chrome ने अपने टूल का एलान 115 में किया था, जबकि Firefox में ये टूल एक साल या उससे ज़्यादा समय से मौजूद हैं.

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

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

संसाधन

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