Quti modeli: margin, border, padding

Brauzer uchun sahifadagi har bir element — to'rtburchak quti: sarlavha ham, xatboshi ham, rasm ham, havola ham. Elementlar orasidagi masofani, chegaralarni va o'lchamlarni boshqarish uchun shu qutining qanday tuzilganini bilish kerak. Bu — CSS'dagi eng muhim mavzulardan biri.

Bu darsda

  • Quti modeli: mazmun, ichki oraliq, chegara, tashqi oraliq
  • width va height
  • padding va margin'ni qisqa yozish — soat mili bo'yicha
  • border, yumaloq burchaklar va doira
  • box-sizing: border-box — o'lchamni oson hisoblash
  • display: block, inline va inline-block
  • max-width, overflow va box-shadow
  • Loyiha: profil kartasi

Har bir element — quti

Ishonmayapsizmi? Quyidagi sahifada universal selektor * yordamida hamma elementlar atrofiga chiziq chizilgan. outline — chegaraga o'xshash chiziq, lekin u joy egallamaydi, shuning uchun tekshirib ko'rish uchun qulay:

<style>
  body { font-family: sans-serif; }
  * { outline: 2px solid tomato; }
</style>

<h1>Mening sahifam</h1>
<p>Bu xatboshida <a href="#">havola</a> va
<strong>qalin so'z</strong> bor.</p>
<img src="../assets/rasmlar/olma.svg" alt="Olma" width="80">
<ul>
  <li>Birinchi band</li>
  <li>Ikkinchi band</li>
</ul>

Sarlavha ham, havola ham, rasm ham, ro'yxat bandlari ham — hammasi to'rtburchak. Hatto butun sahifa (body) ham bitta katta quti.

Quti modeli

Har bir quti to'rt qatlamdan iborat. Ichkaridan tashqariga qarab:

Quti modeli: markazda content (mazmun), uning atrofida padding (ichki oraliq), keyin border (chegara) va eng tashqarida margin (tashqi oraliq) margin — tashqi oraliq (doim shaffof) border — chegara padding — ichki oraliq content — mazmun matn, rasm, boshqa elementlar width (standart holatda) height
Quti modeli: content → padding → border → margin.
  1. Mazmun (inglizcha content) — matn, rasm yoki ichki elementlar. Uning o'lchami width va height bilan beriladi.
  2. Ichki oraliq (inglizcha padding) — mazmun bilan chegara orasidagi bo'sh joy. Elementning fon rangi shu qismga ham yoyiladi.
  3. Chegara (inglizcha border) — qutining chizig'i.
  4. Tashqi oraliq (inglizcha margin) — chegaradan tashqaridagi bo'sh joy, ya'ni qo'shni elementlargacha masofa. U doim shaffof: fon rangi bu yerga yetib bormaydi.

Devordagi ramkali suratni tasavvur qiling. Suratning o'zi — mazmun. Surat atrofidagi oq qog'oz hoshiya — padding. Yog'och ramka — border. Ramkadan qo'shni suratgacha bo'lgan devor — margin.

<style>
  body { font-family: sans-serif; }
  .quti {
    background-color: #dcf1ef;   /* fon padding'ga ham yoyiladi */
    padding: 20px;               /* ichki oraliq */
    border: 4px solid #0a7c77;   /* chegara */
    margin: 30px;                /* tashqi oraliq */
  }
</style>

<div class="quti">Men qutiman. Atrofimdagi oraliqlarga qarang!</div>
<div class="quti">Men ham qutiman.</div>

Qiymatlarni o'zgartirib ko'ring: padding: 0 qilsangiz, matn chegaraga yopishib qoladi; margin: 0 qilsangiz, qutilar bir-biriga tegib turadi.

width va height

width — kenglik, height — balandlik. Standart holatda ular aynan mazmun qismining o'lchamini belgilaydi (buni pastda o'zgartiramiz). Blok element sukut bo'yicha butun kenglikni egallaydi, balandligi esa mazmunga qarab o'zi o'sadi.

Matnli qutilarga height bermang. Matn ko'paysa yoki telefonda qatorlar ko'payib ketsa, u qutiga sig'may, tashqariga chiqib ketadi. Balandlik kerak bo'lsa, min-height ishlating — «kamida shuncha, kerak bo'lsa ko'proq».

padding — ichki oraliq

padding ni har bir tomonga alohida berish mumkin: padding-top, padding-right, padding-bottom, padding-left. Lekin ko'pincha qisqa yozuv ishlatiladi — bitta qatorda 1 dan 4 tagacha qiymat:

YozuvMa'nosi
padding: 10px;To'rt tomon ham 10px
padding: 10px 20px;Tepa va past — 10px, o'ng va chap — 20px
padding: 10px 20px 30px;Tepa — 10px, o'ng va chap — 20px, past — 30px
padding: 10px 20px 30px 40px;Tepa — 10px, o'ng — 20px, past — 30px, chap — 40px

To'rtta qiymat tartibini soat mili bilan eslab qolish oson: soat 12 dan boshlanadi — tepa, keyin 3 — o'ng, 6 — past, 9 — chap.

Soat mili bo'yicha tartib: 1 — tepa (soat 12), 2 — o'ng (soat 3), 3 — past (soat 6), 4 — chap (soat 9) 12 3 6 9 element 1 · tepa (top) 2 · o'ng (right) 3 · past (bottom) 4 · chap (left)
padding: 1 2 3 4; — tepa, o'ng, past, chap. margin ham xuddi shunday.
<style>
  body { font-family: monospace; }
  div { background: #e2eafa; border: 1px solid #1f4fa8;
        margin: 8px 0; }
  .a { padding: 10px; }
  .b { padding: 10px 40px; }
  .c { padding: 0 0 30px 80px; }
</style>

<div class="a">padding: 10px</div>
<div class="b">padding: 10px 40px</div>
<div class="c">padding: 0 0 30px 80px</div>

Uchinchi qutida tepa va o'ng tomonda oraliq yo'q, pastda 30px, chapda esa 80px. Nolga birlik yozish shart emas: 0 — 0px bilan bir xil.

border — chegara

border uchta qiymatni birga oladi: qalinlik, chiziq turi va rang — border: 2px solid #1f4fa8;. Chiziq turlari: solid (yaxlit), dashed (uzuq), dotted (nuqtali), double (qo'sh), none (yo'q). Faqat bitta tomonga ham berish mumkin: border-bottom: 3px solid tomato; — sarlavha tagidagi chiziq uchun qulay.

border-radius — yumaloq burchaklar va doira

border-radius: 12px; burchaklarni yumaloqlaydi. U chegara bo'lmasa ham ishlaydi — fonning burchaklari yumaloqlanadi. Kvadrat elementga border-radius: 50%; bersangiz, doira hosil bo'ladi. Profil rasmlari aynan shunday yasaladi.

<style>
  body { font-family: sans-serif; }
  .q { display: inline-block; width: 110px; padding: 16px 0;
       margin: 6px; text-align: center; background: #f9eed5; }
  .solid   { border: 3px solid #8f5d00; }
  .dashed  { border: 3px dashed #8f5d00; }
  .dotted  { border: 3px dotted #8f5d00; }
  .double  { border: 6px double #8f5d00; }
  .past    { border-bottom: 4px solid tomato; }
  .yumaloq { border: 3px solid #8f5d00; border-radius: 16px; }
  .avatar  { width: 100px; height: 100px; border-radius: 50%;
             border: 4px solid #0a7c77; }
</style>

<div class="q solid">solid</div>
<div class="q dashed">dashed</div>
<div class="q dotted">dotted</div>
<div class="q double">double</div>
<div class="q past">faqat past</div>
<div class="q yumaloq">radius 16px</div>
<p><img class="avatar" alt="Profil"
        src="../assets/rasmlar/avatar.svg"></p>

margin — tashqi oraliq

margin xuddi padding kabi yoziladi: margin: 20px;, margin: 10px 0;, margin-top: 30px; va hokazo. Farqi — u chegaradan tashqarida va doim shaffof.

margin: auto — blokni markazga

Blok elementga aniq kenglik (width yoki max-width) berib, chap va o'ng margin'ni auto qilsangiz, brauzer qolgan bo'sh joyni ikki tomonga teng bo'lib beradi — element markazga keladi: margin: 0 auto;.

text-align: center bu yerda yordam bermaydi: u qutining o'zini emas, faqat ichidagi matnni markazlaydi. Qutini markazga qo'yish — margin: 0 auto ning ishi.

Margin'larning «qo'shilib ketishi»

Ikki blok element ustma-ust tursa, birinchisining pastki va ikkinchisining yuqori margin'i qo'shilmaydi — ulardan kattasi olinadi. 30px va 20px bo'lsa, orasida 50px emas, 30px bo'ladi. Bu margin collapse («margin'larning qo'shilib ketishi») deyiladi va faqat vertikal (tepa-past) margin'larga tegishli. «Nega oraliq kutganimdan kichik?» degan savolning javobi ko'pincha shu.

<style>
  body { font-family: sans-serif; }
  .markaz { width: 260px; margin: 0 auto; padding: 12px;
            background: #e2eafa; text-align: center; }
  p { margin: 0; padding: 8px; }
  .bir  { margin-bottom: 30px; background: #dcf1ef; }
  .ikki { margin-top: 20px; background: #f9eed5; }
</style>

<div class="markaz">Men markazdaman: margin: 0 auto</div>
<p class="bir">margin-bottom: 30px</p>
<p class="ikki">margin-top: 20px — oramiz 50px emas, 30px!</p>

box-sizing: border-box — o'lchamni oson hisoblash

Standart holatda width — faqat mazmun qismining kengligi. padding va border esa unga qo'shiladi:

width: 300px;  padding: 20px;  border: 2px solid;

Ko'rinadigan kenglik = 300 + 20 + 20 + 2 + 2 = 344px

«300px» deb yozib, 344 piksellik quti olish — chalkash. Buni box-sizing xususiyati hal qiladi:

<style>
  body { font-family: sans-serif; }
  .chizgich { width: 300px; height: 6px; background: tomato; }
  .quti { width: 300px; padding: 20px; margin: 8px 0;
          border: 2px solid #1f4fa8; background: #e2eafa; }
  .bb { box-sizing: border-box; }
</style>

<p>Qizil chiziq — aniq 300px:</p>
<div class="chizgich"></div>
<div class="quti">content-box: 300 + 40 + 4 = 344px</div>
<div class="quti bb">border-box: aynan 300px</div>

Shuning uchun deyarli barcha zamonaviy saytlar CSS'ni shu qoida bilan boshlaydi. Siz ham har bir loyihangizda style.css ning eng boshiga yozing:

* {
  box-sizing: border-box;
}

DevTools'dagi quti diagrammasi

DevTools'da (F12) elementni tanlang va Styles yonidagi Computed bo'limini oching. Tepada tanlangan elementning quti modeli rangli diagramma ko'rinishida chizilgan: tashqarida margin (to'q sariq), keyin border (sariq), padding (yashil) va markazda mazmun (ko'k) — har birining aniq o'lchami bilan. Diagrammadagi qatlam ustiga sichqonchani olib borsangiz, sahifada aynan shu qism bo'yab ko'rsatiladi. «Nega bu yerda bo'sh joy bor?» degan savolga eng tez javob — shu diagramma.

display: block, inline va inline-block

7-darsda elementlar blok va qator ichidagi bo'lishini ko'rgan edik. Bu xulqni display xususiyati boshqaradi va uni o'zgartirish mumkin:

blockinlineinline-block
Yangi qatordan boshlanadimi?HaYo'qYo'q
width / height ishlaydimi?HaYo'qHa
Tepa-past padding/margin qo'shnilarni suradimi?HaYo'qHa
Misollardiv, p, h1, sectionspan, a, strongbutton, input

display: none; esa elementni butunlay yashiradi — u joy ham egallamaydi.

<style>
  body { font-family: sans-serif; line-height: 1.6; }
  p { max-width: 400px; }
  span { background: #f9eed5; border: 2px solid #8f5d00;
         width: 120px; padding: 14px; }
  .blok   { display: block; }
  .qatorb { display: inline-block; }
</style>

<p>Bu matnda oddiy <span>inline</span> element bor. Unga width
ta'sir qilmadi, tepa-past padding esa qo'shni qatorlarni surmadi —
ularning ustiga «chiqib» ketdi.</p>
<p>Bu <span class="blok">block</span> — alohida qatorga tushdi.</p>
<p>Bu <span class="qatorb">inline-block</span> — qator ichida qoldi,
lekin width va padding to'liq ishlaydi.</p>

Tugma ko'rinishidagi havolalar uchun inline-block ayni muddao: ular matn qatorida turadi, lekin ichki oraliqlari to'g'ri ishlaydi.

Foydali qo'shimchalar

max-width — o'qishga qulay kenglik

Juda uzun qatorlarni o'qish qiyin: ko'z bir qator oxiridan keyingisining boshiga o'tishda adashadi. Matnli bloklarga max-width bering — «kengligi shundan oshmasin, ekran tor bo'lsa — torayaversin». Qulay kenglik — bir qatorda taxminan 60–80 belgi, ya'ni 600–700px atrofida. width dan farqi: width: 700px telefon ekranidan chiqib ketadi, max-width: 700px esa ekranga moslashib torayadi.

overflow — sig'magan mazmun

Mazmun qutiga sig'masa (masalan, height berilgan bo'lsa), overflow nima qilishni hal qiladi: visible (standart — chiqib ketadi), hidden (sig'magan qism kesib tashlanadi), auto (kerak bo'lsa, aylantirish chizig'i paydo bo'ladi).

box-shadow — quti soyasi

box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); — o'ngga siljish, pastga siljish, xiralik va rang. text-shadow ga o'xshaydi, lekin butun qutiga tushadi. Yengil, shaffof soya kartani sahifadan biroz «ko'tarib» turadi.

<style>
  body { font-family: sans-serif; background: #f4f6fa; }
  .maqola { max-width: 420px; margin: 0 auto 16px;
            padding: 12px 16px; background: white;
            border-radius: 10px;
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); }
  .kichik { height: 50px; overflow: auto; }
</style>

<div class="maqola">max-width: 420px — oyna kengaysa ham, bu blok
shundan kengaymaydi va markazda turadi. Yengil soya kartani
«ko'tarib» turibdi.</div>
<div class="maqola kichik">overflow: auto — bu qutining balandligi
50px, matn esa ko'proq. Shuning uchun ichida aylantirish chizig'i
paydo bo'ldi. Sichqoncha g'ildiragi bilan aylantirib ko'ring.
Yana bir qator. Va yana bittasi. Oxiri!</div>

Loyiha: profil kartasi

Endi o'rganganlarimizni bitta foydali qismga — profil kartasiga yig'amiz. HTML juda oddiy: rasm, ism, qisqa matn va tugma. Butun «sehr» — CSS'da. Kodni qadamlarga bo'lib, izoh bilan belgiladik:

<style>
  /* 1-qadam: o'lchamlarni oson hisoblash */
  * { box-sizing: border-box; }
  body { font-family: sans-serif; background: #f4f6fa; }

  /* 2-qadam: karta — markazdagi oq quti */
  .karta {
    max-width: 300px;
    margin: 16px auto;
    padding: 24px;
    background: white;
    border: 1px solid #d6dde9;
    border-radius: 16px;
    box-shadow: 0 6px 20px rgba(21, 32, 54, 0.12);
    text-align: center;
  }
  /* 3-qadam: doira shaklidagi rasm */
  .avatar { width: 96px; height: 96px; border-radius: 50%;
            border: 4px solid #e2eafa; }
  /* 4-qadam: matn oraliqlari */
  .karta h2 { margin: 12px 0 4px; color: #152036; }
  .karta p  { margin: 0 0 20px; color: #4a5770; line-height: 1.5; }
  /* 5-qadam: tugma */
  .tugma { display: inline-block; padding: 10px 22px;
           background: #1f4fa8; color: white; text-decoration: none;
           border-radius: 999px; transition: background-color 0.3s; }
  .tugma:hover { background: #0a7c77; }
</style>

<div class="karta">
  <img class="avatar" src="../assets/rasmlar/avatar.svg" alt="Aziza">
  <h2>Aziza Karimova</h2>
  <p>Boshlovchi veb-dasturchi. HTML va CSS o'rganyapman.</p>
  <a class="tugma" href="#">Bog'lanish</a>
</div>
  1. box-sizing: border-box — max-width: 300px deb yozdik, karta chegarasi bilan birga aynan shuncha bo'ladi.
  2. Karta: max-width + margin: 16px auto — markazda, tepa va pastda 16px oraliq bilan; padding — ichki «havo»; border, border-radius va box-shadow — karta ko'rinishi.
  3. Rasm: kvadrat (96 × 96) + border-radius: 50% = doira.
  4. Matn: brauzerning standart margin'lari o'rniga o'zimiznikini berdik — sarlavha rasmga yaqinroq, matndan keyin tugmagacha 20px.
  5. Tugma: inline-block bo'lgani uchun padding to'liq ishlaydi; border-radius: 999px — juda katta radius, burchaklar to'liq yumaloqlanib, «tabletka» shakli chiqadi.

Kartani o'zingizga moslang: ism va matnni o'zgartiring, max-width ni 360px qiling, soyani kuchaytiring yoki tugmaga boshqa rang bering. Har bir o'zgarishda qaysi xususiyat nimaga ta'sir qilayotganini kuzating.

Mashqlar

1-mashq Aniq 300 piksellik karta

.karta ga quyidagilarni bering: kengligi 300px, ichki oraliq har tomondan 20px, chegara 2px qalinlikda yaxlit chiziq (rangi ixtiyoriy), burchak radiusi 12px. Eng muhimi: kartaning chegarasi bilan birga to'liq kengligi aynan 300px bo'lsin.

<style>
  body { font-family: sans-serif; }
  .karta {
    background: #dcf1ef;
    /* shu yerga yozing */
  }
</style>

<div class="karta">
  <h3>Eslatma</h3>
  <p>Ertaga soat 10:00 da CSS darsi bor.</p>
</div>
Ishora

Faqat width: 300px, padding va border ni yozsangiz, karta 344px bo'ladi (300 + 40 + 4). Uni aynan 300px qilish uchun qaysi xususiyat kerakligini eslang.

Yechimni ko'rish
<style>
  body { font-family: sans-serif; }
  .karta {
    background: #dcf1ef;
    box-sizing: border-box;
    width: 300px;
    padding: 20px;
    border: 2px solid #0a7c77;
    border-radius: 12px;
  }
</style>

<div class="karta">
  <h3>Eslatma</h3>
  <p>Ertaga soat 10:00 da CSS darsi bor.</p>
</div>

2-mashq Xabarni markazga

Sariq xabar qutisini sahifaning gorizontal markaziga joylang va tepasidan 40px oraliq qoldiring. Buni bitta margin qatori bilan qiling. E'tibor bering: qutida text-align: center allaqachon bor, lekin quti baribir chapda turibdi.

<style>
  body { font-family: sans-serif; }
  .xabar {
    width: 220px;
    padding: 16px;
    background: #f9eed5;
    border: 2px solid #8f5d00;
    text-align: center;
  }
</style>

<div class="xabar">Men sahifa markazida turishim kerak!</div>
Yechimni ko'rish
<style>
  body { font-family: sans-serif; }
  .xabar {
    width: 220px;
    padding: 16px;
    background: #f9eed5;
    border: 2px solid #8f5d00;
    text-align: center;
    margin: 40px auto;
  }
</style>

<div class="xabar">Men sahifa markazida turishim kerak!</div>

margin: 40px auto; — tepa va past 40px, chap va o'ng auto. text-align: center esa faqat qutining ichidagi matnni markazlaydi.

Amaliy topshiriq Portfolio'ga kiyim kiygizamiz

7-darsda yaratgan portfolio skeletingizni oxirgi uch darsda o'rganganlaringiz bilan bezang:

  1. portfolio papkasida style.css yarating va index.html ga <link> bilan ulang.
  2. Faylning eng boshiga * { box-sizing: border-box; } yozing.
  3. body ga zaxirali shrift, line-height: 1.6, matn va fon rangi bering.
  4. main ga max-width: 800px; margin: 0 auto; padding: 0 16px; bering — matn o'qishga qulay kenglikda va markazda bo'ladi.
  5. header ga padding va fon (rang yoki gradient) bering. nav havolalarini tugmaga o'xshatib bezang: text-decoration: none, padding, border-radius, :hover.
  6. Loyihalar bo'limidagi article'larni kartaga aylantiring: padding, border, border-radius, box-shadow, margin-bottom.
  7. Rasmingizni doira qiling: teng width va height + border-radius: 50%.
  8. DevTools'dagi quti diagrammasida oraliqlarni tekshiring va keraksiz bo'shliqlarni tuzating.

Loyiha kartalarini yonma-yon terish kabi ustunli joylashuvni keyingi darsda Flexbox bilan qilamiz.

O'zingizni sinang

Quti modelining qaysi qismi chegaradan tashqarida bo'lib, qo'shni elementlar bilan masofani belgilaydi?

  1. padding
  2. content
  3. border
  4. margin

To'g'ri. margin — tashqi oraliq va u doim shaffof. padding esa chegaraning ichida.

padding: 10px 20px; nimani bildiradi?

  1. Tepa va past — 10px, o'ng va chap — 20px
  2. Tepa — 10px, past — 20px
  3. Chap — 10px, o'ng — 20px
  4. Barcha tomonlar — 30px

To'g'ri. Ikki qiymat bo'lsa: birinchisi — vertikal (tepa-past), ikkinchisi — gorizontal (o'ng-chap).

Standart box-sizing (content-box) da width: 200px; padding: 10px; border: 5px solid; bo'lgan qutining ko'rinadigan kengligi qancha?

  1. 200px
  2. 215px
  3. 230px
  4. 210px

To'g'ri. 200 + 10 + 10 + 5 + 5 = 230. border-box da esa aynan 200px bo'lardi.

Kvadrat rasmni doira shakliga qanday keltirish mumkin?

  1. border: circle;
  2. border-radius: 50%;
  3. display: round;
  4. padding: 50%;

To'g'ri. Rasmning eni va bo'yi teng bo'lsa, 50% radius uni to'liq doiraga aylantiradi.

<span> ga width: 200px berildi, lekin kengligi o'zgarmadi. Nima qilish kerak?

  1. width ni !important bilan yozish
  2. margin: 0 auto qo'shish
  3. display: inline-block (yoki block) berish
  4. span larga kenglik umuman berib bo'lmaydi

To'g'ri. inline elementlarga width va height ta'sir qilmaydi. inline-block qator ichida qoladi va o'lchamlarni qabul qiladi.

Xulosa

  • Har bir element — quti: content → padding → border → margin. Fon padding'gacha yoyiladi, margin doim shaffof.
  • Qisqa yozuv: 1 qiymat — hamma tomon; 2 — tepa-past va o'ng-chap; 4 — soat mili bo'yicha: tepa, o'ng, past, chap.
  • border: 2px solid rang;, border-radius — yumaloq burchak, kvadratga 50% — doira.
  • margin: 0 auto + kenglik — blokni markazga qo'yadi. Vertikal margin'lar qo'shilmaydi, kattasi olinadi.
  • * { box-sizing: border-box; } — width butun qutini bildiradi. Har bir loyihani shu bilan boshlang.
  • display: block, inline, inline-block, none. Matnga max-width, kartalarga box-shadow bering.