Grid Item — grid-column, grid-row, span
Muammodan boshlaylik
Yangiliklar sahifasi: 4 ustunli to'r, lekin asosiy yangilik ikki ustun kenglikda va ikki qator balandlikda bo'lishi kerak. Yoki: galereyada ba'zi rasmlar boshqalardan kattaroq. Yoki: banner butun kenglikda, to'rning o'rtasida.
20-darsdagi grid-template-areas oldindan ma'lum tuzilma uchun yaxshi. Lekin elementlar soni o'zgaruvchan bo'lsa (yangiliklar, mahsulotlar) — har biri uchun zona yozib bo'lmaydi. Bu yerda elementning o'zi qancha joy olishini aytadi.
Chiziqlar bilan joylashtirish
18-darsdan: grid chiziqlari 1 dan raqamlanadi. 3 ustunli to'rda 4 ta vertikal chiziq bor:
1 2 3 4
│ │ │ │
├────────┼────────┼────────┤
│ │ │ │
.item {
grid-column: 1 / 3; /* 1-chiziqdan 3-chiziqqacha → 2 ustun */
grid-row: 1 / 2; /* 1-qator */
}
Format: boshlanish / tugash. Tugash chizig'i kirmaydi — 1 / 3 — 1 va 2-ustunlar.
To'liq yozuv:
.item {
grid-column-start: 1;
grid-column-end: 3;
grid-row-start: 1;
grid-row-end: 2;
}
Manfiy raqamlar — oxirdan sanash
.full-width {
grid-column: 1 / -1; /* birinchi chiziqdan OXIRGI chiziqqacha */
}
-1 — oxirgi chiziq, -2 — oxiridan ikkinchi. 1 / -1 — butun kenglik, ustunlar nechta bo'lishidan qat'i nazar. Darsning boshidagi banner:
.banner {
grid-column: 1 / -1;
}
To'r 3 ustunli bo'lsin yoki 12 — banner har doim to'liq kenglikda.
[!INFO] Manfiy raqamlar faqat aniq belgilangan (explicit) to'rda ishlaydi —
grid-template-columns/rowsbilan yaratilgan chiziqlarda. Avtomatik yaratilgan qatorlar (19-dars:grid-auto-rows) uchungrid-row: 1 / -1kutilganday ishlamaydi.
span — nechta katak
Ko'pincha "qayerdan" emas, "nechta" muhim:
.featured {
grid-column: span 2; /* 2 ustun kenglikda — qayerda tushsa ham */
grid-row: span 2; /* 2 qator balandlikda */
}
Darsning boshidagi asosiy yangilik:
.news {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-auto-rows: 200px;
gap: 16px;
}
.news-main {
grid-column: span 2;
grid-row: span 2;
}
┌─────────────────┬────────┬────────┐
│ │ 2 │ 3 │
│ asosiy (1) ├────────┼────────┤
│ │ 4 │ 5 │
├────────┬────────┼────────┼────────┤
│ 6 │ 7 │ 8 │ 9 │
└────────┴────────┴────────┴────────┘
Qolgan elementlar avtomatik bo'sh kataklarga joylashadi.
Aralash:
.item {
grid-column: 2 / span 3; /* 2-chiziqdan boshlab 3 ustun */
}
grid-area — to'rtta qiymat bitta joyda
grid-area — 20-darsda zona nomi uchun ishlatildi, lekin u chiziqlar bilan ham ishlaydi:
.item {
grid-area: 1 / 2 / 3 / 4;
/* row-start / column-start / row-end / column-end */
}
Tartibni eslab qolish qiyin, shuning uchun amalda grid-column va grid-row alohida yozilgani o'qishga osonroq.
Ustma-ust joylashtirish
Grid ning noyob imkoniyati: bir nechta element bitta katakda bo'lishi mumkin. Rasm ustida matn — position: absolute (23-dars) siz:
<figure class="hero">
<img src="tog.jpg" alt="Tog' manzarasi">
<figcaption>Chimyon tog'lari</figcaption>
</figure>
.hero {
display: grid;
}
.hero > * {
grid-area: 1 / 1; /* hammasi 1-qator, 1-ustunda */
}
.hero figcaption {
align-self: end; /* pastga */
padding: 24px;
color: white;
background: linear-gradient(transparent, rgb(0 0 0 / 0.7));
}
Afzalligi absolute ga nisbatan: konteyner eng katta elementga qarab o'lchanadi — matn uzun bo'lsa, blok o'zi kattalashadi va matn rasmdan chiqib ketmaydi.
Qaysi biri ustida turishi — HTML tartibi bo'yicha (keyingisi ustida) yoki z-index bilan (24-dars).
Bitta elementni tekislash
19-darsdagi justify-items / align-items ni bitta element uchun bekor qilish:
.item {
justify-self: center; /* katak ichida gorizontal o'rtada */
align-self: end; /* katak ichida pastda */
}
.badge {
place-self: start end; /* align-self + justify-self: yuqori o'ng burchakda */
}
order
Flexbox dagi kabi (16-dars) — avtomatik joylashuvdagi tartibni o'zgartiradi:
.item-promo {
order: -1; /* avtomatik joylashuvda birinchi */
}
Va xuddi Flexbox dagi kabi ogohlantirish: faqat vizual, klaviatura va ekran o'quvchilar HTML tartibida yuradi.
Amaliy misol: 12 ustunli to'r
Ko'p dizayn tizimlarining asosi (19-dars):
.grid-12 {
display: grid;
grid-template-columns: repeat(12, minmax(0, 1fr));
gap: 24px;
}
.col-12 { grid-column: span 12; }
.col-8 { grid-column: span 8; }
.col-6 { grid-column: span 6; }
.col-4 { grid-column: span 4; }
.col-3 { grid-column: span 3; }
<div class="grid-12">
<main class="col-8">Kontent</main>
<aside class="col-4">Sidebar</aside>
<div class="col-4">Kartochka</div>
<div class="col-4">Kartochka</div>
<div class="col-4">Kartochka</div>
</div>
Bootstrap ning col-md-8 class lari aynan shu g'oyani — Grid gacha float va Flexbox bilan — amalga oshirgan.
Nima uchun shunday?
Nima uchun grid chiziqlari 0 dan emas, 1 dan raqamlanadi — dasturlashda sanash odatda 0 dan boshlanadi-ku?
Chunki CSS dizaynerlar va sahifa mualliflari uchun ham yaratilgan, va odamlar chiziqlarni sanaganda tabiiy ravishda 1 dan boshlaydi: "birinchi chiziqdan uchinchi chiziqqacha". Bundan muhimroq qaror — elementlar kataklar bo'yicha emas, chiziqlar bo'yicha joylashtirilishi. "1-katakdan 2-katakkacha" noaniq (2-katak kiradimi?), "1-chiziqdan 3-chiziqqacha" esa aniq. Manfiy raqamlar (-1 — oxirgi chiziq) bilan esa siz to'rning o'lchamini bilmasdan ham "butun kenglik" deya olasiz — bu responsive dizaynda, ustunlar soni ekranga qarab o'zgarganda, juda qimmatli.
Xulosa
Eslab qoling:
- Chiziqlar 1 dan;
grid-column: 1 / 3— 1 va 2-ustunlar (tugash chizig'i kirmaydi) 1 / -1— butun kenglik, ustunlar sonidan qat'i nazarspan 2— 2 ta katak, qayerda tushsa ham;2 / span 3— aralashgrid-area: 1 / 1— bir nechta elementni bitta katakka (ustma-ust)justify-self,align-self,place-self— bitta elementni katak ichida tekislashorder— faqat vizual- 12 ustunli to'r:
repeat(12, minmax(0, 1fr))+span N
Keyingi dars
22-dars: Grid — auto-fill, auto-fit, minmax