Responsive dizayn
Responsive dizayn (moslashuvchan dizayn) โ saytning telefon, planshet va kompyuterning turli ekran o'lchamlarida bir xil chiroyli va qulay ko'rinishini ta'minlash usuli. Bugungi kunda internet trafikning katta qismi telefonlardan keladi, shuning uchun sayt har qanday ekranga moslashishi โ majburiy talab. Bu darsda saytni moslashuvchan qilishning barcha asosiy vositalarini o'rganamiz.
Nega px yetarli emas?
px (piksel) โ qat'iy (fixed) birlik. Agar butun saytni piksellar bilan qursangiz (masalan, width: 960px), u telefon ekranida (kengligi ~360px) sig'may qoladi va foydalanuvchi gorizontal aylantirishga majbur bo'ladi. Shuning uchun moslashuvchan birliklar kerak.
CSS birliklari
Bir necha muhim birlik bor. Ularni to'g'ri tanlash โ responsive dizaynning yarmini hal qiladi:
px โ piksel (mutlaq)
Qat'iy o'lcham. Chegara qalinligi (border) yoki juda aniq bo'lishi kerak bo'lgan kichik o'lchamlar uchun mos. Katta joylashuvlar uchun tavsiya etilmaydi.
% โ foiz (nisbiy)
Ota elementga nisbatan o'lcham. width: 50% โ ota elementning yarmi kengligi. Ota o'zgarsa, farzand ham moslashadi. Moslashuvchan kengliklar uchun juda foydali.
.yon-panel {
width: 30%;
}
.asosiy {
width: 70%;
}
em โ ota shriftga nisbatan
1em = ota elementning shrift o'lchami. Agar ota shrifti 16px bo'lsa, 2em = 32px. Muammosi: em'lar bir-birining ichida ko'payib ketishi mumkin (ichma-ich elementlarda).
rem โ ildiz shriftga nisbatan (eng tavsiya etiladigan)
rem (root em) har doim ildiz elementga (<html>) nisbatan hisoblanadi. Standart holatda html shrifti 16px, demak 1rem = 16px, 1.5rem = 24px. em'ning ko'payib ketish muammosi rem'da yo'q, shuning uchun rem โ o'lcham va masofalar uchun eng ishonchli tanlov.
html {
font-size: 16px; /* 1rem = 16px */
}
h1 {
font-size: 2rem; /* 32px */
}
.karta {
padding: 1.5rem; /* 24px */
}
vw va vh โ ekran o'lchamiga nisbatan
vw (viewport width) โ ekran kengligining 1%'i; vh (viewport height) โ ekran balandligining 1%'i. 100vw = butun ekran kengligi, 100vh = butun ekran balandligi. To'liq ekranli bo'limlar (hero section) uchun juda qulay:
.hero {
width: 100vw;
height: 100vh; /* butun ekranni egallaydi */
}
Viewport meta tegi โ birinchi qadam
Responsive sayt yaratishning eng birinchi va majburiy qadami โ HTML'ning <head> qismiga viewport meta tegini qo'yish. Usiz media query'lar telefonda to'g'ri ishlamaydi:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
Media query โ @media
Media query โ ekran o'lchamiga (yoki boshqa shartga) qarab turli CSS qoidalarini qo'llash imkonini beradi. U @media bilan boshlanadi va ichida shart hamda odatiy CSS qoidalari bo'ladi:
/* Ekran kengligi 600px yoki undan kichik bo'lsa */
@media (max-width: 600px) {
.konteyner {
flex-direction: column;
}
h1 {
font-size: 1.5rem;
}
}
Bu shunday ishlaydi: ekran 600px'dan keng bo'lsa, ichkaridagi qoidalar e'tiborga olinmaydi; ekran 600px yoki tor bo'lsa, ular qo'llaniladi. Shu tarzda telefonda joylashuvni gorizontaldan vertikalga o'zgartirasiz.
max-width: 600pxโ ekran shu qiymat yoki undan tor bo'lganda;min-width: 600pxโ ekran shu qiymat yoki undan keng bo'lganda.
Mobile-first yondashuv
Ikki xil yondashuv bor: desktop-first (avval katta ekran, keyin max-width bilan kichraytirish) va mobile-first (avval telefon, keyin min-width bilan kattalashtirish). Zamonaviy amaliyot โ mobile-first.
Mobile-first'da asosiy CSS'ni eng kichik (telefon) ekran uchun yozasiz, so'ng min-width media query'lari bilan kattaroq ekranlarga qo'shimchalar qo'shasiz:
/* Asosiy uslub โ telefon uchun (mobile-first) */
.karta {
width: 100%;
}
/* Planshet: 768px va undan keng */
@media (min-width: 768px) {
.karta {
width: 50%;
}
}
/* Kompyuter: 1024px va undan keng */
@media (min-width: 1024px) {
.karta {
width: 33.33%;
}
}
Breakpointlar
Breakpoint โ joylashuv o'zgaradigan ekran kengligi (media query'dagi qiymat). Universal standart yo'q, lekin keng tarqalgan qiymatlar:
- ~480px โ kichik telefonlar;
- ~768px โ planshetlar;
- ~1024px โ kichik noutbuklar;
- ~1280px va undan katta โ katta ekranlar.
Moslashuvchan rasm va matn
Rasmlar ota elementdan chiqib ketmasligi uchun ularga oddiy, lekin muhim qoida beriladi:
img {
max-width: 100%;
height: auto;
}
max-width: 100% โ rasm ota elementdan kengroq bo'lmaydi (kichrayadi, lekin haqiqiy o'lchamidan kattalashmaydi). height: auto โ balandlik nisbatini saqlaydi, rasm cho'zilib buzilmaydi.
Matnni ham moslashuvchan qilish mumkin. Zamonaviy clamp() funksiyasi shrift o'lchamini ekranga qarab avtomatik moslaydi โ eng kichik va eng katta chegara orasida:
h1 {
/* min 1.5rem, ideal 5vw, max 3rem */
font-size: clamp(1.5rem, 5vw, 3rem);
}
Bu shuni anglatadi: shrift ekran bilan (5vw) o'sadi, lekin hech qachon 1.5rem'dan kichik yoki 3rem'dan katta bo'lmaydi. Media query'siz moslashuvchan sarlavha!
Amaliy misol: moslashuvchan karta panjarasi
Grid va media query birgalikda โ telefonda 1 ustun, planshetda 2, kompyuterda 3 ustunli galereya:
/* Mobile-first: 1 ustun */
.galereya {
display: grid;
grid-template-columns: 1fr;
gap: 1rem;
}
@media (min-width: 768px) {
.galereya { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1024px) {
.galereya { grid-template-columns: repeat(3, 1fr); }
}
Xulosa
- Responsive dizayn โ sayt barcha ekranlarga moslashishi;
- Birliklar:
px(qat'iy),%(otaga nisbatan),rem(ildizga โ tavsiya etiladi),vw/vh(ekranga); - Majburiy birinchi qadam โ viewport meta tegi;
@mediaโ ekran o'lchamiga qarab uslubni o'zgartiradi (min-width/max-width);- Mobile-first โ avval telefon uchun, keyin
min-widthbilan kattalashtirish; - Breakpointlarni dizayn buzilgan nuqtaga qarab tanlang;
img { max-width: 100%; height: auto; }โ moslashuvchan rasm;clamp()โ media query'siz moslashuvchan shrift o'lchami.