Responsive Design — Mobile First kontseptsiyasi
Muammodan boshlaylik
Siz saytni kompyuterda yasadingiz: uch ustun, katta rasmlar, keng menyu. Chiroyli. Keyin telefonda ochasiz:
- Hamma narsa mitti — sahifa butunligicha kichraytirilgan, o'qish uchun barmoq bilan kattalashtirish kerak
- Yoki sahifa ekrandan chiqib ketgan — chapga-o'ngga suriladi
- Menyu havolalari bir-birining ustiga tushgan, barmoq bilan bosib bo'lmaydi
O'zbekistonda veb-trafikning katta qismi — telefonlardan. Telefonda yomon ko'rinadigan sayt — foydalanuvchilarning ko'pchiligi uchun yomon sayt. Va Google ham saytlarni birinchi navbatda mobil versiyasi bo'yicha baholaydi (mobile-first indexing).
Responsive design nima
Responsive (moslashuvchan) dizayn — bitta sayt, bitta HTML, har qanday ekranga moslashadi: telefon, planshet, noutbuk, katta monitor. Alohida m.sayt.uz mobil versiyasi emas.
Uch asosiy tarkibiy qism:
- Viewport meta tegi — brauzerga "sahifani kichraytirma"
- Moslashuvchan layout — Flexbox, Grid,
%,fr,minmax(3–4-bo'limlar) - Media query lar — ekran o'lchamiga qarab stil o'zgartirish (26-dars)
Va qo'shimcha: moslashuvchan rasmlar va shriftlar (27-dars).
1. Viewport meta tegi — majburiy
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
Busiz telefon brauzeri sahifani 980px kenglikdagi kompyuter ekrani deb hisoblaydi va uni butunligicha kichraytirib ko'rsatadi — darsning boshidagi "hamma narsa mitti" muammosi. Bu teg aytadi: "sahifa kengligi — qurilma ekranining haqiqiy kengligi".
Har bir HTML sahifaning <head> ida bo'lishi shart. Vite, Next.js va boshqa vositalar uni shablonga o'zi qo'shadi.
[!WARNING]
maximum-scale=1yokiuser-scalable=noqo'shmang. Ular foydalanuvchiga sahifani barmoq bilan kattalashtirishni taqiqlaydi — ko'rish qobiliyati past odamlar uchun sayt foydalanib bo'lmaydigan bo'lib qoladi.
2. Moslashuvchan asos
Oldingi darslardagi vositalarning ko'pi o'zi responsive:
img,
video {
max-width: 100%; /* konteynerdan kengroq bo'lmasin (11-dars) */
height: auto; /* nisbat saqlansin */
}
.container {
width: 100%;
max-width: 1200px; /* katta ekranda cho'zilib ketmasin */
margin-inline: auto; /* markazda */
padding-inline: 16px; /* telefonda chetga yopishmasin */
}
.products {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(min(240px, 100%), 1fr)); /* 22-dars */
gap: 24px;
}
Bu kod media query siz telefondan katta monitorgacha yaxshi ishlaydi. Qoida: avval o'zi moslashadigan layout yozing, media query ni faqat haqiqatan kerak bo'lgan joyda qo'shing.
3. Mobile First
Responsive saytni ikki yo'nalishda yozish mumkin:
Desktop First — avval kompyuter uchun, keyin kichik ekranlar uchun olib tashlash:
.cards { grid-template-columns: repeat(3, 1fr); }
@media (max-width: 900px) { .cards { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .cards { grid-template-columns: 1fr; } }
Mobile First — avval telefon uchun (eng oddiy), keyin katta ekranlar uchun qo'shish:
.cards { display: grid; gap: 16px; } /* telefon: bitta ustun — standart */
@media (min-width: 600px) { .cards { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 900px) { .cards { grid-template-columns: repeat(3, 1fr); } }
| Desktop First | Mobile First | |
|---|---|---|
| Asosiy CSS | Kompyuter uchun | Telefon uchun |
| Media query | max-width |
min-width |
| Yo'nalish | Murakkabdan soddaga — olib tashlash, bekor qilish | Soddadan murakkabga — qo'shish |
| Telefon nimani yuklaydi | Hammasini, keyin bekor qiladi | Faqat kerakli minimumni |
Nima uchun Mobile First yaxshiroq
1. Kamroq kod. Telefon layouti odatda oddiy: bitta ustun, ustma-ust. Bu — brauzerning standart xatti-harakati (blok elementlar ustma-ust). Mobile First da telefon uchun deyarli hech narsa yozmaysiz. Desktop First da esa kompyuter layoutini telefon uchun bekor qilish kerak: float: none, width: auto, display: block — ortiqcha kod.
2. Prioritetlar. Kichik ekran sizni "eng muhim nima?" deb o'ylashga majbur qiladi. Avval asosiy kontent va funksiya, keyin katta ekranda qo'shimchalar (sidebar, qo'shimcha ma'lumot). Teskarisi — kompyuterdagi hamma narsani telefonga "tiqishga" urinish.
3. Tezlik. Telefon — ko'pincha sekinroq protsessor va mobil internet. U minimal CSS ni o'qiydi; katta ekranlar uchun qoidalar unga tegishli emas.
Mobil foydalanish qulayligi
Responsive — faqat layout emas:
| Talab | Qiymat |
|---|---|
| Bosiladigan elementlar (tugma, havola) | Kamida 44×44px — barmoq bilan bosish uchun |
| Asosiy shrift | Kamida 16px (12-dars) — iOS kichik shriftli input da sahifani kattalashtiradi |
| Elementlar orasidagi bo'shliq | Yonma-yon tugmalar orasida kamida 8px |
| Gorizontal scroll | Yo'q (10-dars) |
| Hover ga bog'liq funksiya | Telefonda hover yo'q — muhim ma'lumotni faqat :hover da ko'rsatmang |
@media (hover: hover) {
.card:hover { transform: translateY(-4px); } /* faqat sichqonchali qurilmalarda */
}
Sinash
- DevTools → Device Toolbar (Ctrl+Shift+M): turli telefonlar, istalgan kenglik, aylantirish
- Kenglikni sekin torayting va layout qayerda buzilishini kuzating — breakpoint lar o'sha joylarda bo'lishi kerak (26-dars)
- Haqiqiy telefonda ham sinang: barmoq bilan bosish, haqiqiy shrift o'lchami, sekin internet — emulyatorda sezilmaydi
- Eng tor holat — 320px (eski va kichik telefonlar)
Nima uchun shunday?
Nima uchun telefon va kompyuter uchun alohida saytlar (m.sayt.uz) o'rniga bitta responsive sayt?
Alohida versiyalar ikki baravar ish: ikki xil kod, ikki xil xato, va har bir yangi funksiya ikki marta. Qurilmalar esa ikkita emas — minglab: kichik telefon, katta telefon, buklanadigan telefon, planshet, noutbuk, televizor. "Mobil" va "desktop" chegarasi yo'qolib ketgan. Bitta sayt, ekran o'lchamiga moslashadigan — har qanday mavjud va kelajakdagi qurilma uchun ishlaydi. Bundan tashqari, bitta URL — ulashish oson, va Google uchun ham bitta sahifa (alohida mobil versiyalar dublikat kontent muammosini keltirib chiqaradi).
Xulosa
Eslab qoling:
- Responsive — bitta sayt, har qanday ekranga moslashadi
<meta name="viewport" content="width=device-width, initial-scale=1">— majburiy; zoom ni taqiqlamang- Asos:
img { max-width: 100% },max-width+margin-inline: auto, Gridauto-fill - Mobile First — avval telefon (oddiy), keyin
min-widthbilan qo'shish - Kamroq kod, aniq prioritetlar, telefon uchun tezroq
- Bosish maydoni ≥ 44px, shrift ≥ 16px, gorizontal scroll yo'q
@media (hover: hover)— hover effektlar faqat sichqonchali qurilmalarda- DevTools Device Toolbar + haqiqiy telefon
Keyingi dars
26-dars: Media Queries — min-width, max-width, orientation