11-bo‘lim
Box model
Har bir element - to'rtburchak: content, padding, border, margin. box-sizing va margin collapse muammosi.
Ushbu bo‘lim mundarijasi
CSS dagi har bir element - to'rtburchak quti. Box model bu qutining tuzilishini tushuntiradi va u CSS ning eng muhim tushunchasi.
To'rt qatlam #
| Qatlam | Vazifasi | Fon rangi tegadimi |
|---|---|---|
content | Matn, rasm | Ha |
padding | Mazmun bilan chegara orasi | Ha |
border | Chegara chizig'i | O'z rangi |
margin | Boshqa elementlar bilan masofa | Yo'q (shaffof) |
.karta {
width: 300px;
padding: 20px;
border: 2px solid #cbd5e1;
margin: 16px;
}
Bu element ekranda qancha joy egallaydi?
Kenglik = 300 (content) + 40 (padding) + 4 (border) = 344px
Egallagan joy = 344 + 32 (margin) = 376px
.ustun {
width: 50%;
padding: 20px;
}
Ikkita bunday ustunni yonma-yon qo'ysangiz, ular sig'maydi:
50% + 40px + 50% + 40px = 100% + 80px.
Buni box-sizing hal qiladi.
box-sizing: border-box #
/* Standart holat - muammoli */
.standart {
box-sizing: content-box;
width: 300px;
padding: 20px;
border: 2px solid;
/* Haqiqiy kenglik: 344px */
}
/* To'g'ri holat */
.togri {
box-sizing: border-box;
width: 300px;
padding: 20px;
border: 2px solid;
/* Haqiqiy kenglik: aynan 300px */
}
*,
*::before,
*::after {
box-sizing: border-box;
}
Bu bugungi kunda standart amaliyot. Barcha zamonaviy CSS freymvorklar (Bootstrap, Tailwind) shu qatorni o'z ichiga oladi.
padding va margin yozuvlari #
.blok {
/* 4 ta qiymat: yuqori, o'ng, past, chap (soat yo'nalishi) */
padding: 10px 20px 30px 40px;
/* 3 ta: yuqori, chap+o'ng, past */
padding: 10px 20px 30px;
/* 2 ta: yuqori+past, chap+o'ng */
padding: 10px 20px;
/* 1 ta: hamma tomon */
padding: 20px;
/* Alohida */
padding-top: 10px;
padding-right: 20px;
padding-bottom: 30px;
padding-left: 40px;
/* Zamonaviy (mantiqiy) xossalar */
padding-block: 10px; /* yuqori + past */
padding-inline: 20px; /* chap + o'ng */
}
Markazlashtirish #
.markaz {
width: 720px;
margin: 0 auto; /* chap va o'ng avtomatik - markazga tortadi */
}
/* Maksimal kenglik bilan - kichik ekranda ham to'g'ri ishlaydi */
.orash {
max-width: 1200px;
margin-inline: auto;
padding-inline: 1rem;
}
margin: auto faqat gorizontal markazlashtiradiVertikal markazlashtirish uchun auto ishlamaydi. Buning uchun Flexbox
(13-bo'lim) yoki Grid (14-bo'lim) kerak.
Margin collapse #
CSS ning eng ko'p chalkashtiradigan xatti-harakati:
<div class="birinchi">Birinchi blok</div>
<div class="ikkinchi">Ikkinchi blok</div>
.birinchi { margin-bottom: 30px; }
.ikkinchi { margin-top: 20px; }
Ular orasidagi masofa qancha? 50px emas, 30px.
- Faqat vertikal (yuqori/past) margin lar. Gorizontal hech qachon birlashmaydi.
- Faqat oddiy oqimda turgan elementlarda.
Birlashmaydi:
- Flex yoki Grid konteyner ichida
position: absolutebo'lsaoverflowvisibledan boshqa bo'lsa- Orasida
paddingyokiborderbo'lsa
Eng oddiy yechim: bir tomonlama margin ishlating - masalan faqat margin-bottom.
Yoki umuman Flexbox gap ga o'ting (13-bo'lim).
Chegara (border) #
.blok {
/* Qisqa yozuv: qalinlik, uslub, rang */
border: 2px solid #cbd5e1;
/* Alohida tomonlar */
border-top: 3px solid #2563eb;
border-bottom: 1px dashed #94a3b8;
/* Yumaloqlash */
border-radius: 12px;
border-radius: 12px 0 12px 0; /* har bir burchak alohida */
border-radius: 50%; /* doira */
}
border-style | Ko'rinishi |
|---|---|
solid | To'liq chiziq |
dashed | Chiziqcha |
dotted | Nuqta |
double | Ikki chiziq |
none | Yo'q |
outline - chegaraga o'xshash, lekin joy egallamaydibutton:focus-visible {
outline: 2px solid #2563eb;
outline-offset: 2px;
}
outline box model ga kirmaydi - u element o'lchamini o'zgartirmaydi.
Shuning uchun fokus ko'rsatkichi uchun ideal.
Muhim: outline: none yozib fokus ko'rsatkichini o'chirmang - klaviatura bilan
ishlaydigan foydalanuvchilar qayerda ekanini bilmay qoladi.
O'lcham xossalari #
.blok {
width: 300px;
height: 200px;
min-width: 200px; /* bundan kichik bo'lmaydi */
max-width: 100%; /* bundan katta bo'lmaydi */
min-height: 100vh; /* kamida ekran balandligi */
max-height: 400px;
/* Zamonaviy: mos keladigan o'lcham */
width: fit-content;
width: min-content;
width: max-content;
}
max-width: 100% - rasmlar uchun majburiyimg {
max-width: 100%;
height: auto;
}
Usiz katta rasm konteynerdan tashqariga chiqib ketadi va sahifada gorizontal aylantirish paydo bo'ladi.
Overflow #
.blok {
overflow: visible; /* standart - tashqariga chiqadi */
overflow: hidden; /* kesiladi */
overflow: scroll; /* har doim aylantirgich */
overflow: auto; /* kerak bo'lganda aylantirgich */
overflow-x: auto; /* faqat gorizontal */
overflow-y: hidden;
}
Amaliy misol: kartochka #
*, *::before, *::after {
box-sizing: border-box;
}
.karta {
max-width: 340px;
background: #ffffff;
border: 1px solid #e2e8f0;
border-radius: 12px;
overflow: hidden; /* rasm burchaklarini yumaloqlaydi */
box-shadow: 0 1px 3px rgba(15, 23, 42, 0.08);
}
.karta__rasm {
display: block;
width: 100%;
height: 180px;
object-fit: cover; /* nisbatni buzmasdan qoplaydi */
}
.karta__tana {
padding: 1.25rem;
}
.karta__sarlavha {
margin: 0 0 0.5rem;
font-size: 1.15rem;
line-height: 1.3;
}
.karta__matn {
margin: 0 0 1rem;
color: #64748b;
font-size: 0.925rem;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}
.karta__tugma {
display: inline-block;
padding: 0.6rem 1.2rem;
background: #2563eb;
color: #ffffff;
border: none;
border-radius: 8px;
font-weight: 600;
text-decoration: none;
cursor: pointer;
}
.karta__tugma:hover {
background: #1d4ed8;
}
.karta__past {
padding: 0.9rem 1.25rem;
border-top: 1px solid #e2e8f0;
background: #f8fafc;
font-size: 0.825rem;
color: #94a3b8;
}
<article class="karta">
<img class="karta__rasm" src="rasmlar/python.jpg" alt="Python darsligi muqovasi">
<div class="karta__tana">
<h3 class="karta__sarlavha">Python dasturlash tili</h3>
<p class="karta__matn">
Noldan boshlab amaliy loyihagacha - 20 bosqichli to'liq qo'llanma.
Barcha misollar o'zbek tilida yozilgan.
</p>
<a class="karta__tugma" href="/darslik/python">O'qishni boshlash</a>
</div>
<div class="karta__past">20 bo'lim · 8 soat</div>
</article>
object-fit - rasmlar uchun juda foydaliTurli o'lchamdagi rasmlarni bir xil o'lchamda ko'rsatish kerak bo'lganda:
cover- qoplaydi, chetlari kesiladi (nisbat saqlanadi)contain- to'liq sig'adi, bo'sh joy qoladifill- cho'zadi, nisbat buziladi
- Barcha loyihalaringizga
box-sizing: border-boxqo'shing. - Uchta kartochka yarating: rasm, sarlavha, matn va tugma bilan.
- DevTools da elementni tanlab, Computed bo'limidagi box model diagrammasini ko'ring.
padding: 20pxvamargin: 20pxorasidagi farqni fon rangi bilan ko'rsating.- Margin collapse ni sinab ko'ring: ikkita blok,
margin-bottom: 40pxvamargin-top: 20px. Orasidagi masofani o'lchang. So'ng ota elementgadisplay: flexqo'shib, farqni ko'ring. border-radius: 50%bilan doira shaklidagi avatar yarating.
Xulosa #
- Har bir element - to'rt qatlamli quti: content, padding, border, margin.
marginshaffof,paddingesa fon rangini oladi.box-sizing: border-boxni har bir loyihada birinchi qator qilib yozing.margin: 0 autoblokni gorizontal markazlashtiradi (vertikal emas).- Margin collapse: vertikal margin lar qo'shilmaydi, kattarog'i qoladi.
outlinebox model ga kirmaydi - fokus ko'rsatkichi uchun ideal, uni o'chirmang.img { max-width: 100%; height: auto; }- rasmlar uchun majburiy juftlik.
Keyingi bo'limda elementlarni sahifada joylashtirishni - display va position ni o'rganamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.