CSS'da responsive-dizaynni qanday amalga oshirish mumkin?
Savol
CSS'dagi moslashuvchan (responsive) dizayn qanday tuzilgan: media so'rovlar (media queries) nima, mobile-first yondashuvi desktop-first'dan nimasi bilan farq qiladi va buning uchun qanday o'lchov birliklari ishlatiladi?
Qisqa javob
Responsive-dizayn viewport xususiyatlariga qarab turli stillarni qo'llaydigan media so'rovlar (@media) va kontekstga o'zi moslashadigan nisbiy o'lchov birliklari asosida quriladi. Mobile-first shuni anglatadiki, bazaviy stillar kichik ekran uchun yoziladi, min-width media so'rovlari esa katta ekranlar uchun stillarni qo'shadi/qayta belgilaydi.
Batafsil javob
Media so'rovlar (@media) shartlar bajarilganda (viewport kengligi, orientatsiya, qurilma turi, prefers-color-scheme va h.k.) CSS-qoidalar blokini qo'llash imkonini beradi. Eng ko'p kenglik bo'yicha breykpointlar ishlatiladi: @media (min-width: 768px) { ... }.
Mobile-first va desktop-first:
- Mobile-first — bazaviy (media so'rovga o'ralmagan) stillar eng kichik ekran uchun yoziladi, keyin esa
min-widthorqali katta ekranlar uchun stillar qo'shilib, maket asta-sekin "qurib" boriladi. Bu progressiv yaxshilanish printsipiga mos keladi: mobil CSS soddaroq va yengilroq, murakkab ko'p ustunli raskladkalar esa baza ustiga qurilgan qo'shimcha. - Desktop-first — teskari yondashuv: bazaviy stillar desktop uchun,
max-widthmedia so'rovlari esa kichikroq ekranlar uchun maketni soddalashtiradi. Ko'pincha og'irroq va chalkash CSS'ga olib keladi, chunki desktop stillarini "bekor qilishga" to'g'ri keladi.
Zamonaviy amaliyotda mobile-first afzalroq hisoblanadi: u mobil qurilmalardagi unumdorlik ustuvorligiga va blok elementlarining tabiiy oqimiga (ular standart holda ustunga joylashadi, bu esa kichik ekranda aynan kerak bo'lgan narsa) yaxshiroq mos keladi.
Moslashuvchanlik uchun nisbiy birliklar:
%— otaga nisbatan.em— joriy elementningfont-sizeiga (yoki font bilan bog'liq bo'lmagan xususiyatlar uchun otaga) nisbatan.rem— root elementning (html)font-sizeiga nisbatan,emkabi ichma-ichlik effektini to'plamasligi bilan qulay.vw/vh— viewport kengligi/balandligiga nisbatan.clamp()— minimal, afzal (odatdavwda) va maksimal qiymatlarni belgilaydigan funksiya, bu esa media so'rovlarsiz butunlay moslashuvchan masshtablashga imkon beradi.
Misol
/* mobile-first: kichik ekran uchun bazaviy stillar */
.grid {
display: grid;
grid-template-columns: 1fr;
gap: 12px;
padding: 16px;
}
.title {
font-size: clamp(1.25rem, 4vw + 0.5rem, 2.5rem);
}
/* planshet va undan katta */
@media (min-width: 768px) {
.grid {
grid-template-columns: repeat(2, 1fr);
gap: 20px;
}
}
/* desktop va undan katta */
@media (min-width: 1200px) {
.grid {
grid-template-columns: repeat(3, 1fr);
padding: 32px;
}
}
Qo'shimcha savollar
- Nega mobile-first odatda yakuniy CSS'ni kompaktroq qiladi?
clamp()tipografika uchun media so'rovlar to'plamini qanday almashtirishi mumkin?- Container so'rovlar (
@container) moslashuvchanlikka yondashuvni@mediabilan solishtirganda qanday o'zgartiradi?