Flexbox asoslari
O’tgan darsda elementlarni yonma-yon qo’yish
uchun inline-block dan foydalandik. U ishlaydi, lekin elementlarni tekislash
yoki ular orasidagi joyni teng taqsimlash qiyin kechadi.
Aynan shu muammolar uchun Flexbox yaratilgan.
Bu dars yakunida flex konteyner va elementni ajratasiz, main/cross o’qlarini
flex-direction ga qarab topasiz, elementlarni tekislab-taqsimlaysiz,
gap, flex, wrap bilan moslashuvchan qator va navbar qura olasiz.
Ikki daraja: konteyner va elementlar
Flexbox har doim ikki darajada ishlaydi:
- Konteyner — tashqi element, unga
display: flexberiladi. - Elementlar — konteyner ichidagi bevosita farzandlar.
Xossalarning bir qismi konteynerga, bir qismi elementlarga beriladi.
<div class="konteyner">
<div class="element">1</div>
<div class="element">2</div>
<div class="element">3</div>
</div>
<style>
.konteyner {
display: flex;
gap: 8px;
background: #f1f5f9;
padding: 10px;
}
.element {
background: #2563eb;
color: white;
padding: 20px;
border-radius: 4px;
}
</style>Bitta display: flex qatori bilan uchala element qatorga tizildi.
Yo’nalish — flex-direction
Standart holatda elementlar qator bo’ylab tiziladi, lekin buni o’zgartirsa bo’ladi:
<p>row (standart):</p>
<div class="konteyner row">
<div class="element">1</div>
<div class="element">2</div>
<div class="element">3</div>
</div>
<p>column:</p>
<div class="konteyner column">
<div class="element">1</div>
<div class="element">2</div>
<div class="element">3</div>
</div>
<style>
.konteyner {
display: flex;
background: #f1f5f9;
padding: 8px;
gap: 6px;
}
.row { flex-direction: row; }
.column { flex-direction: column; }
.element {
background: #2563eb;
color: white;
padding: 12px;
border-radius: 4px;
}
p { margin: 8px 0 4px; font-family: sans-serif; }
</style>justify-content — asosiy o’q bo’ylab
Bu xossa elementlarni yo’nalish bo’ylab taqsimlaydi. row holatida
gorizontal bo’yicha ishlaydi:
<p>flex-start</p>
<div class="k" style="justify-content: flex-start"><div class="e">A</div><div class="e">B</div></div>
<p>center</p>
<div class="k" style="justify-content: center"><div class="e">A</div><div class="e">B</div></div>
<p>space-between</p>
<div class="k" style="justify-content: space-between"><div class="e">A</div><div class="e">B</div></div>
<p>space-around</p>
<div class="k" style="justify-content: space-around"><div class="e">A</div><div class="e">B</div></div>
<style>
.k {
display: flex;
background: #f1f5f9;
padding: 6px;
margin-bottom: 6px;
}
.e {
background: #2563eb;
color: white;
padding: 10px 18px;
border-radius: 4px;
}
p { margin: 6px 0 2px; font-family: sans-serif; font-size: 13px; }
</style>| Qiymat | Natija |
|---|---|
flex-start |
Boshiga yig’iladi (standart) |
center |
Markazga yig’iladi |
flex-end |
Oxiriga yig’iladi |
space-between |
Chetlarga, orasi teng |
space-around |
Har element atrofi teng |
align-items — ko’ndalang o’q bo’ylab
justify-content yo’nalish bo’ylab ishlagani kabi, align-items unga
perpendikulyar yo’nalishda ishlaydi:
<p>align-items: center</p>
<div class="k" style="align-items: center">
<div class="e">Qisqa</div>
<div class="e">Ikki qatorli<br>matn</div>
</div>
<p>align-items: stretch (standart)</p>
<div class="k" style="align-items: stretch">
<div class="e">Qisqa</div>
<div class="e">Ikki qatorli<br>matn</div>
</div>
<style>
.k {
display: flex;
gap: 8px;
background: #f1f5f9;
padding: 8px;
height: 90px;
margin-bottom: 8px;
}
.e {
background: #2563eb;
color: white;
padding: 10px;
border-radius: 4px;
}
p { margin: 6px 0 2px; font-family: sans-serif; font-size: 13px; }
</style>gap — elementlar orasi
Elementlar orasidagi masofani margin bilan emas, gap bilan berish qulay:
<div class="k">
<div class="e">1</div>
<div class="e">2</div>
<div class="e">3</div>
</div>
<style>
.k {
display: flex;
gap: 20px;
background: #f1f5f9;
padding: 10px;
}
.e {
background: #2563eb;
color: white;
padding: 14px 20px;
border-radius: 4px;
}
</style>gap faqat elementlar orasiga joy qo’yadi — chetlarda ortiqcha bo’shliq
qoldirmaydi. margin bilan bunga erishish uchun qo’shimcha hiylalar kerak
bo’lardi.
Element kengligi — flex
Flex elementning bo’sh joyni qanday egallashi va tor joyda qanday qisqarishini
flex-grow, flex-shrink va flex-basis boshqaradi. Ko’p ishlatiladigan
qisqa yozuv:
.element {
flex: 1 1 220px;
}
Bu element 220px bazadan boshlanishi, bo’sh joy bo’lsa o’sishi va zarur bo’lsa
qisqarishi mumkinligini bildiradi. flex: 1 teng ulushli ustunlar uchun qulay,
ammo ichki uzun so’z yoki rasm minimal kenglikni oshirishi mumkin.
flex-wrap — qatorga sig’masa
Standart nowrap holatida elementlar imkon qadar qisqarib, bir qatorda
qolishga urinadi; minimal kenglik yoki uzun content bo’lsa overflow ham yuz
berishi mumkin. flex-wrap keyingi qatorga o’tishga ruxsat beradi:
<div class="k">
<div class="e">Element 1</div>
<div class="e">Element 2</div>
<div class="e">Element 3</div>
<div class="e">Element 4</div>
<div class="e">Element 5</div>
</div>
<style>
.k {
display: flex;
flex-wrap: wrap;
gap: 8px;
background: #f1f5f9;
padding: 10px;
}
.e {
background: #2563eb;
color: white;
padding: 14px;
border-radius: 4px;
width: 120px;
}
</style>Bu xossa responsiv dizayn uchun muhim — oyna torayganda elementlar o’zi qatorlarga bo’linadi.
Amaliy misol: sayt sarlavhasi
Flexbox eng ko’p ishlatiladigan joy — sahifa yuqorisidagi navbar:
<header class="bosh">
<div class="logo">LearnCode</div>
<nav class="menyu">
<a href="#">Darslar</a>
<a href="#">Bo'limlar</a>
<a href="#">Aloqa</a>
</nav>
</header>
<style>
.bosh {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
background: #1e293b;
padding: 14px 20px;
border-radius: 6px;
}
.logo {
color: white;
font-weight: bold;
font-size: 18px;
font-family: sans-serif;
}
.menyu {
display: flex;
flex-wrap: wrap;
gap: 18px;
}
.menyu a {
color: #cbd5e1;
text-decoration: none;
font-family: sans-serif;
font-size: 14px;
}
.menyu a:focus-visible {
outline: 3px solid #38bdf8;
outline-offset: 3px;
}
</style>Bu yerda Flexbox ikki marta ishlatildi: tashqi header logotip bilan menyuni
chetlarga ajratdi, ichki nav esa havolalarni tizdi. wrap tor joyda
bandlarning konteynerdan chiqib ketishini kamaytiradi; murakkab mobil menyuda
alohida ochish tugmasi va klaviatura boshqaruvi ham kerak bo’ladi.
Amaliy mashq
Uch kartali qator yarating. Konteynerga flex, gap va wrap, kartalarga
flex: 1 1 220px bering. Main va cross o’qlarini izohlang, so’ng
flex-direction: column qilib, justify-content va align-items qaysi
yo’nalishda ishlashini qayta kuzating.
Qisqacha xulosa
- Flexbox — elementlarni bir o’lchamda joylashtirish tizimi.
- Konteynerga
display: flexberiladi, farzandlar avtomatik tiziladi. flex-direction— yo’nalish:rowyokicolumn.justify-content— yo’nalish bo’ylab taqsimlash.align-items— ko’ndalang yo’nalish bo’ylab tekislash.- Markazlashtirish:
justify-content: center+align-items: center. gap— elementlar orasidagi masofa;flex-wrap: wrap— qatorga o’tish.flexelementning o’sish, qisqarish va boshlang’ich o’lchamini boshqaradi.
Keyingi darsda Grid asoslari — ikki o’lchamli, ya’ni qator va ustun bilan birga ishlaydigan joylashuv tizimini ko’ramiz.