No history yet

आधुनिक लेआउट निर्माण

आधुनिक वेब लेआउट बनाना

वेबसाइट लेआउट बनाना शतरंज खेलने जैसा हो सकता है। आपको सभी टुकड़ों को सही जगह पर रखना होता है ताकि सब कुछ सही दिखे। पहले, डेवलपर फ्लोट्स और पोजिशनिंग जैसी तकनीकों का इस्तेमाल करते थे, जो अक्सर मुश्किल और अप्रत्याशित होती थीं। सौभाग्य से, अब हमारे पास CSS Flexbox और CSS Grid जैसे बेहतर टूल हैं। ये आधुनिक लेआउट बनाने के काम को बहुत आसान और अधिक शक्तिशाली बनाते हैं।

इस लेख में, हम इन दो शक्तिशाली प्रणालियों के बारे में जानेंगे। हम यह भी समझेंगे कि एक-आयामी लेआउट के लिए Flexbox और दो-आयामी लेआउट के लिए Grid का उपयोग कब करना है। ये सिर्फ सिद्धांत नहीं हैं; आप सीखेंगे कि एक वेबसाइट के लिए हेडर, हीरो सेक्शन, सर्विस कार्ड और फुटर जैसी वास्तविक दुनिया की संरचनाओं को कैसे डिज़ाइन किया जाए।

Flexbox: एक-आयामी जादू

Flexbox, या Flexible Box Layout, को एक कंटेनर के भीतर आइटम को एक ही पंक्ति या कॉलम में व्यवस्थित करने, संरेखित करने और वितरित करने के लिए डिज़ाइन किया गया है। इसे एक-आयामी लेआउट सिस्टम के रूप में सोचें। यह नेविगेशन बार या आइटम की सूची बनाने के लिए एकदम सही है जहाँ तत्व एक-दूसरे के बगल में या एक के नीचे एक होते हैं।

Flexbox का मुख्य विचार कंटेनर को उसके अंदर के आइटमों को फिट करने के लिए अपने आकार को बदलने (बढ़ने या सिकुड़ने) की क्षमता देना है।

Flexbox का उपयोग शुरू करने के लिए, आप एक पैरेंट कंटेनर पर display: flex; सेट करते हैं। यह तुरंत उसके सभी सीधे बच्चों को फ्लेक्स आइटम में बदल देता है। यहाँ से, आप गुणों के एक सेट का उपयोग करके उन्हें नियंत्रित कर सकते हैं।

  • flex-direction: मुख्य अक्ष को परिभाषित करता है। मान row (डिफ़ॉल्ट), column, row-reverse, या column-reverse हो सकते हैं।
  • justify-content: मुख्य अक्ष के साथ आइटम को संरेखित करता है। यह नियंत्रित करता है कि उनके बीच की जगह कैसे वितरित की जाती है।
  • align-items: क्रॉस अक्ष के साथ आइटम को संरेखित करता है (मुख्य अक्ष के लंबवत)।
.nav-container {
  display: flex; /* Flexbox को सक्रिय करता है */
  flex-direction: row; /* आइटम को क्षैतिज रूप से व्यवस्थित करता है */
  justify-content: space-around; /* आइटम के बीच समान रूप से स्थान वितरित करता है */
  align-items: center; /* आइटम को लंबवत रूप से केंद्रित करता है */
  background-color: #f0f0f0;
  padding: 1rem;
}

.nav-item {
  /* इन आइटम पर कोई विशेष लेआउट गुण आवश्यक नहीं है! */
  padding: 0.5rem 1rem;
}

flex-grow एक और उपयोगी गुण है। यह एक फ्लेक्स आइटम को कंटेनर में उपलब्ध अतिरिक्त स्थान लेने की अनुमति देता है। यदि सभी आइटम में flex-grow: 1 है, तो वे समान रूप से स्थान साझा करेंगे। यदि एक आइटम में flex-grow: 2 है और बाकी में flex-grow: 1 है, तो वह दूसरों की तुलना में दोगुना अतिरिक्त स्थान लेगा। यह लचीले डिज़ाइन बनाने के लिए बहुत अच्छा है जो अलग-अलग स्क्रीन आकारों के अनुकूल होते हैं।

CSS Grid: दो-आयामी शक्ति

जब आपको पंक्तियों और स्तंभों दोनों को एक साथ नियंत्रित करने की आवश्यकता होती है, तो बचाव के लिए आता है। यह एक दो-आयामी लेआउट प्रणाली है, जो इसे जटिल पेज संरचनाओं, जैसे कि लेख लेआउट, फोटो गैलरी, या डैशबोर्ड बनाने के लिए आदर्श बनाती है।

ग्रिड का उपयोग शुरू करने के लिए, आप एक कंटेनर पर display: grid; सेट करते हैं। फिर, आप grid-template-columns और grid-template-rows का उपयोग करके अपने ग्रिड की संरचना को परिभाषित करते हैं। आप पिक्सेल (px), प्रतिशत (%), या fr जैसी नई इकाइयों का उपयोग कर सकते हैं, जो उपलब्ध स्थान के एक अंश का प्रतिनिधित्व करती है।

.grid-container {
  display: grid;
  /* तीन समान-चौड़ाई वाले कॉलम बनाएँ */
  grid-template-columns: 1fr 1fr 1fr;
  /* पंक्तियों की ऊँचाई सामग्री के आधार पर सेट करें */
  grid-template-rows: auto auto;
  /* कॉलम और पंक्तियों के बीच 1rem का गैप जोड़ें */
  gap: 1rem; 
}

grid-template-areas का उपयोग करके लेआउट बनाना और भी सहज हो सकता है। यह आपको अपने ग्रिड के क्षेत्रों को नाम देने और फिर उन नामों का उपयोग करके नेत्रहीन रूप से आइटम रखने की अनुमति देता है। यह आपके HTML को साफ रखता है और आपके CSS को पढ़ने में बहुत आसान बनाता है।

.site-layout {
  display: grid;
  grid-template-columns: 1fr 3fr;
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    "header header"
    "sidebar main"
    "footer footer";
  gap: 10px;
  height: 100vh;
}

.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.footer { grid-area: footer; }

किसे चुनें: Flexbox या Grid?

डेवलपर्स के बीच एक आम सवाल यह है: "मुझे Flexbox का उपयोग करना चाहिए या Grid का?" जवाब यह नहीं है कि एक दूसरे से बेहतर है, बल्कि यह है कि वे अलग-अलग समस्याओं को हल करते हैं। आप अक्सर एक ही लेआउट में दोनों का उपयोग करेंगे।

सामग्री-प्रथम दृष्टिकोण के लिए है। यह तब सबसे अच्छा काम करता है जब आपके पास आइटम का एक सेट होता है और आप चाहते हैं कि वे एक पंक्ति या स्तंभ में बड़े करीने से व्यवस्थित हों, भले ही उनका आकार कुछ भी हो। यह एक-आयामी है।

Grid लेआउट-प्रथम दृष्टिकोण के लिए है। यह तब सबसे अच्छा काम करता है जब आप एक कठोर, दो-आयामी संरचना बनाना चाहते हैं और फिर उसमें सामग्री रखते हैं। यह पंक्तियों और स्तंभों दोनों के साथ काम करता है।

विशेषताFlexbox (1D)CSS Grid (2D)
मुख्य उपयोगघटकों और छोटे पैमाने के लेआउट के लिएपूरे पेज लेआउट के लिए
आयामया तो पंक्ति या स्तंभ (एक-आयामी)पंक्तियाँ और स्तंभ एक साथ (दो-आयामी)
दृष्टिकोणसामग्री-प्रथम (Content-first)लेआउट-प्रथम (Layout-first)
आइटम रैपिंगस्वाभाविक रूप से सामग्री को लपेटता हैसटीक प्लेसमेंट पर अधिक नियंत्रण
उदाहरणनेविगेशन बार, बटन का समूहलेख लेआउट, फोटो गैलरी

फ्लेक्स वास्तव में उपयोगी है यदि आपके पास एक आयाम के साथ लेआउट है, सीएसएस ग्रिड उपयोगी है जब आपके पास दो आयामों (पंक्ति, कॉलम) के साथ लेआउट हैं।

उन्नत CSS इकाइयाँ

आधुनिक लेआउट बनाते समय, सही इकाइयों का उपयोग करना महत्वपूर्ण है। जबकि px (पिक्सेल) सटीक होते हैं, वे हमेशा लचीले नहीं होते हैं। यहाँ कुछ सापेक्ष इकाइयाँ हैं जो आपके डिज़ाइन को अधिक अनुकूली बना सकती हैं:

  • rem और em: ये दोनों इकाइयाँ फ़ॉन्ट आकार के सापेक्ष हैं। em वर्तमान तत्व के फ़ॉन्ट आकार के सापेक्ष है, जबकि rem ("रूट em") रूट (<html>) तत्व के फ़ॉन्ट आकार के सापेक्ष है। स्केलेबल टाइपोग्राफी और स्पेसिंग बनाने के लिए rem को प्राथमिकता दी जाती है क्योंकि यह नेस्टिंग से प्रभावित नहीं होता है।
  • vh और vw: व्यूपोर्ट इकाइयाँ। 1vh व्यूपोर्ट की ऊँचाई का 1% है, और 1vw व्यूपोर्ट की चौड़ाई का 1% है। ये हीरो सेक्शन बनाने के लिए बहुत अच्छे हैं जो हमेशा स्क्रीन को भरते हैं (height: 100vh;)।
  • clamp(): यह CSS फ़ंक्शन आपको तीन मान सेट करने की अनुमति देता है: एक न्यूनतम मान, एक पसंदीदा मान, और एक अधिकतम मान। ब्राउज़र पसंदीदा मान का उपयोग करेगा, लेकिन यह सुनिश्चित करेगा कि यह न्यूनतम से नीचे न जाए या अधिकतम से ऊपर न जाए। यह द्रव टाइपोग्राफी बनाने के लिए अविश्वसनीय रूप से शक्तिशाली है जो स्क्रीन के आकार के साथ सुचारू रूप से बदलता है।
h1 {
  /* फ़ॉन्ट का आकार व्यूपोर्ट की चौड़ाई के साथ बढ़ेगा, 
     लेकिन 2rem से छोटा या 4rem से बड़ा नहीं होगा। */
  font-size: clamp(2rem, 5vw, 4rem);
}

.hero-section {
  /* यह खंड हमेशा पूरी व्यूपोर्ट ऊँचाई लेगा। */
  height: 100vh;
  display: grid;
  place-items: center; /* ग्रिड में आइटम को केंद्रित करने का एक शॉर्टकट */
}

अब जब आपने इन आधुनिक तकनीकों के बारे में सीख लिया है, तो अपने ज्ञान का परीक्षण करने का समय आ गया है।

Quiz Questions 1/5

CSS Flexbox और CSS Grid के बीच मुख्य अंतर क्या है?

Quiz Questions 2/5

आपको एक फ्लेक्स कंटेनर में तीन आइटम मिले हैं। आप चाहते हैं कि दूसरा आइटम दूसरों की तुलना में दोगुना अतिरिक्त स्थान ले। आपको कौन सा CSS नियम लागू करना चाहिए?

Flexbox और Grid में महारत हासिल करना अभ्यास के बारे में है। इन उपकरणों को मिलाकर, आप वस्तुतः कोई भी वेब लेआउट बना सकते हैं जिसकी आप कल्पना कर सकते हैं, जो सभी उपकरणों पर सुंदर और कार्यात्मक हो।