CSS Asoslari - 8-dars
Margin collapsing va normal flow tushunchalarini o'rganing. Margin collapsing qachon va qanday ishlashini, normal flow nima ekanligini va qachon buzilishini tushuning.
8-dars
O'zing nomla
Bu darsda margin collapsing va normal flow tushunchalarini o'rganamiz.
1. Margin collapsing nima?
๐ง Margin collapsing degani nima?
Margin collapsing โ bu holat:
Ikki yoki undan ortiq vertical marginlar qo'shib ketmaydi, balki eng kattasi yutib ketadi.
โ Bu faqat vertikal (top/bottom) marginlarda bo'ladi โ Horizontal (left/right) marginlar hech qachon collapse bo'lmaydi
๐ฆ 1-holat: Ketma-ket elementlar
<div class="a"></div>
<div class="b"></div>
.a {
margin-bottom: 30px;
}
.b {
margin-top: 20px;
}
โ Savol: orasi nechchi px?
โ 30 + 20 = 50px emas โ 30px
๐ Kattasi yutdi โ 30px
๐งฑ 2-holat: Ota va bola (eng chalkash joy)
<div class="parent">
<div class="child"></div>
</div>
.parent {
background: lightgray;
}
.child {
margin-top: 40px;
}
โ Savol: bola pastga tushadimi?
โ Yo'q ๐ Ota element yuqoridan siljiydi
Bu ko'pchilikni hayron qoldiradi ๐ต
Nega shunday?
Sababi:
- parent'da border yo'q
- parent'da padding yo'q
- normal flow
๐ Shuning uchun:
child'ning margin-topi
parent'ning margin-topi bilan collapse bo'ladi
๐งจ 3-holat: Bo'sh elementlar
<div class="a"></div>
<div class="b"></div>
.a {
margin-bottom: 40px;
}
.b {
margin-top: 30px;
}
Agar ichida content bo'lmasa ham:
- baribir collapse bo'ladi
- faqat kattasi qoladi
โ Qachon margin collapse bo'ladi?
Faqat agar:
- elementlar normal flowda bo'lsa
- vertical margin bo'lsa
- orasida border / padding / inline content bo'lmasa
โ Qachon collapse bo'lmaydi?
Mana oltin ro'yxat ๐
Margin collapse bo'lmaydi, agar:
- Element
display: flexyokigridbo'lsa - Element
position: absoluteyokifixedbo'lsa - Ota elementda padding bo'lsa
- Ota elementda border bo'lsa
- Ota element Block Formatting Context (BFC) yaratsa
- Horizontal margin bo'lsa (
margin-left/right)
2. Normal flow degani nima?
๐ง Normal flow nima?
Normal flow โ bu brauzerning default joylashtirish qoidasi.
Ya'ni:
Agar sen CSS bilan aralashmasang, brauzer elementlarni o'zi qanday joylashtiradi โ mana shu normal flow.
๐ฆ Normal flow'da elementlar qanday joylashadi?
1๏ธโฃ Block elementlar
Masalan: div, p, section, article
๐ Qoidalar:
- Yangi qatordan boshlanadi
- Ota elementning butun enini egallaydi
- Vertikal ketma-ket joylashadi
<div>A</div>
<div>B</div>
Natija:
A
B
2๏ธโฃ Inline elementlar
Masalan: span, a, strong
๐ Qoidalar:
- Yonma-yon joylashadi
- Faqat content joyini egallaydi
- Yangi qator ochmaydi
<span>A</span>
<span>B</span>
Natija:
A B
โ ๏ธ Muhim farq (ko'p chalkashadi)
Normal flow = position: static holat.
Agar element:
position: absoluteposition: fixed
bo'lsa โ โ normal flow'dan chiqadi.
๐งฑ Normal flow'da margin qanday ishlaydi?
-
Block elementlar orasida โ vertical margin
-
Inline elementlar orasida โ horizontal joy
Margin collapsing:
- faqat normal flowda bo'ladi
- shuning uchun oldingi darslar shu yerga bog'langan
โ "Normal flow"ni buzadigan narsalar
Agar yozsang:
.parent {
display: flex;
}
yoki
.parent {
display: grid;
}
๐ Endi:
- normal flow o'chadi
- yangi layout qoidasi ishga tushadi
Flex va Grid โ bu normal flow o'rnini bosuvchi layout engine.
๐ Misol: Nega margin-top ishlamayotgandek tuyuladi?
.child {
margin-top: 40px;
}
Agar:
- parent'da padding yo'q
- border yo'q
- normal flow bo'lsa
๐ Margin parent bilan collapse bo'ladi
๐ง Qachon normal flow'ni saqlash kerak?
- Oddiy matn sahifalari
- Blog postlar
- Article layout
Qachon buzish kerak?
- UI layout
- Card, navbar, sidebar
- App interfeyslar
๐ Xulosa
- Margin collapsing โ faqat vertical marginlarda bo'ladi
- Eng katta margin yutib ketadi
- Normal flow โ brauzerning default joylashtirish qoidasi
- Flex va Grid normal flow'ni buzadi
- Margin collapsing faqat normal flowda ishlaydi