Box model
CSS'ning eng muhim tushunchasi โ Box Model (quti modeli). Brauzer uchun sahifadagi har bir element โ matn, rasm, tugma yoki div โ bu to'rtburchak quti. Bu qutining o'lchami va uning ichki/tashqi bo'shliqlarini qanday hisoblashini tushunmasangiz, CSS'da joylashuv har doim sirli tuyuladi. Bu darsda quti modelini to'liq o'zlashtiramiz.
Quti to'rtta qatlamdan iborat
Har bir element โ ichkaridan tashqariga qarab โ to'rtta qatlamdan tashkil topgan quti:
- Content (mazmun) โ markazdagi haqiqiy mazmun: matn, rasm. Uning o'lchami
widthvaheightbilan belgilanadi; - Padding (ichki bo'shliq) โ mazmun bilan chegara orasidagi bo'shliq. Element fonining rangi shu qatlamgacha yoyiladi;
- Border (chegara) โ qutini o'rab turadigan ramka (chiziq);
- Margin (tashqi bo'shliq) โ qutining tashqi chegarasi bilan qo'shni elementlar orasidagi bo'shliq. U doim shaffof.
+-----------------------------+ <- margin (tashqi)
| +-----------------------+ | <- border (chegara)
| | +-----------------+ | | <- padding (ichki)
| | | CONTENT | | | <- mazmun (width x height)
| | +-----------------+ | |
| +-----------------------+ |
+-----------------------------+
Padding โ ichki bo'shliq
padding mazmun bilan element chegarasi orasiga bo'shliq qo'shadi. Uni har tomon uchun alohida yoki birdaniga belgilash mumkin.
/* Barcha tomondan bir xil */
.karta { padding: 20px; }
/* Yuqori-past 10px, o'ng-chap 30px */
.karta { padding: 10px 30px; }
/* Yuqori, o'ng, past, chap (soat mili bo'yicha) */
.karta { padding: 10px 20px 30px 40px; }
/* Faqat bitta tomon */
.karta { padding-left: 15px; }
Border โ chegara
border element atrofida chiziq (ramka) chizadi. U uchta qismdan iborat: qalinlik, uslub va rang.
/* qalinlik | uslub | rang */
.quti {
border: 2px solid black;
}
/* Faqat pastki chegara */
.sarlavha {
border-bottom: 3px dashed red;
}
solidโ to'liq chiziq;dashedโ chiziqchali;dottedโ nuqtali;noneโ chegara yo'q.
Margin โ tashqi bo'shliq
margin elementni qo'shni elementlardan uzoqlashtiradi. Uning sintaksisi padding bilan bir xil (bir, ikki yoki to'rt qiymat).
.blok {
margin: 20px;
margin-top: 40px;
}
Elementni gorizontal markazga qo'yishning mashhur usuli โ chap va o'ng margin'ni auto qilish. Buning uchun elementning widthi belgilangan bo'lishi kerak:
.markaz {
width: 600px;
margin: 0 auto;
}
width, height va box-sizing muammosi
width va height odatda faqat content qatlamining o'lchamini belgilaydi. Bu jiddiy muammoga olib keladi. Quyidagi qutini ko'ring:
.quti {
width: 200px;
padding: 20px;
border: 5px solid black;
}
Siz "quti kengligi 200px" deb o'ylaysiz, lekin brauzer standart holatda uni shunday hisoblaydi: 200 (content) + 20 (chap padding) + 20 (o'ng padding) + 5 (chap border) + 5 (o'ng border) = 250px. Ya'ni haqiqiy quti siz kutgandan kengroq bo'lib qoladi va joylashuvni buzadi.
Yechim: box-sizing: border-box
box-sizing: border-box xossasi bu muammoni hal qiladi. U bilan width endi butun qutini (content + padding + border) o'z ichiga oladi. Ya'ni width: 200px desangiz, quti aniq 200px bo'ladi โ padding va border shu 200px ichida hisoblanadi.
.quti {
box-sizing: border-box;
width: 200px;
padding: 20px;
border: 5px solid black;
/* Haqiqiy kenglik: aniq 200px */
}
border-boxga o'tkazadi va o'lcham hisoblashni ancha soddalashtiradi. Buni odat qiling:* {
box-sizing: border-box;
}
display xossasi
display element qanday "quti" bo'lishini va boshqa elementlar bilan qanday joylashishini belgilaydi. Eng muhim qiymatlar:
block
Block element har doim butun qatorni egallaydi va yangi qatordan boshlanadi. Unga width, height, yuqori/pastki margin berish mumkin. Misollar: <div>, <p>, <h1>, <section>.
inline
Inline element faqat o'z mazmuni qadar joy egallaydi va yangi qator boshlamaydi โ bir qatorda yonma-yon turadi. Unga width/height va yuqori/pastki margin ta'sir qilmaydi. Misollar: <span>, <a>, <strong>, <em>.
inline-block
"Ikkalasining eng yaxshisi": element inline kabi yonma-yon turadi, lekin block kabi width, height va margin qabul qiladi. Tugmalar yoki yonma-yon kartalar uchun qulay.
none
Element butunlay yashiriladi โ u sahifada ko'rinmaydi va joy ham egallamaydi. Ko'pincha JavaScript orqali elementni ko'rsatish/yashirish uchun ishlatiladi.
.yashirin { display: none; }
.menyu-element {
display: inline-block;
width: 120px;
padding: 10px;
}
display: none bilan visibility: hidden farqli: birinchisida element umuman joy egallamaydi, ikkinchisida element ko'rinmaydi, lekin o'z joyini bo'sh saqlab qoladi.overflow โ mazmun sig'masa nima bo'ladi?
Agar element ichidagi mazmun uning o'lchamidan katta bo'lsa (masalan, height kichik, matn ko'p), overflow xossasi ortiqcha mazmun bilan nima qilishni belgilaydi:
visibleโ sukut bo'yicha; mazmun quti chegarasidan tashqariga chiqib "toshib" ketadi;hiddenโ sig'magan qism kesib tashlanadi (ko'rinmaydi);scrollโ har doim aylantirish paneli (scrollbar) qo'shiladi;autoโ faqat kerak bo'lgandagina scrollbar qo'shadi (eng ko'p ishlatiladi).
.oyna {
height: 150px;
overflow: auto;
}
Xulosa
- Har bir element โ to'rt qatlamli quti: content, padding, border, margin;
- padding โ ichki bo'shliq, margin โ tashqi bo'shliq, border โ ramka;
- Qiymatlar tartibi soat mili bo'yicha: yuqori → o'ng → past → chap;
- Standart holatda
widthfaqat content'ni hisoblaydi, bu chalkashlik keltiradi; box-sizing: border-boxโ width'ni butun qutiga tenglashtiradi, buni odat qiling;display: block (butun qator), inline (yonma-yon), inline-block (ikkalasi), none (yashirin);overflow: autoโ sig'magan mazmun uchun scroll qo'shadi.