CSS Grid
CSS Grid โ elementlarni qator VA ustun bo'yicha bir vaqtda joylashtirish uchun mo'ljallangan eng kuchli CSS joylashuv tizimi. Flexbox bir yo'nalishda ishlagani (qator YOKI ustun) uchun murakkab jadval kabi tuzilmalarni yasash qiyin edi. Grid esa haqiqiy ikki o'lchamli "panjara" yaratadi โ bu bilan butun sahifa maketini (layout) oson qurish mumkin.
Grid asoslari
Konteynerga display: grid berasiz, so'ng ustunlar va qatorlarni belgilaysiz. Panjara ustun va qatorlardan tashkil topadi, ularning kesishmasi โ katak (cell). Farzand elementlar shu kataklarga joylashadi.
<!-- HTML -->
<div class="panjara">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
</div>
grid-template-columns โ ustunlarni belgilash
Bu xossa nechta ustun bo'lishini va ularning kengligini belgilaydi. Har bir qiymat โ bitta ustun kengligi:
/* 3 ta ustun: har biri 100px */
.panjara {
display: grid;
grid-template-columns: 100px 100px 100px;
}
Farzandlar bu 3 ustunga birin-ketin joylashadi. To'rtinchi element avtomatik yangi qatorga o'tadi.
fr birligi โ moslashuvchan ulush
fr (fraction โ ulush) โ Grid'ning maxsus birligi. U mavjud bo'sh joyni ulushlarga bo'ladi. Masalan 1fr 1fr 1fr โ joyni teng uch ulushga bo'ladi, har bir ustun teng kenglikda:
/* 3 ta teng ustun */
.panjara {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
}
/* O'rtadagi ustun 2 barobar keng */
.panjara2 {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
}
fr โ piksellardan ustun, chunki u moslashuvchan: ekran o'lchami o'zgarganda ustunlar avtomatik moslashadi. Aralashtirish ham mumkin: grid-template-columns: 200px 1fr; โ birinchi ustun qat'iy 200px, ikkinchisi qolgan barcha joyni egallaydi (masalan, yon panel + asosiy kontent).repeat() โ takrorlashni qisqartirish
Bir xil ustunni ko'p marta yozish o'rniga repeat() funksiyasidan foydalaning. repeat(3, 1fr) โ "1fr'ni 3 marta takrorla" degani:
/* Bu ikkisi bir xil: */
grid-template-columns: 1fr 1fr 1fr 1fr;
grid-template-columns: repeat(4, 1fr);
/* 12 ustunli maket (juda keng tarqalgan) */
.panjara {
display: grid;
grid-template-columns: repeat(12, 1fr);
}
minmax() โ eng kichik va eng katta o'lcham
minmax(min, max) ustunning eng kichik va eng katta kengligini belgilaydi. Bu responsive dizaynda juda foydali. Quyidagi mashhur uslub โ ekran kengligiga qarab ustunlar sonini avtomatik moslaydigan galereya yaratadi:
.galereya {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 20px;
}
Bu shunday o'qiladi: "Har bir ustun kamida 200px bo'lsin, joy bo'lsa 1fr'gacha cho'zilsin; nechta sig'sa, shuncha ustun avtomatik yaratilsin". Ekran torayganda ustunlar soni o'z-o'zidan kamayadi โ media query'siz responsive galereya!
grid-template-rows va gap
Ustunlar kabi qatorlar balandligini grid-template-rows belgilaydi. gap esa kataklar orasidagi bo'shliqni beradi (Flexbox'dagi kabi):
.panjara {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: 100px 200px;
gap: 15px; /* barcha kataklar orasi */
/* yoki alohida: */
/* gap: 10px 20px; qator-oralar 10px, ustun-oralar 20px */
}
Elementlarni joylashtirish: grid-column va grid-row
Grid'ning kuchli jihati โ bitta elementni bir necha katakka cho'zish mumkin. Buni grid-column va grid-row orqali qilasiz. Panjara chiziqlari 1'dan boshlab raqamlanadi.
/* Element 1-ustundan 3-ustungacha (2 ustun eni) */
.katta {
grid-column: 1 / 3;
}
/* span bilan: 2 ustun eni egalla */
.keng {
grid-column: span 2;
}
/* Ham ustun, ham qator bo'yicha cho'zish */
.ulkan {
grid-column: 1 / 3;
grid-row: 1 / 3;
}
grid-column: 1 / 3 โ "1-chiziqdan 3-chiziqgacha", ya'ni ikki ustunni egallaydi. Diqqat: bu chiziq raqamlari, katak raqami emas. 3 ta ustunlik panjarada 4 ta vertikal chiziq bo'ladi (1, 2, 3, 4).Amaliy misol: sahifa maketi
Grid butun sahifa maketini yasashga ideal: tepada sarlavha (header), chapda yon panel, o'rtada kontent, pastda futer. Bularni grid-template-areas bilan nomli hududlar orqali chizish mumkin:
.sahifa {
display: grid;
grid-template-columns: 200px 1fr;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"header header"
"sidebar kontent"
"footer footer";
gap: 10px;
min-height: 100vh;
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.kontent { grid-area: kontent; }
.footer { grid-area: footer; }
Grid va Flexbox: qaysi birini tanlash?
Ikkalasi ham joylashuv uchun, lekin ular turli vazifalar uchun optimal:
- Flexbox โ bir o'lchamli: elementlarni bir qatorga yoki bir ustunga terish. Menyu, tugmalar guruhi, karta ichidagi elementlar uchun;
- Grid โ ikki o'lchamli: qator va ustun birga. Butun sahifa maketi, galereya, jadval kabi tuzilmalar uchun;
- Mazmun boshqarsa (element o'z o'lchamiga qarab joylashsin) → Flexbox;
- Maket boshqarsa (avval panjara chizib, keyin to'ldirsangiz) → Grid.
Xulosa
- CSS Grid โ ikki o'lchamli (qator + ustun) joylashuv tizimi;
display: grid+grid-template-columnsbilan ustunlarni belgilaysiz;frโ moslashuvchan ulush birligi (teng ustunlar uchun ideal);repeat(n, 1fr)โ takrorlashni qisqartiradi;minmax()+auto-fillโ media query'siz responsive galereya;gapโ kataklar orasidagi bo'shliq;grid-column/grid-rowโ elementni bir necha katakka cho'zadi;- Grid โ sahifa maketi uchun, Flexbox โ komponentlar uchun; ular birga ishlaydi.