Series: CSS Basics Lesson 18

CSS Asoslari - 18-dars

Flexbox'da min-width: auto muammosi va gap xossasining margin'dan afzalligini o'rganing. Flex item'larda qisqarish muammolari va layout masofalarini to'g'ri boshqarishni tushuning.

18-dars

O'zing nomla

1. min-width: auto nimaga muammo?

Muammo qayerdan chiqadi?

Flex item'larda default holat:

.item {
  min-width: auto;
}

Bu nimani anglatadi?

👉 "Men o'z kontentimdan kichik bo'lib qisqarmayman."

Nega bu muammo?

Tasavvur qil:

Container: 300px

Item ichida: juda uzun so'z yoki text

.item {
  flex: 1;
}

Sen kutasan: 👉 "Element qisqaradi"

Lekin: ❌ Qisqarmaydi ❌ Layout chiqib ketadi ❌ Scroll paydo bo'ladi

Sabab: 👉 min-width: auto

flex-shrink NIMA UCHUN ISHLAMAYDI?

Aslida ishlayapti, lekin:

flex-shrink qisqartirmoqchi

min-width: auto ruxsat bermaydi

Kontent "men siqilmayman" deydi

👉 min-width flex-shrink'dan kuchliroq

Vizual misol (klassik bug)

Navbar:

.nav {
  display: flex;
}

.title {
  flex: 1;
}

Ichida:

THIS_IS_A_VERY_LONG_TITLE_WITH_NO_SPACES

👉 Natija:

button chiqib ketadi

layout buziladi

TO'G'RI YECHIM

.title {
  min-width: 0;
}

Yoki:

.title {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

👉 Endi:

flex-shrink ishlaydi

text qisqaradi

UI saqlanadi

📌 min-width: 0 — flex'dagi oltin qoida

Qachon kerak?

👉 Agar item ichida:

text

input

image

iframe

👉 Va item:

flex: 1

yoki flex-grow > 0

📌 90% hollarda kerak bo'ladi.

min-width vs width

.item {
  width: 100px;
  min-width: auto;
}

👉 Baribir kontent ustun keladi.

.item {
  width: 100px;
  min-width: 0;
}

👉 Endi qisqaradi.

2. gap nega margindan yaxshi?

Muammo: margin bilan masofa qo'yish

Ko'p odam shunaqa qiladi:

.item {
  margin-right: 16px;
}

Bu bilan bir nechta muammo chiqadi 👇

1️⃣ Oxirgi element muammosi

Oxirgi elementda ham:

margin-right: 16px;

👉 Natija:

chetda ortiqcha bo'sh joy

dizayn nomutanosib

Shunda:

.item:last-child {
  margin-right: 0;
}

❌ Hack ❌ Qo'shimcha kod ❌ Xato chiqishi mumkin

2️⃣ Yo'nalish o'zgarsa — hammasi buziladi

.container {
  flex-direction: column;
}

Endi:

margin-right ishlamaydi

margin-bottom yozishga majbur bo'lasan

❌ Qayta yozish ❌ Responsive'da muammo

3️⃣ RTL va writing-mode muammosi

margin-left/right:

RTL tillarda (arab, ivrit)

writing-mode o'zgarsa

👉 noto'g'ri ishlaydi

Endi gapga o'tamiz

.container {
  display: flex;
  gap: 16px;
}

👉 Va TAMOM.

gap NIMA QILADI?

Faqat elementlar ORASIGA masofa qo'yadi

Boshiga va oxiriga tegmaydi

Yo'nalishga bog'liq emas

📌 Layout masofasi — container mas'uliyati

4️⃣ gap responsive'da mukammal

.container {
  gap: clamp(8px, 2vw, 24px);
}

👉 Masofa ekran o'lchamiga moslashadi 👉 Qo'shimcha media query yo'q

5️⃣ gap wrap bilan juda kuchli

.container {
  display: flex;
  flex-wrap: wrap;
  gap: 12px 24px;
}

👉 Bu:

row-gap: 12px

column-gap: 24px

margin ishlatiladi:

tashqi masofa (componentlar ORASI)

elementni surish (margin-left: auto)

element o'ziga xos joylashsa

gap ishlatiladi:

ichki elementlar orasidagi masofa

flex/grid layout ichida