આ વ્યાપક માર્ગદર્શિકા વડે CSS સબગ્રીડમાં નિપુણતા મેળવો. વૈશ્વિક પ્રેક્ષકો માટે સંપૂર્ણ રીતે સંરેખિત, જટિલ અને જાળવણી કરી શકાય તેવા વેબ લેઆઉટ બનાવતા શીખો. જેમાં વ્યવહારુ ઉદાહરણો અને શ્રેષ્ઠ પદ્ધતિઓ શામેલ છે.
CSS ગ્રીડ સબગ્રીડ: એડવાન્સ્ડ લેઆઉટ કમ્પોઝિશનમાં ઊંડાણપૂર્વકનો અભ્યાસ
વર્ષોથી, વેબ ડેવલપર્સ અને ડિઝાઇનરોએ અભૂતપૂર્વ નિયંત્રણ અને સુગમતા સાથે અત્યાધુનિક, દ્વિ-પરિમાણીય લેઆઉટ બનાવવા માટે CSS ગ્રીડની શક્તિનો ઉપયોગ કર્યો છે. ગ્રીડે વેબ પેજની રચના વિશે આપણે જે રીતે વિચારીએ છીએ તેમાં ક્રાંતિ લાવી, અમને ફ્લોટ્સની મર્યાદાઓ અને ફ્લેક્સબોક્સની એક-પરિમાણીય પ્રકૃતિથી દૂર લઈ ગયા. જો કે, તેની શક્તિ હોવા છતાં, એક સતત પડકાર રહ્યો: નેસ્ટેડ ગ્રીડમાંની આઇટમ્સને પ્રાથમિક પેરેન્ટ ગ્રીડ સાથે સંરેખિત કરવી. તે ઘણીવાર નિરાશાનું સામાન્ય કારણ હતું, જે ઘણીવાર જટિલ વર્કઅરાઉન્ડ્સ, મેન્યુઅલ ગણતરીઓ અથવા નેસ્ટેડ ગ્રીડ માળખું સંપૂર્ણપણે છોડી દેવા તરફ દોરી જતું. પ્રસ્તુત છે CSS Subgrid, લાંબા સમયથી રાહ જોવાતી સુવિધા જે આ સમસ્યાને ખૂબ જ સુંદર રીતે હલ કરે છે, જે લેઆઉટ કમ્પોઝિશનમાં ચોકસાઈ અને સુઘડતાના નવા સ્તરને અનલોક કરે છે.
આ વ્યાપક માર્ગદર્શિકા ફ્રન્ટ-એન્ડ ડેવલપર્સ, વેબ ડિઝાઇનર્સ અને UI એન્જિનિયર્સના વૈશ્વિક પ્રેક્ષકો માટે બનાવવામાં આવી છે. અમે CSS સબગ્રીડના શું, શા માટે અને કેવી રીતે તે શોધીશું, મૂળભૂત વિભાવનાઓથી લઈને અદ્યતન વ્યવહારુ એપ્લિકેશનો સુધી. અંત સુધીમાં, તમે ફક્ત સબગ્રીડને જ સમજશો નહીં, પરંતુ વધુ મજબૂત, જાળવી શકાય તેવા અને સુંદર રીતે સંરેખિત લેઆઉટ બનાવવા માટે તેનો ઉપયોગ કરવા માટે પણ સજ્જ થશો.
સબગ્રીડ પહેલાનો પડકાર: નેસ્ટેડ ગ્રીડની સમસ્યા
સબગ્રીડ શું લાવે છે તેની સંપૂર્ણ પ્રશંસા કરવા માટે, આપણે પહેલા તેના વિનાની દુનિયાને સમજવી જોઈએ. કલ્પના કરો કે તમારી પાસે તમારા પેજની સામગ્રી માટે મુખ્ય ગ્રીડ લેઆઉટ છે. ગ્રીડ આઇટમ્સમાંથી એકની અંદર, તમારે બીજી ગ્રીડ બનાવવાની જરૂર છે - એક નેસ્ટેડ ગ્રીડ. આ એક ખૂબ જ સામાન્ય પેટર્ન છે, ખાસ કરીને કમ્પોનન્ટ-આધારિત ડિઝાઇનમાં.
ચાલો એક લાક્ષણિક કાર્ડ લેઆઉટને ધ્યાનમાં લઈએ. તમારી પાસે ઘણા કાર્ડ્સ ધરાવતું કન્ટેનર છે, અને કન્ટેનર એ CSS ગ્રીડ છે. દરેક કાર્ડ એક ગ્રીડ આઇટમ છે. દરેક કાર્ડની અંદર, તમે તેની સામગ્રીની રચના કરવા માટે ગ્રીડનો ઉપયોગ કરવા માંગો છો - એક હેડર, એક મુખ્ય ભાગ અને ફૂટર.
સબગ્રીડ વિના, કાર્ડની અંદરની નેસ્ટેડ ગ્રીડને પેરેન્ટ કન્ટેનરની ગ્રીડ લાઇન્સની કોઈ જાણ હોતી નથી. તે પોતાનું, સ્વતંત્ર ગ્રીડ ફોર્મેટિંગ સંદર્ભ સ્થાપિત કરે છે. આનો અર્થ એ છે કે તમે કાર્ડની અંદર જે ટ્રેક્સ (કૉલમ અને રો) વ્યાખ્યાયિત કરો છો તે મુખ્ય કન્ટેનરના ટ્રેક્સથી સંપૂર્ણપણે અલગ છે.
સમસ્યાનું દ્રશ્ય ઉદાહરણ
એક પ્રોડક્ટ લિસ્ટિંગની કલ્પના કરો જ્યાં દરેક પ્રોડક્ટ એક કાર્ડ છે. તમે ઇચ્છો છો કે પ્રોડક્ટના શીર્ષકો બધા કાર્ડ્સ પર આડા સંરેખિત થાય, અને દરેક કાર્ડના તળિયે "Add to Cart" બટનો પણ સંરેખિત થાય, ભલેને મધ્યમાં વર્ણનની લંબાઈ ગમે તે હોય. પ્રમાણભૂત નેસ્ટેડ ગ્રીડ સાથે, નિશ્ચિત ઊંચાઈ અથવા JavaScript ગણતરીઓનો આશરો લીધા વિના આ પ્રાપ્ત કરવું લગભગ અશક્ય છે.
આ પરિદ્રશ્યનું એક સરળ કોડ ઉદાહરણ અહીં છે:
HTML માળખું:
<div class="card-container">
<div class="card">
<h3>Product A</h3>
<p>A short, concise description.</p>
<button>Add to Cart</button>
</div>
<div class="card">
<h3>Product B</h3>
<p>This product has a much longer description that will wrap onto multiple lines, causing alignment issues for the elements below it.</p>
<button>Add to Cart</button>
</div>
<div class="card">
<h3>Product C</h3>
<p>Another description.</p>
<button>Add to Cart</button>
</div>
</div>
CSS (સબગ્રીડ વિના):
.card-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
}
.card {
border: 1px solid #ccc;
padding: 15px;
display: grid;
grid-template-rows: auto 1fr auto; /* Header, Body (stretches), Footer */
gap: 10px;
}
.card h3 {
/* No special styling needed for position */
}
.card p {
/* This will stretch due to 1fr */
}
.card button {
align-self: end; /* Tries to push button to the bottom of its grid area */
}
આ ઉદાહરણમાં, બીજા કાર્ડમાંનું બટન અન્ય કાર્ડ્સના બટનો કરતાં નીચું હશે કારણ કે તેના વર્ણનનું લખાણ વધુ જગ્યા લે છે. દરેક કાર્ડની આંતરિક ગ્રીડ સંપૂર્ણપણે સ્વતંત્ર છે. ફકરાની રો માટે `1fr` યુનિટ ફક્ત તે એકલ કાર્ડની ઉપલબ્ધ ઊંચાઈના સંદર્ભમાં જ લાગુ પડે છે. બટનોને સંરેખિત કરવા માટે કોઈ વહેંચાયેલ ગ્રીડ લાઇન નથી. આ તે જ સમસ્યા છે જેને ઉકેલવા માટે સબગ્રીડ ડિઝાઇન કરવામાં આવી હતી.
CSS સબગ્રીડનો પરિચય: પરફેક્ટ સંરેખણ માટેનો ખૂટતો ભાગ
`grid-template-columns` અને `grid-template-rows` માટે CSS સબગ્રીડ એ એક મૂલ્ય છે. જ્યારે ગ્રીડ આઇટમ (જે પોતે ગ્રીડ કન્ટેનર બને છે) પર લાગુ કરવામાં આવે છે, ત્યારે તે તે આઇટમને તેની પોતાની નવી ટ્રેક સૂચિઓ ન બનાવવા માટે સૂચના આપે છે. તેના બદલે, તે તેના સીધા પેરેન્ટ પાસેથી ગ્રીડ ટ્રેક્સ ઉધાર લે છે અને અપનાવે છે.
તકનીકી રીતે, સબગ્રીડ શું છે?
સારમાં, સબગ્રીડ નેસ્ટેડ ગ્રીડ અને તેના પેરેન્ટ ગ્રીડ વચ્ચે સીધો સંબંધ બનાવે છે. નેસ્ટેડ ગ્રીડ ઉલ્લેખિત પરિમાણ (રો, કૉલમ, અથવા બંને) માટે પેરેન્ટના ગ્રીડ ફોર્મેટિંગ સંદર્ભમાં સહભાગી બને છે. સબગ્રીડ કરેલી આઇટમના ચાઇલ્ડ એલિમેન્ટ્સને પછી આ વારસાગત ગ્રીડ પર મૂકી શકાય છે, જેનાથી તેઓ તેમના તાત્કાલિક પેરેન્ટની બહારના અન્ય એલિમેન્ટ્સ સાથે સંરેખિત થઈ શકે છે, પરંતુ તે જ મુખ્ય ગ્રીડની અંદર.
મુખ્ય વાત આ છે: એક સબગ્રીડ પોતાના ટ્રેક્સ વ્યાખ્યાયિત કરતું નથી; તે તેના પેરેન્ટના ટ્રેક્સનો ઉપયોગ કરે છે.
subgrid કીવર્ડ: સિન્ટેક્સ અને ઉપયોગ
સિન્ટેક્સ ખૂબ જ સરળ છે. તમે `subgrid` કીવર્ડનો ઉપયોગ `grid-template-columns`, `grid-template-rows`, અથવા બંને માટે, એવા એલિમેન્ટ પર કરો છો જે ગ્રીડ આઇટમ અને ગ્રીડ કન્ટેનર બંને છે.
ચાલો કહીએ કે ચાઇલ્ડ એલિમેન્ટ `.nested-grid` એ `.parent-grid` ની અંદર એક આઇટમ છે. તેને સબગ્રીડ બનાવવા માટે:
.parent-grid {
display: grid;
grid-template-columns: 1fr 2fr 1fr; /* Example parent tracks */
grid-template-rows: 100px auto 200px; /* Example parent tracks */
}
.nested-grid {
/* This item must span the tracks it wants to use */
grid-column: 1 / 4; /* Spans all 3 columns of the parent */
grid-row: 2 / 3; /* Sits in the second row of the parent */
/* Now, we activate subgrid */
display: grid;
grid-template-columns: subgrid; /* Inherits the 3 column tracks from parent */
grid-template-rows: subgrid; /* Inherits the single 'auto' row track from parent */
}
યાદ રાખવા જેવો એક મહત્ત્વનો મુદ્દો: સબગ્રીડને ટ્રેક્સ વારસામાં મેળવવા માટે, તેણે પહેલા તે જગ્યા રોકવી જ જોઇએ. ઉપરના ઉદાહરણમાં, `.nested-grid` તેના પેરેન્ટના ત્રણેય કૉલમમાં ફેલાયેલું છે. તેથી, જ્યારે આપણે `grid-template-columns: subgrid;` સેટ કરીએ છીએ, ત્યારે તે તે જ ત્રણ ટ્રેક્સની ઍક્સેસ મેળવે છે. તેના પોતાના ચિલ્ડ્રન હવે પેરેન્ટના કૉલમ ગ્રીડની ગ્રીડ લાઇન 1 થી 4 નો ઉપયોગ કરીને મૂકી શકાય છે.
બ્રાઉઝર સપોર્ટ અને પ્રોગ્રેસિવ એન્હાન્સમેન્ટ
આ લેખન મુજબ, ફાયરફોક્સ, ક્રોમ, એજ અને સફારી સહિતના આધુનિક બ્રાઉઝર્સમાં સબગ્રીડને મજબૂત સમર્થન છે. આ તેને વૈશ્વિક વપરાશકર્તા આધારને ધ્યાનમાં રાખીને પ્રોડક્શન વેબસાઇટ્સ માટે એક સક્ષમ સાધન બનાવે છે. જોકે, કોઈપણ આધુનિક CSS સુવિધાની જેમ, જૂના બ્રાઉઝર્સ પરના વપરાશકર્તાઓને ધ્યાનમાં લેવું સમજદારીભર્યું છે.
પ્રોગ્રેસિવ એન્હાન્સમેન્ટ અહીં સંપૂર્ણ વ્યૂહરચના છે. અમે એવા બ્રાઉઝર્સ માટે એક નક્કર ફોલબેક લેઆઉટ પ્રદાન કરવા માટે CSS માં `@supports` એટ-રૂલનો ઉપયોગ કરી શકીએ છીએ જે સબગ્રીડને સમજતા નથી, અને પછી જેઓ સમજે છે તેમના માટે સબગ્રીડ-સંચાલિત લેઆઉટ લાગુ કરી શકીએ છીએ.
/* --- Fallback for older browsers --- */
.card {
display: flex;
flex-direction: column;
justify-content: space-between; /* A good flex fallback */
}
/* --- Subgrid enhancement for modern browsers --- */
@supports (grid-template-rows: subgrid) {
.card {
display: grid;
grid-template-rows: subgrid; /* Override the flex display */
grid-row: span 3; /* Assumes parent grid has 3 rows for header, content, footer */
}
}
આ અભિગમ દરેક માટે કાર્યાત્મક અને સ્વીકાર્ય અનુભવ સુનિશ્ચિત કરે છે, જ્યારે આધુનિક બ્રાઉઝર્સ પર મોટાભાગના વપરાશકર્તાઓને શ્રેષ્ઠ, સંપૂર્ણ રીતે સંરેખિત લેઆઉટ પહોંચાડે છે.
વ્યવહારુ ઊંડાણપૂર્વકનો અભ્યાસ: સબગ્રીડ ક્રિયામાં
સિદ્ધાંત જરૂરી છે, પરંતુ સબગ્રીડને વાસ્તવિક-દુનિયાની સમસ્યાઓ હલ કરતા જોવું એ છે જ્યાં તેની શક્તિ ખરેખર સ્પષ્ટ થાય છે. ચાલો આપણા કાર્ડ કમ્પોનન્ટ ઉદાહરણ પર પાછા જઈએ અને તેને સબગ્રીડ સાથે ઠીક કરીએ.
ઉદાહરણ 1: સંપૂર્ણ રીતે સંરેખિત કાર્ડ કમ્પોનન્ટ
આપણો ધ્યેય કાર્ડ હેડરો, કન્ટેન્ટ ક્ષેત્રો અને ફૂટરોને બધા કાર્ડ્સ પર સંરેખિત કરવાનો છે, જેથી સામગ્રીની લંબાઈ ગમે તે હોય, સ્વચ્છ આડી રેખાઓ બને.
પહેલા, આપણે આપણી પેરેન્ટ ગ્રીડને સમાયોજિત કરવાની જરૂર છે. કૉલમ વ્યાખ્યાયિત કરવાને બદલે, આપણે રો પણ વ્યાખ્યાયિત કરીશું જે આપણા કાર્ડ્સના ઇચ્છિત વિભાગો (હેડર, બોડી, ફૂટર) ને અનુરૂપ હોય.
નવું HTML (કોઈ ફેરફારની જરૂર નથી):
<div class="card-container">
<!-- Cards go here, same as before -->
</div>
નવું CSS (સબગ્રીડ સાથે):
.card-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
/* Define rows for our card structure */
grid-template-rows: auto 1fr auto; /* Row for headers, flexible body, row for footers */
gap: 20px;
}
.card {
border: 1px solid #ccc;
padding: 15px;
/* --- The Subgrid Magic --- */
display: grid;
/* The card itself needs to span all the rows it will use */
grid-row: 1 / 4; /* Span all three rows defined in the parent */
/* Now, inherit those rows */
grid-template-rows: subgrid;
}
/* Place the card's children onto the inherited parent grid */
.card h3 {
grid-row: 1; /* Place in the first row of the parent's grid */
}
.card p {
grid-row: 2; /* Place in the second (flexible) row */
}
.card button {
grid-row: 3; /* Place in the third row */
align-self: end; /* Optional: align to bottom within that row */
}
હમણાં શું થયું?
- `.card-container` હવે ત્રણ-રોની ગ્રીડ વ્યાખ્યાયિત કરે છે: હેડરો માટે એક `auto`-સાઇઝની, મુખ્ય સામગ્રી માટે એક `1fr` લવચીક રો, અને બટનો માટે બીજી `auto`-સાઇઝની રો.
- દરેક `.card`ને આ ત્રણેય રો (`grid-row: 1 / 4`)માં ફેલાવવા માટે કહેવામાં આવે છે.
- સૌથી મહત્ત્વનું, અમે `.card` પર `display: grid` અને `grid-template-rows: subgrid` સેટ કર્યું છે. આ કાર્ડને કહે છે, "તમારી પોતાની રો બનાવશો નહીં. તમારા પેરેન્ટ પાસેથી તમે જે ત્રણ રોમાં ફેલાયેલા છો તેનો ઉપયોગ કરો."
- હવે, દરેક કાર્ડની અંદરના `h3`, `p`, અને `button` ને એક જ વહેંચાયેલ ગ્રીડ પર મૂકવામાં આવી રહ્યા છે. કાર્ડ 1 નું `h3` એ કાર્ડ 2 ના `h3` જેવા જ ટ્રેકમાં છે. કાર્ડ 1 નું `button` એ કાર્ડ 2 ના બટન જેવા જ ટ્રેકમાં છે. પરિણામ? સમગ્ર કમ્પોનન્ટમાં સંપૂર્ણ આડું સંરેખણ.
આ એક ક્રાંતિકારી ફેરફાર છે. અમે સરળ, ઘોષણાત્મક CSS સાથે, હેક્સ વિના અને સ્વચ્છ, સિમેન્ટિક HTML માળખું જાળવી રાખીને એક જટિલ સંરેખણ લક્ષ્ય પ્રાપ્ત કર્યું છે.
ઉદાહરણ 2: જટિલ લેઆઉટમાં ફોર્મ ફીલ્ડ્સને સંરેખિત કરવું
સ્વચ્છ વપરાશકર્તા અનુભવ માટે ફોર્મ્સ અન્ય ક્ષેત્ર છે જ્યાં સંરેખણ નિર્ણાયક છે. પેજના એક વિભાગની કલ્પના કરો જે એક ગ્રીડ આઇટમ છે, અને તે વિભાગની અંદર, તમારી પાસે લેબલ્સ અને ઇનપુટ્સ સાથેનું એક ફોર્મ છે જેને તમે પેજ પરના અન્ય એલિમેન્ટ્સ સાથે સંરેખિત કરવા માંગો છો.
HTML માળખું:
<div class="page-layout">
<aside>... sidebar content ...</aside>
<main>
<h1>Profile Settings</h1>
<form class="profile-form">
<label for="name">Full Name</label>
<input type="text" id="name" />
<label for="email">Email Address</label>
<input type="email" id="email" />
<label for="country">Country/Region</label>
<input type="text" id="country" />
</form>
</main>
</div>
કૉલમનર સબગ્રીડનો ઉપયોગ કરીને CSS:
.page-layout {
display: grid;
/* A common layout: sidebar, main content with two sub-columns */
grid-template-columns: 200px [main-start] 150px 1fr [main-end];
gap: 30px;
}
main {
grid-column: main-start / main-end; /* Span the two main content columns */
display: grid;
/* This is the key: inherit the parent's columns */
grid-template-columns: subgrid;
/* We can define our own rows as needed */
grid-auto-rows: min-content;
align-content: start;
}
main h1 {
/* Let the heading span both inherited columns */
grid-column: 1 / 3;
}
.profile-form {
/* This form is also a grid item within 'main' */
grid-column: 1 / 3;
display: grid;
/* And we make IT a subgrid too! */
grid-template-columns: subgrid;
gap: 15px;
grid-auto-rows: min-content;
}
/* Now place labels and inputs on the inherited page-level grid */
.profile-form label {
grid-column: 1; /* Align to the first column (150px from .page-layout) */
text-align: right;
}
.profile-form input {
grid-column: 2; /* Align to the second column (1fr from .page-layout) */
}
આ અદ્યતન ઉદાહરણમાં, આપણી પાસે નેસ્ટેડ સબગ્રીડ છે. `main` એલિમેન્ટ `.page-layout` માંથી કૉલમ ટ્રેક્સ વારસામાં મેળવવા માટે સબગ્રીડ બને છે. પછી, તેની અંદરનું `form` પણ સબગ્રીડ બને છે, તે જ ટ્રેક્સ ફરીથી વારસામાં મેળવે છે. આ ફોર્મના લેબલ્સ અને ઇનપુટ્સને સીધા મુખ્ય પેજ ગ્રીડ પર મૂકવાની મંજૂરી આપે છે, જે સુનિશ્ચિત કરે છે કે તેઓ ટોપ-લેવલ કન્ટેનરમાં વ્યાખ્યાયિત એકંદર પેજ માળખા સાથે સંપૂર્ણ રીતે સંરેખિત થાય છે. આ સ્તરનું કમ્પોઝિશનલ નિયંત્રણ અગાઉ શુદ્ધ CSS સાથે અકલ્પનીય હતું.
રો અને કૉલમ માટે સબગ્રીડ: એક-પરિમાણીય વિ. દ્વિ-પરિમાણીય વારસો
તમારે એક સાથે બંને અક્ષો માટે સબગ્રીડનો ઉપયોગ કરવાની જરૂર નથી. તમે ફક્ત કૉલમ માટે, ફક્ત રો માટે, અથવા બંને માટે ટ્રેક્સ વારસામાં મેળવવાનું પસંદ કરી શકો છો. આ તમારા લેઆઉટ પર ઝીણવટભર્યું નિયંત્રણ પૂરું પાડે છે.
કૉલમનર સબગ્રીડ્સ: `grid-template-columns: subgrid;`
આ કમ્પોનન્ટ્સ પર આઇટમ્સને આડી રીતે સંરેખિત કરવા માટે આદર્શ છે, જેમ કે ઉપરના ફોર્મ ઉદાહરણમાં. જ્યારે તમે `grid-template-columns: subgrid;` નો ઉપયોગ કરો છો, ત્યારે તમારે હજી પણ `auto`, `1fr`, અથવા પિક્સેલ મૂલ્યો (દા.ત., `grid-template-rows: auto 1fr;`) જેવા પ્રમાણભૂત મૂલ્યોનો ઉપયોગ કરીને તમારા પોતાના રો ટ્રેક્સ વ્યાખ્યાયિત કરવા જ જોઈએ. નેસ્ટેડ ગ્રીડ કૉલમ વારસામાં મેળવે છે પરંતુ તેની પોતાની રો સાઇઝિંગ અને ગણતરી માટે જવાબદાર છે.
રો-આધારિત સબગ્રીડ્સ: `grid-template-rows: subgrid;`
આ આઇટમ્સને ઊભી રીતે સંરેખિત કરવા માટે યોગ્ય છે, જેમ આપણે કાર્ડ કમ્પોનન્ટ ઉદાહરણમાં કર્યું હતું. તે સુનિશ્ચિત કરવા માટે ઉત્તમ છે કે વિવિધ કમ્પોનન્ટ્સના આડા વિભાગો લાઇન અપ થાય. `grid-template-rows: subgrid;` નો ઉપયોગ કરતી વખતે, તમારે તમારા પોતાના કૉલમ ટ્રેક્સ (દા.ત., `grid-template-columns: 1fr 1fr;`) વ્યાખ્યાયિત કરવા જ જોઈએ.
બંનેનું સંયોજન: સંપૂર્ણ વારસો
જ્યારે તમે `grid-template-columns: subgrid;` અને `grid-template-rows: subgrid;` બંને સેટ કરો છો, ત્યારે નેસ્ટેડ ગ્રીડ તેના નિયુક્ત વિસ્તારમાં પેરેન્ટ ગ્રીડ માટે સાચું પ્રોક્સી બની જાય છે. તે પોતાના કોઈપણ ટ્રેક્સ વ્યાખ્યાયિત કરતું નથી. આ એવા કમ્પોનન્ટ્સ માટે શક્તિશાળી છે જેમને પેરેન્ટ ગ્રીડના એક ભાગમાં સખત રીતે મર્યાદિત રહેવાની જરૂર હોય છે, જ્યારે તેમના ચિલ્ડ્રનને તે વારસાગત ગ્રીડ માળખા પર મૂકવાની સંપૂર્ણ સ્વતંત્રતા આપે છે.
ડેશબોર્ડ વિજેટનો વિચાર કરો. વિજેટ પોતે મુખ્ય ડેશબોર્ડ ગ્રીડના 3 કૉલમ અને 2 રોમાં ફેલાયેલું હોઈ શકે છે. વિજેટને સંપૂર્ણ સબગ્રીડ બનાવીને, વિજેટની અંદરના એલિમેન્ટ્સ (જેમ કે ચાર્ટ શીર્ષક, ચાર્ટ પોતે, અને એક લેજન્ડ) તે 3 કૉલમ અને 2 રો પર ચોક્કસ રીતે મૂકી શકાય છે, જે નજીકના વિજેટ્સમાંના એલિમેન્ટ્સ સાથે સંરેખિત થાય છે.
અદ્યતન ખ્યાલો અને સૂક્ષ્મતા
જેમ જેમ તમે સબગ્રીડ સાથે વધુ આરામદાયક બનશો, તેમ તમે તેના કેટલાક વધુ સૂક્ષ્મ અને શક્તિશાળી પાસાઓનો સામનો કરશો.
સબગ્રીડ અને `gap`
પેરેન્ટ ગ્રીડ પરની `gap` પ્રોપર્ટી સબગ્રીડ દ્વારા વારસામાં મળે છે. ટ્રેક્સ વચ્ચેની જગ્યા ગ્રીડ વ્યાખ્યાનો ભાગ છે. આ સામાન્ય રીતે તમે જે ઇચ્છો છો તે જ હોય છે, કારણ કે તે સમગ્ર લેઆઉટમાં સુસંગત અંતર જાળવી રાખે છે. જોકે, તમે સબગ્રીડ કન્ટેનર પર જ `gap` સ્પષ્ટ કરી શકો છો. આ વારસાગત ગેપમાં ઉમેરો કરશે, જે એક વર્તન છે જેના વિશે ધ્યાન રાખવું જોઈએ. મોટાભાગના કિસ્સાઓમાં, તમે પેરેન્ટ ગ્રીડ પર ગેપ વ્યાખ્યાયિત કરવા અને સબગ્રીડને સંપૂર્ણ સુસંગતતા માટે તેને વારસામાં લેવા દેવા માંગશો.
સબગ્રીડ સંદર્ભમાં સાઇઝિંગ અને સ્પાનિંગ
આ સૌથી શક્તિશાળી સુવિધાઓમાંની એક છે. જ્યારે તમે સબગ્રીડની અંદર કોઈ આઇટમ મૂકો છો અને તેને બહુવિધ ટ્રેક્સ (દા.ત., `grid-column: span 2;`) પર ફેલાવવા માટે કહો છો, ત્યારે તે મૂળ પેરેન્ટ ગ્રીડના ટ્રેક્સ પર ફેલાય છે. તે સબગ્રીડ કન્ટેનરના બે ટ્રેક્સ પર ફેલાતું નથી; તે સબગ્રીડને વારસામાં મળેલા બે ટ્રેક્સ પર ફેલાય છે.
આ અકલ્પનીય કમ્પોઝિશનલ સુગમતા માટે પરવાનગી આપે છે. DOM ટ્રીમાં ઊંડે રહેલા એલિમેન્ટને ઉચ્ચ-સ્તરના પેજ માળખા સાથે સંરેખિત અને ફેલાવી શકાય છે, જે તેના તાત્કાલિક કન્ટેનરની દ્રશ્ય સીમાઓમાંથી નિયંત્રિત અને અનુમાનિત રીતે બહાર નીકળે છે. આ ગતિશીલ, મેગેઝિન-શૈલીના લેઆઉટ બનાવવા માટે ઉત્તમ છે જ્યાં એક છબી મુખ્ય લેખ ગ્રીડના કેટલાક કૉલમમાં ફેલાઈ શકે છે, ભલે તે `figure` એલિમેન્ટની અંદર નેસ્ટેડ હોય.
ઍક્સેસિબિલિટી વિચારણાઓ
CSS ગ્રીડના મહાન લાભોમાંનો એક, જે સબગ્રીડ સુધી વિસ્તરે છે, તે સ્રોત ક્રમ અને દ્રશ્ય પ્રસ્તુતિનું વિભાજન છે. સબગ્રીડ સાથે, તમે તાર્કિક અને સુલભ HTML દસ્તાવેજ માળખું (દા.ત., એક શીર્ષક પછી તેની સામગ્રી) જાળવી શકો છો, જ્યારે વધુ જટિલ અથવા સર્જનાત્મક દ્રશ્ય લેઆઉટ પ્રાપ્ત કરવા માટે ગ્રીડનો ઉપયોગ કરી શકો છો.
કારણ કે સબગ્રીડ તમને લેઆઉટ હેક્સ ટાળવામાં મદદ કરે છે, તે ઘણીવાર સ્વચ્છ HTML તરફ દોરી જાય છે. એક સ્ક્રીન રીડર તાર્કિક દસ્તાવેજમાંથી પસાર થશે, જ્યારે દ્રશ્ય વપરાશકર્તા સંપૂર્ણ રીતે સંરેખિત ડિઝાઇન જોશે. ઉદાહરણ તરીકે, આપણા કાર્ડ લેઆઉટમાં, દરેક કાર્ડ માટેનું HTML એક સ્વ-નિર્ભર, તાર્કિક એકમ (`h3` -> `p` -> `button`) રહે છે. સબગ્રીડ ફક્ત આ એકમો વચ્ચેના દ્રશ્ય સંરેખણને સંકલન કરે છે, દસ્તાવેજના પ્રવાહને બદલ્યા વિના, જે ઍક્સેસિબિલિટી માટે એક મોટી જીત છે અને આધુનિક વેબ ડેવલપમેન્ટનો મુખ્ય સિદ્ધાંત છે.
CSS લેઆઉટનું ભવિષ્ય: ઇકોસિસ્ટમમાં સબગ્રીડનું સ્થાન
સબગ્રીડ એ ફ્લેક્સબોક્સ અથવા નિયમિત CSS ગ્રીડનો વિકલ્પ નથી. તે એક શક્તિશાળી ઉન્નતીકરણ છે જે એક વિશિષ્ટ, નિર્ણાયક અંતર ભરે છે. આધુનિક CSS લેઆઉટ ઇકોસિસ્ટમ કામ માટે યોગ્ય સાધનનો ઉપયોગ કરવા વિશે છે:
- Flexbox: એક-પરિમાણીય લેઆઉટ, એક જ અક્ષ પર જગ્યાનું વિતરણ કરવા અને કન્ટેનરની અંદર આઇટમ્સને સંરેખિત કરવા માટે શ્રેષ્ઠ છે. નેવિગેશન બાર, બટન જૂથો અને સરળ કમ્પોનન્ટ આંતરિક માટે યોગ્ય.
- CSS Grid: દ્વિ-પરિમાણીય પેજ-લેવલ લેઆઉટ, રો અને કૉલમ વચ્ચે સંબંધો બનાવવા માટે શ્રેષ્ઠ છે. તમારા એકંદર પેજ માળખાનો પાયો.
- CSS Subgrid: નેસ્ટેડ કમ્પોનન્ટ્સ અને મુખ્ય પેજ ગ્રીડ વચ્ચેનો સેતુ. તે એ સાધન છે જેના માટે તમે ત્યારે પહોંચો છો જ્યારે ગ્રીડ આઇટમની અંદરની આઇટમ્સને તેની બહારની આઇટમ્સ સાથે સંરેખિત કરવાની જરૂર હોય.
આગળ જોતાં, સબગ્રીડ અન્ય આધુનિક CSS સુવિધાઓ જેમ કે કન્ટેનર ક્વેરીઝ સાથે સુંદર રીતે કામ કરે છે. તમારી પાસે એક કમ્પોનન્ટ હોઈ શકે છે જે જ્યારે તેનું કન્ટેનર પહોળું હોય ત્યારે સબગ્રીડ લેઆઉટ અપનાવે છે, પરંતુ સાંકડા કન્ટેનરમાં સરળ બ્લોક અથવા ફ્લેક્સ લેઆઉટમાં સ્ટેક થાય છે. મેક્રો-લેવલ લેઆઉટ (ગ્રીડ), કમ્પોનન્ટ-લેવલ સંરેખણ (સબગ્રીડ), અને કન્ટેનર-અવેર રિસ્પોન્સિવનેસ (કન્ટેનર ક્વેરીઝ)નું આ સંયોજન ફ્રન્ટ-એન્ડ ડેવલપર્સને વેબ ઇન્ટરફેસની આગામી પેઢી બનાવવા માટે એક અત્યંત શક્તિશાળી અને અભિવ્યક્ત ટૂલકિટ આપે છે.
નિષ્કર્ષ: સંરેખિત કમ્પોઝિશનની શક્તિને અપનાવો
CSS સબગ્રીડ માત્ર એક નવી સુવિધા કરતાં વધુ છે; તે વેબ પર જટિલ લેઆઉટ કેવી રીતે કમ્પોઝ કરી શકીએ તે અંગેના દૃષ્ટિકોણમાં પરિવર્તન છે. તે એક લાંબા સમયથી ચાલી આવતી સમસ્યાને એક સુંદર અને સાહજિક ઉકેલ સાથે હલ કરે છે, જે સ્વચ્છ કોડ, વધુ જાળવી શકાય તેવી સ્ટાઇલશીટ્સ અને દ્રશ્યરૂપે સંપૂર્ણ ડિઝાઇનને પ્રોત્સાહન આપે છે.
નેસ્ટેડ ગ્રીડને તેમના પેરેન્ટ્સના લેઆઉટમાં ભાગ લેવાની મંજૂરી આપીને, સબગ્રીડ અમને આ માટે સશક્ત બનાવે છે:
- સંપૂર્ણ સંરેખણ પ્રાપ્ત કરો: ખાતરી કરો કે અલગ કમ્પોનન્ટ્સમાંના એલિમેન્ટ્સ હેક્સ અથવા JavaScript વિના દોષરહિત રીતે સંરેખિત થાય.
- DRYer કોડ લખો: તમારી પ્રાથમિક ગ્રીડ માળખું એકવાર વ્યાખ્યાયિત કરો અને નેસ્ટેડ એલિમેન્ટ્સને તે વારસામાં મેળવવા દો, પુનરાવર્તિત ટ્રેક વ્યાખ્યાઓ ટાળો.
- જાળવણીક્ષમતામાં સુધારો કરો: લેઆઉટ તર્ક પેરેન્ટ ગ્રીડમાં કેન્દ્રિત છે, જે અપડેટ્સ અને રિસ્પોન્સિવ ગોઠવણોને ખૂબ સરળ બનાવે છે.
- ઍક્સેસિબિલિટીમાં વધારો કરો: તાર્કિક અને સિમેન્ટિક સ્રોત ક્રમ જાળવી રાખીને અત્યાધુનિક દ્રશ્ય લેઆઉટ બનાવો.
વ્યાપક બ્રાઉઝર સપોર્ટ સાથે, હવે વિશ્વભરના ડેવલપર્સ અને ડિઝાઇનરો માટે સબગ્રીડને તેમના વર્કફ્લોમાં અપનાવવાનો યોગ્ય સમય છે. ક્રોસ-એલિમેન્ટ સંરેખણથી લાભ મેળવતા કમ્પોનન્ટ્સને ઓળખીને પ્રારંભ કરો, રો અને કૉલમ વારસા સાથે પ્રયોગ કરો, અને એવા લેઆઉટ બનાવવાનો સંતોષ અનુભવો જે પડદા પાછળ એટલા જ મજબૂત અને તાર્કિક છે જેટલા તેઓ સ્ક્રીન પર સુંદર છે. સમાધાનકારી નેસ્ટેડ લેઆઉટનો યુગ સમાપ્ત થયો છે; અદ્યતન, સંરેખિત કમ્પોઝિશનનો યુગ ખરેખર શરૂ થયો છે.