ToolHub
View All Posts

CSS Flexbox बनाम Grid: कब किस लेआउट का उपयोग करें

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

CSS Flexbox क्या है?

CSS Flexible Box Layout, जिसे आमतौर पर Flexbox कहा जाता है, एक एक-आयामी लेआउट मॉडल है। यह एकल अक्ष (क्षैतिज पंक्ति या ऊर्ध्वाधर स्तंभ) के साथ स्थान वितरित करने में उत्कृष्ट है। Flexbox कंटेनर के भीतर आइटम को लचीले ढंग से फैलने, बढ़ने, सिकुड़ने और उपलब्ध स्थान के आधार पर स्वयं को संरेखित करने में सक्षम बनाता है।

Flexbox को पारंपरिक CSS में कुख्यात रूप से कठिन सामान्य लेआउट समस्याओं को हल करने के लिए डिज़ाइन किया गया था: तत्वों को लंबवत केंद्रित करना, सहोदर तत्वों के बीच समान रूप से स्थान वितरित करना, और HTML बदले बिना सामग्री को पुनः क्रमित करना। Flexbox से पहले, डेवलपर्स इन प्रभावों को प्राप्त करने के लिए float, inline-block हैक और टेबल लेआउट पर निर्भर थे।

Flexbox मुख्य अवधारणाएँ

Flexbox उदाहरण: नेविगेशन बार

.navbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 0 24px;
  height: 64px;
}

.navbar__logo {
  flex-shrink: 0;
}

.navbar__links {
  display: flex;
  gap: 16px;
  list-style: none;
}

यह नेविगेशन बार logo को बाईं ओर और लिंक को दाईं ओर धकेलने के लिए justify-content: space-between के साथ Flexbox का उपयोग करता है। आइटम align-items: center के माध्यम से लंबवत केंद्रित हैं। यह एक क्लासिक एक-आयामी लेआउट है जहाँ Flexbox प्राकृतिक विकल्प है।

CSS Grid क्या है?

CSS Grid लेआउट एक द्वि-आयामी लेआउट सिस्टम है। यह एक साथ पंक्तियों और स्तंभों को संभालता है, जिससे आप ग्रिड संरचना में तत्वों की स्थिति और आकार को सटीक रूप से नियंत्रित कर सकते हैं। Grid आपको स्पष्ट ट्रैक, क्षेत्र और प्लेसमेंट नियम परिभाषित करने देता है, न्यूनतम कोड के साथ जटिल लेआउट बनाता है।

Grid पृष्ठ-स्तरीय लेआउट और जटिल घटक संरचनाओं के लिए डिज़ाइन किया गया है जहाँ आपको दोनों आयामों को नियंत्रित करने की आवश्यकता होती है। यह नामित ग्रिड क्षेत्रों, auto-fill और auto-fit, और स्पष्ट पंक्ति/स्तंभ आकारों जैसी अवधारणाओं का परिचय देता है, जो पहले असंभव लेआउट को सीधा बनाता है।

Grid मुख्य अवधारणाएँ

Grid उदाहरण: पेज लेआउट

.page {
  display: grid;
  grid-template-columns: 250px 1fr;
  grid-template-rows: 64px 1fr 48px;
  grid-template-areas:
    "header  header"
    "sidebar content"
    "footer  footer";
  min-height: 100vh;
}

.page__header  { grid-area: header; }
.page__sidebar { grid-area: sidebar; }
.page__content { grid-area: content; }
.page__footer  { grid-area: footer; }

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

Flexbox बनाम Grid: साथ-साथ तुलना

विशेषताFlexboxGrid
आयामएक-आयामी (पंक्ति या स्तंभ)द्वि-आयामी (पंक्तियाँ और स्तंभ)
सामग्री-संचालितहाँ, आइटम लेआउट निर्धारित करते हैंनहीं, पहले लेआउट संरचना परिभाषित करें
संरेखणमुख्य अक्ष + क्रॉस अक्षब्लॉक अक्ष + इनलाइन अक्ष
Gap समर्थनहाँ (gap गुण)हाँ (gap गुण)
आइटम प्लेसमेंटक्रम (स्रोत क्रम)स्पष्ट (मनमाना ग्रिड स्थान)
ओवरलैपसीधे समर्थित नहींग्रिड प्लेसमेंट समर्थन के माध्यम से
रिस्पॉन्सिवflex-wrap का उपयोग करेंauto-fit/auto-fill का उपयोग करें
सर्वोत्तम उपयोगनेविगेशन, टूलबार, कार्ड सामग्रीपृष्ठ लेआउट, गैलरी, डैशबोर्ड

Flexbox का उपयोग कब करें

जब आपकी लेआउट समस्या मुख्यतः एक-आयामी हो, तो Flexbox सही विकल्प है। यहाँ सबसे सामान्य परिदृश्य हैं:

1. नेविगेशन बार और मेनू

नेविगेशन अनिवार्य रूप से आइटम की एक पंक्ति (या स्तंभ) है। Flexbox आइटम के बीच स्थान वितरित करता है, ओवरफ़्लो को सुंदरता से संभालता है, और आइटम को लंबवत संरेखित करना सरल बनाता है। gap गुण मेनू आइटम के बीच margin-आधारित अंतराल के पुराने तरीके को बदल देता है।

2. सामग्री को केंद्रित करना

.centered {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
}

यह तीन-पंक्ति केंद्रीकरण समाधान सबसे प्रिय Flexbox पैटर्न में से एक है। Flexbox से पहले, लंबवत केंद्रीकरण के लिए table-cell, absolute positioning के साथ transform, या line-height ट्रिक्स शामिल हैक की आवश्यकता होती थी। Flexbox इसे सहज बनाता है।

3. कार्ड सामग्री संरेखण

जब कार्ड में शीर्षक, विवरण और एक्शन बटन हों, और आप चाहते हैं कि सामग्री की लंबाई की परवाह किए बिना बटन हमेशा नीचे रहे, तो Flexbox इसे सुंदरता से संभालता है:

.card {
  display: flex;
  flex-direction: column;
}

.card__content {
  flex: 1;
}

सामग्री क्षेत्र पर flex: 1 इसे उपलब्ध स्थान भरने के लिए बढ़ने देता है, बटन को कार्ड के नीचे धकेलता है। यह काम करता है चाहे कार्ड में कितना भी टेक्स्ट हो।

4. फ़ॉर्म पंक्ति लेआउट

एक पंक्ति में व्यवस्थित और आकार बदलने योग्य फ़ॉर्म तत्व, जैसे खोज इनपुट और सबमिट बटन, Flexbox के लिए आदर्श हैं। इनपुट उपलब्ध स्थान भरने के लिए बढ़ सकता है जबकि बटन अपना प्राकृतिक आकार बनाए रखता है।

5. मीडिया ऑब्जेक्ट

क्लासिक मीडिया ऑब्जेक्ट पैटर्न (बाईं ओर छवि, दाईं ओर टेक्स्ट) Flexbox का प्राकृतिक मेल है। छवि अपनी प्राकृतिक चौड़ाई बनाए रखती है, जबकि टेक्स्ट शेष स्थान भरता है।

CSS Grid का उपयोग कब करें

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

1. पूर्ण-पृष्ठ लेआउट

हेडर, साइडबार, सामग्री क्षेत्र और फ़ुटर वाले पृष्ठ-स्तरीय लेआउट क्लासिक Grid उपयोग के मामले हैं। नामित ग्रिड क्षेत्र लेआउट को पढ़ने योग्य और रखरखाव योग्य बनाते हैं:

.layout {
  display: grid;
  grid-template-columns: 1fr;
  grid-template-areas:
    "header"
    "content"
    "sidebar"
    "footer";
}

@media (min-width: 768px) {
  .layout {
    grid-template-columns: 1fr 300px;
    grid-template-areas:
      "header  header"
      "content sidebar"
      "footer  footer";
  }
}

ध्यान दें कि रिस्पॉन्सिव ब्रेकपॉइंट कैसे सरलता से ग्रिड टेम्पलेट को पुनः परिभाषित करते हैं। आइटम अपने असाइन किए गए ग्रिड क्षेत्रों में बने रहते हैं, और लेआउट स्वचालित रूप से पुनर्गठित होता है। यह विभिन्न ब्रेकपॉइंट पर Flexbox कंटेनरों को पुनर्व्यवस्थित करने से कहीं अधिक साफ़ है।

2. कार्ड ग्रिड और गैलरी

.gallery {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 24px;
}

यह एकल घोषणा एक रिस्पॉन्सिव कार्ड ग्रिड बनाती है जो उपलब्ध चौड़ाई के आधार पर स्तंभों की संख्या स्वचालित रूप से समायोजित करती है। प्रत्येक कार्ड कम से कम 280px चौड़ा है लेकिन शेष स्थान भरने के लिए बढ़ता है। किसी media query की आवश्यकता नहीं। minmax के साथ यह auto-fill पैटर्न सबसे शक्तिशाली Grid तकनीकों में से एक है।

3. डैशबोर्ड लेआउट

विभिन्न आकारों वाले विजेट का डैशबोर्ड, जो कई पंक्तियों और स्तंभों में फैला हो, Grid के लिए आदर्श है। आप आइटम को विशिष्ट ग्रिड स्थानों पर रख सकते हैं और ट्रैक में फैला सकते हैं:

.dashboard {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-auto-rows: minmax(200px, auto);
  gap: 16px;
}

.widget--wide { grid-column: span 2; }
.widget--tall { grid-row: span 2; }
.widget--hero { grid-column: span 2; grid-row: span 2; }

4. पत्रिका और संपादकीय लेआउट

जब सामग्री को ओवरलैप करने या गैर-अनुक्रमिक स्थितियों में रखने की आवश्यकता हो, तो Grid एकमात्र CSS लेआउट सिस्टम है जो मूल रूप से इसका समर्थन करता है। आप आइटम को विशिष्ट ग्रिड लाइनों पर रख सकते हैं, बिना absolute positioning के ओवरलैपिंग रचनाएँ बना सकते हैं।

5. होली ग्रेल लेआउट

प्रसिद्ध 'होली ग्रेल' लेआउट (हेडर, निश्चित-चौड़ाई साइडबार और लचीले केंद्र के साथ तीन-स्तंभ मुख्य भाग, फ़ुटर) Grid के साथ सहजता से प्राप्त किया जा सकता है:

.holy-grail {
  display: grid;
  grid-template-columns: 200px 1fr 200px;
  grid-template-rows: auto 1fr auto;
  min-height: 100vh;
}

Flexbox और Grid को संयोजित करना

सबसे प्रभावी दृष्टिकोण Flexbox और Grid के बीच चयन करना नहीं है, बल्कि उन्हें रणनीतिक रूप से संयोजित करना है। एक सामान्य और अनुशंसित पैटर्न मैक्रो लेआउट (पृष्ठ संरचना) के लिए Grid और माइक्रो लेआउट (घटकों के अंदर) के लिए Flexbox का उपयोग करना है।

उदाहरण: Grid और Flexbox के साथ डैशबोर्ड

/* Grid for the page structure */
.dashboard {
  display: grid;
  grid-template-columns: 250px 1fr;
  grid-template-rows: 64px 1fr;
  grid-template-areas:
    "sidebar header"
    "sidebar main";
  min-height: 100vh;
}

/* Flexbox for the header content */
.dashboard__header {
  grid-area: header;
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 0 24px;
}

/* Flexbox for sidebar menu items */
.dashboard__nav {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

इस उदाहरण में, Grid समग्र पृष्ठ संरचना को परिभाषित करता है, जबकि Flexbox प्रत्येक अनुभाग के भीतर संरेखण को संभालता है। चिंताओं का यह पृथक्करण आपके CSS को व्यवस्थित और उद्देश्यपूर्ण बनाए रखता है।

रिस्पॉन्सिव डिज़ाइन पैटर्न

Flexbox रिस्पॉन्सिव पैटर्न: रैपिंग

.tag-list {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.tag {
  flex-shrink: 0;
}

Flexbox रैपिंग टैग सूचियों, चिप सेट और किसी भी आइटम संग्रह के लिए आदर्श है जो क्षैतिज स्थान समाप्त होने पर स्वाभाविक रूप से अगली पंक्ति में प्रवाहित होते हैं। प्रत्येक आइटम अपना प्राकृतिक आकार बनाए रखता है।

Grid रिस्पॉन्सिव पैटर्न: ऑटो-फिल

.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 24px;
}

Grid auto-fill बिना किसी media query के वास्तव में रिस्पॉन्सिव ग्रिड बनाता है। कंटेनर की चौड़ाई के आधार पर स्तंभों की संख्या स्वचालित रूप से समायोजित होती है, प्रत्येक स्तंभ कम से कम 300px। यह Flexbox रैपिंग से अधिक शक्तिशाली है क्योंकि आइटम पंक्ति को समान रूप से भरने के लिए खिंचते हैं।

Grid रिस्पॉन्सिव पैटर्न: स्टैकिंग

.layout {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
}

@media (min-width: 768px) {
  .layout {
    grid-template-columns: 1fr 1fr;
  }
}

@media (min-width: 1024px) {
  .layout {
    grid-template-columns: 1fr 1fr 1fr;
  }
}

सामान्य गलतियाँ और उनसे कैसे बचें

ब्राउज़र समर्थन

Flexbox और Grid दोनों को 2026 में उत्कृष्ट ब्राउज़र समर्थन प्राप्त है:

ब्राउज़रFlexbox समर्थनGrid समर्थन
Chromeपूर्ण समर्थन (v29 से)पूर्ण समर्थन (v57 से)
Firefoxपूर्ण समर्थन (v28 से)पूर्ण समर्थन (v52 से)
Safariपूर्ण समर्थन (v9 से)पूर्ण समर्थन (v10.1 से)
Edgeपूर्ण समर्थन (v12 से)पूर्ण समर्थन (v16 से)
iOS Safariपूर्ण समर्थन (v9 से)पूर्ण समर्थन (v10.3 से)
Samsung Internetपूर्ण समर्थन (v1.5 से)पूर्ण समर्थन (v6.2 से)

दोनों तकनीकें वर्षों से सभी प्रमुख ब्राउज़रों में पूरी तरह से समर्थित हैं। आधुनिक Web विकास में संगतता चिंताओं के कारण किसी से भी बचने का कोई कारण नहीं है। Flexbox में gap गुण सार्वभौमिक समर्थन प्राप्त करने वाली अंतिम प्रमुख विशेषता थी, जो 2021 से सभी ब्राउज़रों में उपलब्ध है।

त्वरित निर्णय गाइड

जब आप एक नया लेआउट शुरू करते हैं, तो स्वयं से ये प्रश्न पूछें:

अंगूठे का नियम: घटकों के लिए Flexbox, पृष्ठों के लिए Grid। यदि आप एक दिशा में एक रेखा खींच सकते हैं और यह समझ में आता है, तो Flexbox का उपयोग करें। यदि आपको दो दिशाओं में रेखाओं की आवश्यकता है, तो Grid का उपयोग करें।

CSS का उपयोग कर रहे हैं? अपनी स्टाइलशीट को ऑप्टिमाइज़ करने के लिए हमारे मुफ़्त CSS कंप्रेसर और फ़ॉर्मेटर टूल आज़माएँ।

CSS संपीड़ित करेंCSS फ़ॉर्मेट करें

अक्सर पूछे जाने वाले प्रश्न

Flexbox या Grid का उपयोग करना चाहिए?

Flexbox एक-आयामी लेआउट (पंक्ति या स्तंभ) के लिए है जहाँ आइटम को लचीले ढंग से फैलने और स्थान को गतिशील रूप से वितरित करने की आवश्यकता होती है। Grid द्वि-आयामी लेआउट के लिए है जहाँ पंक्तियों और स्तंभों दोनों पर नियंत्रण की आवश्यकता होती है। कई लेआउट दोनों के संयोजन से लाभान्वित होते हैं: Grid समग्र पृष्ठ संरचना के लिए, Flexbox घटक-स्तरीय संरेखण के लिए।

क्या Flexbox और Grid का एक साथ उपयोग किया जा सकता है?

हाँ, Flexbox और Grid पूरी तरह से एक साथ काम कर सकते हैं, और यह अनुशंसित दृष्टिकोण है। Grid मैक्रो लेआउट (पृष्ठ क्षेत्र, कार्ड ग्रिड) के लिए, Flexbox माइक्रो लेआउट (नेविगेशन आइटम, बटन समूह, कार्ड सामग्री संरेखण) के लिए। वे प्रतिस्पर्धी नहीं बल्कि पूरक हैं।

क्या CSS Grid, Flexbox से बेहतर है?

दोनों में से कोई भी सार्वभौमिक रूप से बेहतर नहीं है। Grid सटीक पंक्ति-स्तंभ नियंत्रण वाले द्वि-आयामी लेआउट में उत्कृष्ट है, जबकि Flexbox एक-आयामी सामग्री वितरण और संरेखण में श्रेष्ठ है। Grid आपको अधिक स्पष्ट प्लेसमेंट नियंत्रण देता है; Flexbox गतिशील सामग्री के लिए अधिक लचीला है। अपनी लेआउट आवश्यकताओं के आधार पर चुनें।

क्या CSS Grid सभी ब्राउज़रों में समर्थित है?

CSS Grid सभी आधुनिक ब्राउज़रों में समर्थित है, जिनमें Chrome, Firefox, Safari और Edge शामिल हैं। 2017 से समर्थन सार्वभौमिक है। Internet Explorer 11 में -ms- उपसर्ग के साथ आंशिक कार्यान्वयन है, लेकिन Microsoft अब IE का समर्थन नहीं करता। आधुनिक Web विकास के लिए, Grid का पूर्ण ब्राउज़र समर्थन है।

CSS Grid से कब बचना चाहिए?

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

ToolHub's collection of 300+ free online tools including CSS grid generators, flexbox tools, and more — no sign-up required.