CSS Units — px, em, rem, %, vw, vh, ch
Muammodan boshlaylik
Saytingizdagi hamma narsa px da: shrift 16px, sarlavha 32px, bo'shliqlar 20px. Kompyuterda chiroyli.
Keyin ko'rish qobiliyati past foydalanuvchi brauzer sozlamalarida shriftni "Katta" qiladi — va saytingizda hech narsa o'zgarmaydi. Boshqa foydalanuvchi telefonda ochadi — sarlavha juda katta, ekranning yarmini egallaydi. Uchinchisi 27 dyuymli monitorda — matn qatorlari 200 belgidan uzun, o'qish qiyin.
CSS da o'nga yaqin o'lchov birligi bor, va ularning har biri boshqa narsaga nisbatan o'lchaydi. To'g'ri birlikni tanlash — sayt har qanday ekran va sozlamada yaxshi ko'rinishining kaliti.
Absolyut va nisbiy birliklar
- Absolyut — doim bir xil:
px(amalda yagona ishlatiladigani) - Nisbiy — boshqa narsaga nisbatan: shrift o'lchami (
em,rem), ota element (%), ekran (vw,vh)
px — piksel
.border { border: 1px solid #e2e8f0; }
- Aniq, oldindan aytib bo'ladi
- Foydalanuvchi shrift sozlamasiga bog'liq emas
[!INFO] CSS dagi
1px— ekrandagi bitta fizik nuqta emas. U "mantiqiy piksel": Retina/HiDPI ekranlarda 1 CSS piksel 2 yoki 3 fizik nuqtaga teng. Shuning uchun16pxmatn telefonda ham, 4K monitorda ham taxminan bir xil o'lchamda ko'rinadi.
Qachon: chegaralar (1px), soyalar, ikonkalar, juda kichik aniq detallar.
rem — ildiz shriftiga nisbatan
html {
font-size: 100%; /* standart: 16px (foydalanuvchi sozlamasi) */
}
h1 { font-size: 2rem; } /* 32px */
p { font-size: 1rem; } /* 16px */
.sm { font-size: 0.875rem; } /* 14px */
1rem = <html> elementining shrift o'lchami. Standartda — 16px, lekin foydalanuvchi brauzerda "Katta shrift" ni tanlasa — masalan 20px, va barcha rem qiymatlar proporsional kattalashadi.
Darsning boshidagi 1-muammo hal: shriftlarni rem da yozing.
.card {
padding: 1.5rem; /* 24px — shrift bilan birga kattalashadi */
border-radius: 0.5rem;
font-size: 1rem;
}
[!WARNING]
html { font-size: 16px; }yoki62.5%hiylalari bilan ildiz o'lchamini qattiq qo'ymang.16pxfoydalanuvchi sozlamasini butunlay bekor qiladi.100%(yoki umuman yozmaslik) — foydalanuvchi tanlovini hurmat qiladi.
Qachon: shrift o'lchamlari, bo'shliqlar (padding, margin, gap), komponent o'lchamlari — asosiy birlik.
em — joriy shriftga nisbatan
.btn {
font-size: 1rem;
padding: 0.75em 1.5em; /* shrift o'lchamiga nisbatan */
}
.btn-lg {
font-size: 1.25rem; /* padding avtomatik kattalashadi */
}
1em = shu elementning shrift o'lchami. Tugma kattalashsa — padding ham proporsional kattalashadi, qo'shimcha kod yozmasdan.
em ning tuzog'i — ichma-ich ko'payish
font-size da em ishlatilsa — u ota elementning shriftiga nisbatan bo'ladi va ichma-ich ko'payib ketadi:
li { font-size: 1.2em; }
<ul>
<li>1-daraja — 19.2px
<ul>
<li>2-daraja — 23.04px
<ul>
<li>3-daraja — 27.65px ← o'sib boryapti!</li>
</ul>
</li>
</ul>
</li>
</ul>
rem bunday qilmaydi — u har doim ildizga nisbatan. Shuning uchun:
font-sizeuchun —rem- Komponent ichidagi padding/margin uchun —
em(shriftga moslashsin)
% — ota elementga nisbatan
.sidebar { width: 25%; } /* otaning kengligining chorak qismi */
.main { width: 75%; }
img { max-width: 100%; } /* ota dan kengroq bo'lmasin */
% nimaga nisbatan — xususiyatga bog'liq:
| Xususiyat | % nimaga nisbatan |
|---|---|
width, padding, margin (hatto vertikal ham!) |
Otaning kengligi |
height |
Otaning balandligi (ota balandligi aniq bo'lsa) |
font-size |
Otaning shrifti |
transform: translate() |
Elementning o'zi |
[!INFO]
height: 50%ko'pincha "ishlamaydi" — chunki otaning balandligi kontentga qarab belgilanadi (aniq emas). Foiz hisoblash uchun ota balandligi aniq bo'lishi kerak (height: 400pxyoki Flex/Grid).
img { max-width: 100%; } — responsive dizaynning eng muhim qatori: rasm o'z konteyneridan hech qachon kengroq bo'lmaydi.
vw, vh — ekran o'lchamiga nisbatan
.hero {
min-height: 100vh; /* butun ekran balandligi */
}
.banner-title {
font-size: 5vw; /* ekran kengligining 5% */
}
1vw= ekran (viewport) kengligining 1%1vh= ekran balandligining 1%vmin/vmax— kengligi va balandligidan kichigi / kattasi
Mobil telefonlardagi 100vh muammosi
Telefonda brauzer manzil paneli paydo bo'ladi va yo'qoladi. 100vh ba'zan uni hisobga olmaydi — natijada pastki tugma ekrandan tashqarida qoladi. Yangi birliklar:
.fullscreen {
min-height: 100dvh; /* dinamik — panel holatiga moslashadi */
}
| Birlik | Ma'nosi |
|---|---|
svh |
Kichik — panellar ochiq holatdagi balandlik |
lvh |
Katta — panellar yashiringan holatdagi |
dvh |
Dinamik — joriy holatga qarab o'zgaradi |
To'liq ekranli bloklar uchun bugun — 100dvh (eski brauzerlar uchun oldin 100vh yozib qo'yish mumkin).
[!WARNING]
width: 100vw— gorizontal scroll ning tez-tez uchraydigan sababi (10-dars):vwscroll panelining kengligini ham o'z ichiga oladi. Butun kenglik uchunwidth: 100%ishlating.
ch — belgi kengligi
.article {
max-width: 65ch; /* taxminan 65 belgilik qator */
}
input.pin {
width: 6ch; /* 6 raqamli kod uchun */
}
1ch = shu shriftdagi "0" raqamining kengligi. Qulay o'qiladigan qator uzunligi — 45–75 belgi. Darsning boshidagi 3-muammo: katta monitorda ham matn max-width: 65ch bilan o'qish uchun qulay kenglikda qoladi.
Qaysi birini qachon
| Vazifa | Birlik |
|---|---|
| Shrift o'lchami | rem |
| Bo'shliqlar, padding, gap | rem |
| Tugma ichidagi padding (shriftga mos) | em |
| Chegara, soya, ingichka chiziq | px |
| Ustun kengligi, rasm | %, fr (Grid — 19-dars) |
| Matn qatori uzunligi | ch |
| To'liq ekranli blok | dvh / vh |
| Ekranga moslashuvchan shrift | clamp() + vw (27-dars) |
0 uchun birlik yozish shart emas: margin: 0.
Nima uchun shunday?
Nima uchun bunchalik ko'p birlik — hamma narsani px da yozsa bo'lmaydimi?
Chunki veb — qog'oz emas. Bosma dizaynda varaq o'lchami bitta va doim ma'lum; vebda esa sahifa 320px telefondan 3840px monitorgacha, standart shriftdan 200% kattalashtirilgan shriftgacha ko'rinadi — va dizayner ularning birortasini oldindan bilmaydi. Har bir birlik boshqa savolga javob beradi: "foydalanuvchi qanday shrift tanlagan?" (rem), "bu komponent qancha katta?" (em), "konteyner qancha joy beradi?" (%), "ekran qancha?" (vw). To'g'ri birlik bilan siz qiymatni emas, munosabatni yozasiz — va sayt o'zi har qanday holatga moslashadi.
Xulosa
Eslab qoling:
px— aniq, sozlamaga bog'liq emas; chegaralar va mayda detallar uchunrem— ildiz shriftiga nisbatan; shrift va bo'shliqlar uchun asosiy birlikem— joriy shriftga nisbatan;font-sizeda ichma-ich ko'payadi%— otaga nisbatan; padding/margin foizi — otaning kengligidanvw/vh— ekranga nisbatan; mobil uchundvh;100vwo'rniga100%ch— qator uzunligi:max-width: 65chhtml { font-size }ni qattiqpxda qo'ymang
Keyingi dars
12-dars: Font va Text — family, size, weight, align, decoration