Flexbox nima va nima uchun kerak
Muammodan boshlaylik
Uch vazifa — har bir veb-sahifada uchraydi:
- Menyu: logo chapda, havolalar o'ngda, hammasi bir qatorda
- Uchta kartochka yonma-yon, bir xil balandlikda, matni turlicha uzunlikda bo'lsa ham
- Matnni blokning o'rtasiga — gorizontal va vertikal — joylash
Flexbox gacha bularning har biri hiyla edi: float lar, display: table, line-height bilan o'ynash, manfiy marginlar. "CSS da elementni vertikal markazlash" — yillar davomida dasturchilarning eng mashhur hazili edi.
Flexbox bularning hammasini bir necha qator bilan hal qiladi.
Flexbox — bir o'lchamli layout
Flexbox (Flexible Box Layout) — elementlarni bitta yo'nalishda — qator yoki ustun bo'ylab — joylashtirish va ular orasida bo'sh joyni taqsimlash tizimi.
.menu {
display: flex;
}
Shu bitta qator bilan .menu ning bevosita bolalari yonma-yon qatorga tiziladi.
<nav class="menu">
<a href="/">Bosh sahifa</a>
<a href="/kurslar">Kurslar</a>
<a href="/donat">Donat</a>
</nav>
display: block (standart) display: flex
┌───────────────────┐ ┌─────────────────────────────────────┐
│ Bosh sahifa │ │ Bosh sahifa │ Kurslar │ Donat │
├───────────────────┤ └─────────────────────────────────────┘
│ Kurslar │
├───────────────────┤
│ Donat │
└───────────────────┘
Ikki rol: konteyner va elementlar
| Rol | Kim | Xususiyatlari |
|---|---|---|
| Flex container | display: flex berilgan element |
Yo'nalish, tekislash, gap, wrap (14–15-darslar) |
| Flex item | Konteynerning bevosita bolalari | O'sish, qisqarish, tartib (16-dars) |
[!WARNING] Flex faqat bevosita bolalarga ta'sir qiladi. Nevaralarga — yo'q. Agar ichki element ham flex bo'lishi kerak bo'lsa — unga ham
display: flexbering. Flex konteynerlarni ichma-ich qo'yish — odatiy holat.
Ikki o'q
Flexbox ning asosiy tushunchasi — ikki o'q:
cross axis (ko'ndalang o'q)
↓
┌──────────────────────────────────────┐
│ ┌──────┐ ┌──────┐ ┌──────┐ │
main → │ │ 1 │ │ 2 │ │ 3 │ │ → main axis (asosiy o'q)
axis │ └──────┘ └──────┘ └──────┘ │
└──────────────────────────────────────┘
- Main axis (asosiy o'q) — elementlar tiziladigan yo'nalish. Standartda — chapdan o'ngga
- Cross axis (ko'ndalang o'q) — unga perpendikulyar. Standartda — tepadan pastga
Barcha flex xususiyatlari shu ikki o'qqa nisbatan ishlaydi:
justify-content— asosiy o'q bo'yicha tekislashalign-items— ko'ndalang o'q bo'yicha tekislash
flex-direction: column qilsangiz — o'qlar almashadi: asosiy o'q vertikal bo'ladi (14-dars). Shuning uchun "justify — gorizontal, align — vertikal" deb yodlash xato; to'g'risi: "justify — asosiy o'q, align — ko'ndalang o'q".
Uch muammo — uch yechim
1. Menyu: logo chapda, havolalar o'ngda
.header {
display: flex;
justify-content: space-between;
align-items: center;
}
┌──────────────────────────────────────────────────┐
│ LOGO Kurslar Blog Kirish │
└──────────────────────────────────────────────────┘
2. Bir xil balandlikdagi kartochkalar
.cards {
display: flex;
gap: 24px;
}
Flex elementlar standart holatda ko'ndalang o'q bo'ylab cho'ziladi (align-items: stretch) — eng baland kartochka qancha bo'lsa, qolganlari ham shuncha. Qo'shimcha kod kerak emas.
3. Mukammal markazlash
.hero {
display: flex;
justify-content: center; /* gorizontal */
align-items: center; /* vertikal */
min-height: 100dvh;
}
Yillar davom etgan muammo — uch qator.
Flexbox yoki Grid?
| Flexbox | Grid (4-bo'lim) | |
|---|---|---|
| O'lchov | Bir o'lchamli — qator yoki ustun | Ikki o'lchamli — qator va ustun |
| Yondashuv | Kontentdan: elementlar o'z o'lchamiga qarab joylashadi | Joylashuvdan: avval to'r, keyin elementlar unga |
| Tipik ishlatilishi | Menyu, tugmalar guruhi, kartochka ichi, markazlash | Sahifa tuzilishi, galereyalar, dashboard |
Ular raqobatchi emas — birga ishlatiladi: sahifa tuzilishi — Grid, uning ichidagi komponentlar — Flexbox. Batafsil — 18-dars.
inline-flex
.badge {
display: inline-flex;
align-items: center;
gap: 4px;
}
inline-flex — konteyner ichi flex, lekin o'zi inline element kabi matn qatorida turadi (inline-block kabi, 7-dars). Ikonka + matn li tugmalar va belgilar uchun qulay.
Nima uchun shunday?
Nima uchun Flexbox paydo bo'lgunga qadar oddiy narsalar shunchalik qiyin edi?
Chunki CSS dastlab hujjatlar uchun yaratilgan: matn yuqoridan pastga oqadi, rasmlar matn ichida "suzadi" (float). Interfeys — menyular, panellar, tugmalar qatorlari — haqida hech kim o'ylamagan edi. Dasturchilar hujjat uchun mo'ljallangan vositalarni (float — aslida matnni rasm atrofida aylantirish uchun) layout uchun moslashtirishga majbur bo'lishdi — shuning uchun hamma narsa hiyla va mo'rt edi. Flexbox — CSS ning interfeys uchun maxsus yaratilgan birinchi layout tizimi: "bo'sh joyni taqsimla", "tekisla", "markazla" degan tushunchalar uning asosida. 2017 yildan barcha brauzerlarda ishlaydi va bugun deyarli har bir saytning asosi.
Xulosa
Eslab qoling:
display: flex— bevosita bolalarni qatorga tizadi- Konteyner (
display: flex) va elementlar (bevosita bolalar) - Ikki o'q: asosiy (tizilish yo'nalishi) va ko'ndalang
justify-content— asosiy o'q bo'yicha;align-items— ko'ndalang o'q bo'yicha- Standartda elementlar ko'ndalang o'q bo'ylab cho'ziladi — bir xil balandlik
- Markazlash:
justify-content: center+align-items: center - Flexbox — bir o'lchamli; Grid — ikki o'lchamli; ular birga ishlatiladi
inline-flex— matn qatoridagi flex konteyner
Keyingi dars
14-dars: Flex Container — flex-direction, flex-wrap, gap