Flexbox: elementlarni joylashtirish

Istalgan saytni oching: tepada logotip va menyu yonma-yon turadi, mahsulot kartalari qator bo'lib terilgan, tugmalar chiroyli tekislangan. Oddiy HTML bloklari esa bir-birining ostiga tushib ketadi. Bu darsda elementlarni qatorga terish, tekislash va ular orasiga joy qo'yishning eng qulay vositasi — Flexbox bilan tanishamiz.

Bu darsda

  • Nega bloklar ustma-ust turadi va display: flex buni qanday hal qiladi
  • Konteyner va elementlar, asosiy va ko'ndalang o'q
  • justify-content, align-items va gap bilan tekislash
  • flex-direction, flex-wrap va flex: 1
  • Istalgan narsani markazga qo'yish — mashhur «uch qator»
  • Amaliyot: menyu paneli, kartalar qatori va sahifaning pastki qismi

Muammo: bloklar ustma-ust turadi

Quti modeli darsida ko'rganimizdek, <div>, <p>, <h1> kabi blok elementlar butun kenglikni egallaydi va har doim yangi qatordan boshlanadi. Shuning uchun ular bir-birining ostiga tushadi:

<style>
  body { font-family: sans-serif; }
  .quti { background: #4f8ef7; color: white; padding: 16px;
          margin: 4px; border-radius: 8px; }
</style>

<div class="quti">1</div>
<div class="quti">2</div>
<div class="quti">3</div>

Uchta quti — uchta qator. Lekin bizga ko'pincha ular yonma-yon turishi kerak: menyu bandlari, kartalar, tugmalar. Ilgari buning uchun turli «hiyla»lar ishlatilardi (float, inline-block), ular noqulay va chalkash edi. Bugun esa buning uchun maxsus vosita bor.

display: flex — bitta qator, katta o'zgarish

Flexbox (inglizcha flexible box — «moslashuvchan quti») — elementlarni bir yo'nalish bo'yicha terish va tekislash uchun CSS usuli. U har doim ikki darajada ishlaydi:

Yuqoridagi uchta qutini bitta <div class="qator"> ichiga o'raymiz va unga bor-yo'g'i bitta qator CSS yozamiz:

<style>
  body { font-family: sans-serif; }
  .qator { display: flex; }
  .quti { background: #4f8ef7; color: white; padding: 16px;
          margin: 4px; border-radius: 8px; }
</style>

<div class="qator">
  <div class="quti">1</div>
  <div class="quti">2<br>ikki qatorli</div>
  <div class="quti">3</div>
</div>

Bitta display: flex; — va qutilar yonma-yon turdi! E'tibor bering:

Konteyner — kitob javoni, elementlar — kitoblar. Javonga «kitoblarni chapdan o'ngga ter», «o'rtaga jamla», «orasini teng qil» deb buyruq berasiz — har bir kitobga alohida emas. Flexbox'da ham buyruqlarning ko'pchiligi konteynerga yoziladi.

Ikki o'q: asosiy va ko'ndalang

Flexbox'ni tushunishning kaliti — ikki o'q (yo'nalish):

Flex-konteyner ichida uchta flex-element. Asosiy o'q chapdan o'ngga, ko'ndalang o'q yuqoridan pastga yo'nalgan flex-konteyner (display: flex) 1 flex-element 2 flex-element 3 flex-element Asosiy o'q (main axis) justify-content shu o'q bo'yicha joylaydi Ko'ndalang o'q align-items
Flex-konteyner va uning elementlari. Standart holatda asosiy o'q gorizontal, ko'ndalang o'q vertikal.

Shuni eslab qoling: justify-content elementlarni asosiy o'q bo'yicha, align-items esa ko'ndalang o'q bo'yicha joylaydi. Endi ikkalasini ham amalda ko'ramiz.

justify-content — asosiy o'q bo'yicha joylash

justify-content (inglizcha «mazmunni tekislash») konteynerdagi bo'sh joyni elementlar atrofida qanday taqsimlashni belgilaydi. Quyidagi muharrirda center so'zini jadvaldagi boshqa qiymatlarga almashtirib ko'ring:

<style>
  body { font-family: sans-serif; }
  .qator {
    display: flex;
    justify-content: center;  /* shu qiymatni almashtiring */
    background: #eef3fb;
    border: 2px dashed #9db4d8;
    padding: 8px;
  }
  .quti { width: 70px; padding: 14px 0; text-align: center;
          color: white; font-weight: bold; border-radius: 8px; }
  .a { background: #e4572e; }
  .b { background: #4f8ef7; }
  .c { background: #2bb673; }
</style>

<div class="qator">
  <div class="quti a">A</div>
  <div class="quti b">B</div>
  <div class="quti c">C</div>
</div>
QiymatNima qiladi
flex-startElementlar boshiga (chapga) yig'iladi. Bu — standart qiymat.
flex-endElementlar oxiriga (o'ngga) yig'iladi.
centerElementlar o'rtaga yig'iladi.
space-betweenBirinchi va oxirgi element chetlarga yopishadi, bo'sh joy elementlar orasida teng bo'linadi.
space-aroundHar bir element atrofida teng joy bor. Chetlardagi bo'shliq ichkaridagidan ikki baravar kichik.
space-evenlyBarcha bo'shliqlar — chetlarda ham, orada ham — mutlaqo teng.

Oltita qiymatni bir joyda solishtirish uchun quyidagi muharrirda har bir qatorga style atributi orqali boshqa qiymat berilgan:

<style>
  body { font-family: sans-serif; font-size: 13px; margin: 8px; }
  .qator { display: flex; gap: 4px; padding: 4px;
           margin: 2px 0 10px; background: #eef3fb; }
  .qator span { width: 44px; height: 20px; border-radius: 5px;
                background: #4f8ef7; }
</style>

<b>flex-start</b>
<div class="qator" style="justify-content: flex-start">
  <span></span> <span></span> <span></span>
</div>
<b>flex-end</b>
<div class="qator" style="justify-content: flex-end">
  <span></span> <span></span> <span></span>
</div>
<b>center</b>
<div class="qator" style="justify-content: center">
  <span></span> <span></span> <span></span>
</div>
<b>space-between</b>
<div class="qator" style="justify-content: space-between">
  <span></span> <span></span> <span></span>
</div>
<b>space-around</b>
<div class="qator" style="justify-content: space-around">
  <span></span> <span></span> <span></span>
</div>
<b>space-evenly</b>
<div class="qator" style="justify-content: space-evenly">
  <span></span> <span></span> <span></span>
</div>

Amalda eng ko'p ishlatiladiganlari: space-between (masalan, logotip chapda, menyu o'ngda) va center (biror narsani o'rtaga qo'yish).

align-items — ko'ndalang o'q bo'yicha joylash

align-items («elementlarni tekislash») elementlarni ko'ndalang o'q bo'yicha — standart holatda vertikal — joylaydi. Farqni ko'rish uchun konteynerga balandlik beramiz va qutilarni har xil o'lchamda qilamiz:

<style>
  body { font-family: sans-serif; }
  .qator {
    display: flex;
    align-items: center;  /* stretch, flex-start, flex-end, baseline */
    gap: 10px;
    height: 160px;
    background: #eef3fb;
    border: 2px dashed #9db4d8;
  }
  .quti { width: 70px; padding: 10px 0; text-align: center;
          color: white; border-radius: 8px; }
  .a { background: #e4572e; font-size: 14px; }
  .b { background: #4f8ef7; font-size: 32px; }
  .c { background: #2bb673; font-size: 20px; }
</style>

<div class="qator">
  <div class="quti a">A</div>
  <div class="quti b">B</div>
  <div class="quti c">C</div>
</div>
QiymatNima qiladi
stretchElementlar konteyner balandligiga cho'ziladi. Bu — standart qiymat (elementga height berilmagan bo'lsa ishlaydi).
flex-startElementlar yuqoriga (ko'ndalang o'q boshiga) yopishadi.
centerElementlar o'rtada turadi.
flex-endElementlar pastga yopishadi.
baselineElementlardagi matnning tagi bir chiziqda turadi — shrift o'lchami har xil bo'lsa qulay.

gap — elementlar orasidagi masofa

Yuqoridagi misolda gap: 10px; qatori bor edi. gap («oraliq») konteynerga yoziladi va elementlar orasiga masofa qo'yadi — chetlarga emas. Har bir elementga margin berishdan ancha qulay:

.qator {
  display: flex;
  gap: 16px;          /* barcha oraliqlar 16px */
}
.setka {
  display: flex;
  flex-wrap: wrap;
  gap: 20px 10px;     /* qatorlar orasi 20px, ustunlar orasi 10px */
}

Sinab ko'ring: justify-content muharririga qaytib, .qator ga gap: 30px; qo'shing va flex-start qiymatini tanlang.

flex-direction — yo'nalishni o'zgartirish

Standart holatda elementlar qatorga (row) teriladi. flex-direction («flex yo'nalishi») bilan buni o'zgartirish mumkin:

QiymatYo'nalish
rowChapdan o'ngga (standart)
row-reverseO'ngdan chapga
columnYuqoridan pastga — ustun bo'lib
column-reversePastdan yuqoriga
<style>
  body { font-family: sans-serif; }
  .menyu {
    display: flex;
    flex-direction: column;  /* row qilib ko'ring */
    align-items: center;
    gap: 8px;
    background: #eef3fb;
    padding: 12px;
  }
  .menyu a { background: #1f4fa8; color: white; text-decoration: none;
             padding: 8px 16px; border-radius: 6px; }
</style>

<nav class="menyu">
  <a href="#">Bosh sahifa</a>
  <a href="#">Darslar</a>
  <a href="#">Biz haqimizda</a>
  <a href="#">Aloqa</a>
</nav>

flex-direction: column bo'lganda o'qlar almashadi: asosiy o'q endi vertikal, ko'ndalang o'q esa gorizontal. Shuning uchun yuqoridagi misolda havolalarni gorizontal bo'yicha o'rtaga align-items: center qo'ydi, justify-content emas. Ko'pchilik aynan shu joyda adashadi!

flex-wrap — sig'maganda keyingi qatorga

Standart holatda flex-elementlar bitta qatorda turishga harakat qiladi: joy yetmasa, ular siqiladi yoki konteynerdan chiqib ketadi. flex-wrap: wrap; («o'rash») esa sig'magan elementlarni keyingi qatorga o'tkazadi — xuddi kitobdagi so'zlar kabi:

<style>
  body { font-family: sans-serif; }
  .yorliqlar {
    display: flex;
    flex-wrap: wrap;   /* nowrap qilib ko'ring */
    gap: 8px;
  }
  .yorliq { background: #dcf1ef; color: #0b6e63; padding: 6px 14px;
            border-radius: 20px; white-space: nowrap; }
</style>

<div class="yorliqlar">
  <span class="yorliq">HTML</span>  <span class="yorliq">CSS</span>
  <span class="yorliq">JavaScript</span>  <span class="yorliq">Flexbox</span>
  <span class="yorliq">Grid</span>  <span class="yorliq">Python</span>
  <span class="yorliq">Git</span>  <span class="yorliq">GitHub</span>
  <span class="yorliq">VS Code</span>  <span class="yorliq">Terminal</span>
  <span class="yorliq">DevTools</span>  <span class="yorliq">Emmet</span>
  <span class="yorliq">Node.js</span>  <span class="yorliq">React</span>
</div>

nowrap qilsangiz, yorliqlar bitta qatorga tiqilib, o'ng tomondan chiqib ketadi. wrap esa ularni chiroyli qilib keyingi qatorga o'tkazadi. Kartalar, rasmlar, yorliqlar kabi ko'p elementli ro'yxatlarda deyarli doim flex-wrap: wrap yoziladi.

Elementlarning o'z xususiyati: flex: 1

Hozirgacha hamma xususiyatlarni konteynerga yozdik. Lekin ba'zilari elementga yoziladi. Eng foydalisi — flex-grow («o'sish»): element konteynerdagi bo'sh joydan qancha ulush olishini bildiradi. Odatda uning qisqa yozuvi ishlatiladi: flex: 1.

<style>
  body { font-family: sans-serif; }
  .sahifa { display: flex; gap: 10px; margin-bottom: 16px; }
  .yon { width: 150px; background: #fde7c4; padding: 12px; }
  .asosiy { flex: 1; background: #d7ecff; padding: 12px; }
  .u { padding: 12px; color: white; text-align: center; border-radius: 6px; }
</style>

<div class="sahifa">
  <aside class="yon">Yon panel (150px)</aside>
  <main class="asosiy">Asosiy qism (flex: 1) — qolgan hamma joy</main>
</div>

<div class="sahifa">
  <div class="u" style="flex: 1; background: #e4572e">flex: 1</div>
  <div class="u" style="flex: 2; background: #4f8ef7">flex: 2</div>
  <div class="u" style="flex: 1; background: #2bb673">flex: 1</div>
</div>

Birinchi qatorda yon panel 150px ni oldi, flex: 1 li asosiy qism esa qolgan hamma joyni egalladi. Ikkinchi qatorda joy 1 : 2 : 1 nisbatda bo'lindi — o'rtadagi element yonidagilardan ikki baravar keng. Oynaning kengligi qanday bo'lmasin, bu nisbat saqlanadi.

Element xususiyatiMa'nosi
flex-growBo'sh joydan olinadigan ulush. Standart: 0 (o'smaydi).
flex-shrinkJoy yetmaganda siqilish ulushi. Standart: 1. 0 — umuman siqilmasin.
flex-basisElementning boshlang'ich o'lchami (masalan, 200px). Standart: auto.
flexUchalasining qisqa yozuvi. flex: 1 — «bo'sh joyni teng bo'lib ol». flex: 1 1 200px — «200px dan boshla, joy bo'lsa kengay, kam bo'lsa toraygin».

Istalgan narsani markazga qo'yish

Dasturchilar orasida «elementni sahifa o'rtasiga qanday qo'yaman?» degan savol uzoq yillar hazil bo'lib yurgan — chunki eski usullar juda chalkash edi. Flexbox bilan javob — konteynerga uch qator:

<style>
  body { font-family: sans-serif; margin: 0; }
  .sahna {
    display: flex;
    justify-content: center;  /* gorizontal bo'yicha o'rta */
    align-items: center;      /* vertikal bo'yicha o'rta */
    height: 240px;
    background: linear-gradient(135deg, #1f4fa8, #2bb673);
  }
  .karta { background: white; padding: 20px 28px; border-radius: 12px;
           box-shadow: 0 6px 20px rgba(0, 0, 0, 0.25); text-align: center; }
  .karta h2 { margin: 0; }
  .karta p { margin: 6px 0 0; color: #555; }
</style>

<div class="sahna">
  <div class="karta">
    <h2>Markazdaman!</h2>
    <p>Ikkala o'q bo'yicha ham</p>
  </div>
</div>

Vertikal markazlash sezilishi uchun konteynerning balandligi bo'lishi kerak. Aks holda konteyner mazmuni qadar past bo'ladi va «o'rta» bilan «tepa» farq qilmaydi. Butun ekran o'rtasiga qo'yish uchun odatda body { margin: 0; min-height: 100vh; } yoziladi — 100vh «ekran balandligining 100 foizi» degani.

Amaliyot: sahifaning haqiqiy qismlari

Endi o'rganganlarimizni deyarli har bir saytda uchraydigan qismlarda qo'llaymiz.

Navigatsiya paneli: logotip chapda, havolalar o'ngda

<style>
  body { font-family: sans-serif; margin: 0; }
  .navbar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 12px 20px;
    background: #1f2a44;
  }
  .logo { color: white; font-weight: bold; font-size: 20px; }
  .navbar ul { display: flex; gap: 18px;
               list-style: none; margin: 0; padding: 0; }
  .navbar a { color: #cfe0ff; text-decoration: none; }
  .navbar a:hover { color: white; }
</style>

<header class="navbar">
  <div class="logo">Sayohat.uz</div>
  <nav>
    <ul>
      <li><a href="#">Bosh sahifa</a></li>
      <li><a href="#">Shaharlar</a></li>
      <li><a href="#">Aloqa</a></li>
    </ul>
  </nav>
</header>

Bu yerda flex ikki qavat: .navbar — konteyner, logotip va <nav> — uning elementlari (space-between ularni chetlarga suradi). <ul> esa o'zi ham flex-konteyner: undagi <li> lar qatorga terilgan. Flex ichida flex — mutlaqo odatiy holat.

Kartalar qatori, sig'masa — keyingi qatorga

<style>
  body { font-family: sans-serif; background: #f4f6fa; }
  .kartalar { display: flex; flex-wrap: wrap; gap: 16px; }
  .karta {
    flex: 1 1 180px;   /* 180px dan boshla, joy bo'lsa kengay */
    background: white;
    border-radius: 10px;
    overflow: hidden;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
  }
  .karta img { display: block; width: 100%; height: 110px;
               object-fit: cover; }
  .karta h3 { margin: 10px 12px 4px; font-size: 17px; }
  .karta p { margin: 0 12px 12px; color: #555; font-size: 14px; }
</style>

<div class="kartalar">
  <div class="karta">
    <img src="../assets/rasmlar/registon.svg" alt="Registon">
    <h3>Samarqand</h3>
    <p>Registon maydoni va qadimiy madrasalar.</p>
  </div>
  <div class="karta">
    <img src="../assets/rasmlar/tog.svg" alt="Tog'lar">
    <h3>Chimyon</h3>
    <p>Toza havo va go'zal tog' manzaralari.</p>
  </div>
  <div class="karta">
    <img src="../assets/rasmlar/olma.svg" alt="Olma">
    <h3>Farg'ona</h3>
    <p>Mazali mevalar va bog'lar vodiysi.</p>
  </div>
</div>

Har bir karta 180px dan boshlanadi va bo'sh joy bo'lsa kengayadi. object-fit: cover rasmni cho'zmasdan, qutiga qirqib sig'diradi. «Yangi oynada» tugmasini bosib, brauzer oynasini toraytirib ko'ring: joy yetmay qolganda kartalar o'z-o'zidan keyingi qatorga o'tadi. Bitta qator media so'rovsiz ham sahifani telefonga moslashtirdi!

Sahifaning pastki qismi (footer)

<style>
  body { font-family: sans-serif; margin: 0; }
  footer { background: #1f2a44; color: #cfe0ff; padding: 20px; }
  .ustunlar { display: flex; flex-wrap: wrap; gap: 24px; }
  .ustun { flex: 1 1 150px; }
  .ustun h4 { color: white; margin: 0 0 8px; }
  .ustun p { margin: 4px 0; font-size: 14px; }
  .past { display: flex; justify-content: space-between;
          flex-wrap: wrap; gap: 8px; font-size: 13px;
          margin-top: 16px; padding-top: 12px;
          border-top: 1px solid #3a4766; }
</style>

<footer>
  <div class="ustunlar">
    <div class="ustun">
      <h4>Sayohat.uz</h4>
      <p>O'zbekiston bo'ylab sayohatlar.</p>
    </div>
    <div class="ustun">
      <h4>Bo'limlar</h4>
      <p>Shaharlar</p> <p>Tog'lar</p>
    </div>
    <div class="ustun">
      <h4>Aloqa</h4>
      <p>+998 90 123 45 67</p> <p>info@sayohat.uz</p>
    </div>
  </div>
  <div class="past">
    <span>&copy; 2026 Sayohat.uz</span>
    <span>Telegram · Instagram</span>
  </div>
</footer>

Uchta ustun teng bo'lib joylashgan, tor ekranda esa bir-birining ostiga tushadi. Eng pastki qatorda yana tanish usul: space-between. &copy; — © belgisini chiqaradigan HTML maxsus belgisi.

Flexbox'ni o'yin orqali mustahkamlang: Flexbox Froggy o'yinida qurbaqachalarni nilufar barglariga justify-content, align-items va boshqa xususiyatlar bilan joylashtirasiz. 24 ta bosqich bor; sahifaning yuqori o'ng burchagidagi menyudan o'zingizga qulay tilni tanlash mumkin. Uni tugatganingizdan keyin Flexbox «qo'lingizga o'tirib qoladi».

Mashqlar

1-mashq Menyu panelini tekislang

.menyu elementini flex-konteynerga aylantiring: logotip chapda, havolalar o'ngda bo'lsin (space-between), ikkalasi esa vertikal bo'yicha o'rtada tursin (align-items).

<style>
  body { font-family: sans-serif; margin: 0; }
  .menyu {
    background: #0b6e63;
    padding: 10px 20px;
    /* shu yerga yozing */
  }
  .logo { color: white; font-size: 24px; font-weight: bold; }
  .havolalar a { color: white; text-decoration: none;
                 margin-left: 14px; }
  .havolalar .tugma { background: #ffd166; color: #333;
                      padding: 8px 14px; border-radius: 6px; }
</style>

<header class="menyu">
  <div class="logo">Kitobxon</div>
  <nav class="havolalar">
    <a href="#">Kitoblar</a>
    <a href="#">Mualliflar</a>
    <a href="#" class="tugma">Kirish</a>
  </nav>
</header>
Ishora

Hamma xususiyatlar konteynerga — .menyu ga yoziladi. .logo va .havolalar — uning ikki flex-elementi.

Yechimni ko'rish
<style>
  body { font-family: sans-serif; margin: 0; }
  .menyu {
    background: #0b6e63;
    padding: 10px 20px;
    display: flex;
    justify-content: space-between;
    align-items: center;
  }
  .logo { color: white; font-size: 24px; font-weight: bold; }
  .havolalar a { color: white; text-decoration: none;
                 margin-left: 14px; }
  .havolalar .tugma { background: #ffd166; color: #333;
                      padding: 8px 14px; border-radius: 6px; }
</style>

<header class="menyu">
  <div class="logo">Kitobxon</div>
  <nav class="havolalar">
    <a href="#">Kitoblar</a>
    <a href="#">Mualliflar</a>
    <a href="#" class="tugma">Kirish</a>
  </nav>
</header>

2-mashq Qutini markazga qo'ying

Qizil quti balandligi 200px bo'lgan .sahna ichida turibdi. Flexbox yordamida uni sahnaning aynan o'rtasiga — ham gorizontal, ham vertikal bo'yicha — qo'ying. Qutining o'ziga hech narsa yozish shart emas.

<style>
  body { font-family: sans-serif; }
  .sahna {
    height: 200px;
    background: #eef3fb;
    /* qutini shu konteynerning o'rtasiga qo'ying */
  }
  .quti {
    width: 80px;
    height: 80px;
    background: tomato;
    border-radius: 12px;
  }
</style>

<div class="sahna">
  <div class="quti"></div>
</div>
Yechimni ko'rish
<style>
  body { font-family: sans-serif; }
  .sahna {
    height: 200px;
    background: #eef3fb;
    display: flex;
    justify-content: center;
    align-items: center;
  }
  .quti {
    width: 80px;
    height: 80px;
    background: tomato;
    border-radius: 12px;
  }
</style>

<div class="sahna">
  <div class="quti"></div>
</div>

3-mashq Ijodiy: profil kartasi

Quyida profil kartasining HTML qismi tayyor. Uni Flexbox bilan chiroyli joylashtiring:

  1. .profil ni flex-konteyner qiling: rasm chapda, matn o'ngda, vertikal bo'yicha o'rtada, orasida 16px masofa.
  2. .tugmalar ichidagi ikki tugmani qatorga tering va orasiga 8px joy qo'ying.
  3. Ism va kasbni o'zingiznikiga almashtiring, ranglarni ham o'zingizga yoqqanidek tanlang.
<style>
  body { font-family: sans-serif; background: #f4f6fa; }
  .profil { background: white; padding: 16px;
            border-radius: 12px; max-width: 420px; }
  .profil img { width: 90px; height: 90px; border-radius: 50%; }
  .profil h3 { margin: 0; }
  .profil p { margin: 4px 0 10px; color: #666; }
  .tugmalar a { background: #1f4fa8; color: white; font-size: 14px;
                padding: 6px 12px; border-radius: 6px;
                text-decoration: none; }
</style>

<div class="profil">
  <img src="../assets/rasmlar/avatar.svg" alt="Avatar">
  <div>
    <h3>Aziza Karimova</h3>
    <p>Boshlovchi veb-dasturchi</p>
    <div class="tugmalar">
      <a href="#">Yozish</a>
      <a href="#">Kuzatish</a>
    </div>
  </div>
</div>
Namuna yechim
<style>
  body { font-family: sans-serif; background: #f4f6fa; }
  .profil { background: white; padding: 16px;
            border-radius: 12px; max-width: 420px;
            display: flex; align-items: center; gap: 16px; }
  .profil img { width: 90px; height: 90px; border-radius: 50%; }
  .profil h3 { margin: 0; }
  .profil p { margin: 4px 0 10px; color: #666; }
  .tugmalar { display: flex; gap: 8px; }
  .tugmalar a { background: #1f4fa8; color: white; font-size: 14px;
                padding: 6px 12px; border-radius: 6px;
                text-decoration: none; }
</style>

<div class="profil">
  <img src="../assets/rasmlar/avatar.svg" alt="Avatar">
  <div>
    <h3>Aziza Karimova</h3>
    <p>Boshlovchi veb-dasturchi</p>
    <div class="tugmalar">
      <a href="#">Yozish</a>
      <a href="#">Kuzatish</a>
    </div>
  </div>
</div>

O'zingizni sinang

Elementlarni qatorga terish uchun display: flex; qayerga yoziladi?

  1. Har bir elementga alohida
  2. Faqat <body> ga
  3. Elementlarni o'rab turgan ota elementga (konteynerga)
  4. Birinchi elementga

To'g'ri. display: flex konteynerga yoziladi va uning bevosita bolalari flex-elementlarga aylanadi.

justify-content: space-between; nima qiladi?

  1. Chetki elementlarni chetlarga yopishtiradi, bo'sh joyni elementlar orasida teng bo'ladi
  2. Hamma elementlarni o'rtaga yig'adi
  3. Elementlarni vertikal bo'yicha cho'zadi
  4. Elementlarni teskari tartibda teradi

To'g'ri. Shuning uchun u menyu panellarida juda ko'p ishlatiladi: logotip chapda, havolalar o'ngda.

Konteynerda flex-direction: column; yozilgan. Endi justify-content elementlarni qaysi yo'nalishda joylaydi?

  1. Chapdan o'ngga
  2. Hech qaysi — u column bilan ishlamaydi
  3. Diagonal bo'yicha
  4. Yuqoridan pastga (vertikal)

To'g'ri. column da asosiy o'q vertikal bo'ladi, justify-content esa doim asosiy o'q bo'yicha ishlaydi.

Elementni konteynerning aynan o'rtasiga (ikkala o'q bo'yicha) qo'yish uchun konteynerga nima yoziladi?

  1. text-align: center;
  2. display: flex; justify-content: center; align-items: center;
  3. display: flex; flex-wrap: wrap;
  4. margin: center;

To'g'ri. Mashhur uch qator! Faqat konteynerning balandligi bo'lishini unutmang.

Konteynerda .yon { width: 200px; } va .asosiy { flex: 1; } elementlari bor. .asosiy qancha joy egallaydi?

  1. Aniq 1px
  2. Konteynerning yarmini
  3. Yon paneldan qolgan barcha bo'sh joyni
  4. 200px

To'g'ri. flex: 1 — «bo'sh joyni ol». Yon panel bittagina bo'lgani uchun qolgan hamma joy .asosiy ga tegadi.

Xulosa

  • display: flex konteynerga yoziladi va uning bevosita bolalarini qatorga teradi.
  • Ikki o'q bor: justify-content — asosiy o'q bo'yicha, align-items — ko'ndalang o'q bo'yicha joylaydi.
  • gap — elementlar orasidagi masofa, flex-wrap: wrap — sig'maganlarni keyingi qatorga o'tkazish.
  • flex-direction: column elementlarni ustun qilib teradi va o'qlarni almashtiradi.
  • flex: 1 elementga yoziladi: u qolgan bo'sh joyni egallaydi.
  • Markazga qo'yish: display: flex; justify-content: center; align-items: center; (konteynerning balandligi bo'lsin).
  • Keyingi darsda ikki o'lchamli joylashuv — CSS Grid va sahifani telefonga moslashtirishni o'rganamiz.