Viewportga emas, o'z konteyneri o'lchamiga moslashadigan responsiv va adaptiv maketlarni yaratish uchun CSS Konteyner So'rovlaridan foydalanishni o'rganing.
CSS Konteyner So'rovlari: Konteyner So'rovi Ta'rifiga oid To'liq Qo'llanma
Responsiv veb-dizayn sezilarli darajada rivojlandi. Dastlab, media so'rovlari asosiy tamal toshi bo'lib, maketlarning viewport o'lchamiga qarab moslashishiga imkon berardi. Biroq, veb-saytlar murakkablashib, komponentlarga asoslangan bo'lib borar ekan, yanada batafsil va moslashuvchan yondashuvga ehtiyoj paydo bo'ldi. Aynan shu yerda CSS Konteyner So'rovlari yordamga keladi.
CSS Konteyner So'rovlari nima?
CSS Konteyner So'rovlari dasturchilarga viewportga emas, balki elementning o'zini o'rab turuvchi element o'lchami yoki holatiga asoslanib uslublarni qo'llash imkonini beradi. Ushbu fundamental o'zgarish veb-sahifa ichidagi turli kontekstlarga muammosiz integratsiya qilinishi mumkin bo'lgan, haqiqatdan ham qayta ishlatiladigan va moslashuvchan komponentlarni yaratish imkonini beradi.
Tor yon panelga yoki keng asosiy kontent maydoniga joylashtirilganiga qarab o'z maketini moslashtirishi kerak bo'lgan kartochka komponentini tasavvur qiling. Konteyner so'rovlari yordamida bu moslashuv oddiy bo'lib, atrofdagi kontekstdan qat'i nazar, optimal taqdimotni ta'minlaydi.
Nima uchun Konteyner So'rovlaridan foydalanish kerak?
- Komponentlarning qayta ishlatilishini yaxshilash: Komponentlar haqiqatdan ham mustaqil va moslashuvchan bo'lib, veb-saytning turli qismlarida texnik xizmat ko'rsatishni soddalashtiradi va izchillikni ta'minlaydi.
- Batafsilroq nazorat: Viewportga bog'liq bo'lgan media so'rovlaridan farqli o'laroq, konteyner so'rovlari komponentning o'ziga xos muhitiga asoslangan holda uslublarni nozik nazorat qilishni taklif etadi.
- Soddalashtirilgan dasturlash: Komponent uslubini uning maketdagi joylashuviga qarab boshqarish uchun murakkab JavaScript yechimlariga bo'lgan ehtiyojni kamaytiradi.
- Yaxshilangan foydalanuvchi tajribasi: Turli qurilmalar va ekran o'lchamlarida optimal tajribalarni taqdim etib, kontent har doim eng munosib tarzda taqdim etilishini ta'minlaydi.
Konteynerni aniqlash
Konteyner so'rovlaridan foydalanishdan oldin, qaysi element konteyner vazifasini bajarishini aniqlab olishingiz kerak. Bu container-type
xususiyati yordamida amalga oshiriladi.
container-type
xususiyati
container-type
xususiyati elementning so'rov konteyneri ekanligini va agar shunday bo'lsa, u qanday turdagi konteyner ekanligini belgilaydi. U quyidagi qiymatlarni qabul qiladi:
size
: Konteynerning so'rov shartlari uning inline-size (gorizontal yozuv rejimlarida kenglik, vertikal yozuv rejimlarida balandlik) va block-size (gorizontal yozuv rejimlarida balandlik, vertikal yozuv rejimlarida kenglik) ga asoslanadi. Bu eng keng tarqalgan va ko'p qirrali variant.inline-size
: Konteynerning so'rov shartlari uning inline-size (gorizontal yozuv rejimlarida kenglik, vertikal yozuv rejimlarida balandlik) ga asoslanadi.normal
: Element so'rov konteyneri emas. Bu standart qiymat.style
: Element uslub konteyneridir. Uslub konteynerlari o'zlarida aniqlangan maxsus xususiyatlarni@container style()
so'rovi yordamida quyi elementlarga taqdim etadi. Bu maxsus xususiyatlarga asoslangan uslublar uchun foydalidir.
Misol:
.container {
container-type: size;
}
Ushbu kod parchasi container
klassiga ega elementni so'rov konteyneri sifatida belgilaydi va uning o'lchamini konteyner so'rovlari uchun mavjud qiladi.
Shu bilan bir qatorda, siz container: inline-size
yoki container: size
dan foydalanishingiz mumkin. container
qisqartma xususiyati bir deklaratsiyada ham container-type
, ham container-name
ni o'rnatishi mumkin. Konteyner nomi ichma-ich joylashgan konteynerlarda ma'lum bir konteynerni nishonga olish uchun ishlatiladi.
Konteyner So'rovlaridan foydalanish
Konteynerni aniqlaganingizdan so'ng, uning o'lchami yoki holatiga qarab uslublarni qo'llash uchun @container
@-qoidasidan foydalanishingiz mumkin.
@container
@-qoidasi
@container
@-qoidasi @media
@-qoidasiga o'xshaydi, lekin viewportni nishonga olish o'rniga, u ma'lum bir konteynerni nishonga oladi. Sintaksisi quyidagicha:
@container [container-name] (condition) {
/* Shart bajarilganda qo'llaniladigan uslublar */
}
container-name
(Ixtiyoriy): Agar siz konteyneringizgacontainer-name
xususiyati yordamida nom bergan bo'lsangiz, o'sha maxsus konteynerni nishonga olish uchun uni bu yerda ko'rsatishingiz mumkin. Agar ko'rsatilmasa, u eng yaqin ajdod konteynerga qo'llaniladi.condition
: Uslublar qo'llanilishi uchun bajarilishi kerak bo'lgan shart. Bu konteynerning kengligi, balandligi yoki boshqa xususiyatlariga asoslangan bo'lishi mumkin.
Misol:
.card {
display: flex;
flex-direction: column;
}
@container (min-width: 400px) {
.card {
flex-direction: row;
}
.card__image {
width: 40%;
}
.card__content {
width: 60%;
}
}
Ushbu misolda, .card
elementi uning konteyneri kamida 400px kengligida bo'lganda ustunli maketdan qatorli maketga o'tadi. .card__image
va .card__content
elementlari ham o'z kengliklarini mos ravishda o'zgartiradi.
Konteyner So'rovlari Birliklari
Konteyner so'rovlari konteyner o'lchamlariga nisbiy bo'lgan yangi birliklarni taqdim etadi:
cqw
: Konteyner kengligining 1%.cqh
: Konteyner balandligining 1%.cqi
: Konteynerning inline o'lchamining 1%.cqb
: Konteynerning block o'lchamining 1%.cqmin
:cqi
yokicqb
ning kichikrog'i.cqmax
:cqi
yokicqb
ning kattarog'i.
Ushbu birliklar konteyner o'lchamiga haqiqatan ham nisbiy bo'lgan uslublarni yaratishga imkon beradi, bu esa komponentlaringizni yanada moslashuvchan qiladi.
Misol:
.element {
font-size: 2cqw;
padding: 1cqh;
}
Ushbu misolda, .element
ning shrift o'lchami konteyner kengligining 2% ga, uning paddingi esa konteyner balandligining 1% ga teng bo'ladi.
Haqiqiy hayotdan misollar
Keling, konteyner so'rovlaridan responsiv va moslashuvchan komponentlarni yaratish uchun qanday foydalanish mumkinligiga oid ba'zi amaliy misollarni ko'rib chiqaylik.
1-misol: Kartochka Komponenti
Mahsulot haqida ma'lumot ko'rsatadigan kartochka komponentini ko'rib chiqaylik. Ushbu komponent sahifada qaerga joylashtirilganiga qarab o'z maketini moslashtirishi kerak bo'lishi mumkin.
HTML:
CSS:
.container {
container-type: inline-size;
width: 100%;
max-width: 800px;
margin: 0 auto;
}
.card {
display: flex;
flex-direction: column;
border: 1px solid #ccc;
padding: 16px;
}
.card__image {
width: 100%;
margin-bottom: 16px;
}
.card__title {
font-size: 1.5rem;
margin-bottom: 8px;
}
@container (min-width: 500px) {
.card {
flex-direction: row;
}
.card__image {
width: 40%;
margin-bottom: 0;
margin-right: 16px;
}
.card__content {
width: 60%;
}
}
Ushbu misolda, .container
elementi inline-size konteyneri sifatida belgilangan. Konteyner kengligi 500px dan kichik bo'lganda, kartochka komponenti rasm va kontentni ustunli maketda ko'rsatadi. Konteyner 500px yoki undan kengroq bo'lganda, kartochka komponenti qatorli maketga o'tadi, rasm chapda va kontent o'ngda joylashadi. Bu kartochka komponentining sahifada qaerga joylashtirilganidan qat'i nazar yaxshi ko'rinishini ta'minlaydi.
2-misol: Navigatsiya Menyu
Konteyner so'rovlari uchun yana bir keng tarqalgan holat - bu mavjud bo'sh joyga qarab navigatsiya menyusini moslashtirishdir.
HTML:
CSS:
.nav-container {
container-type: inline-size;
width: 100%;
background-color: #f0f0f0;
}
.nav {
padding: 16px;
}
.nav__list {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.nav__item {
margin-bottom: 8px;
}
.nav__link {
text-decoration: none;
color: #333;
padding: 8px 16px;
border: 1px solid #ccc;
border-radius: 4px;
}
@container (max-width: 400px) {
.nav__list {
flex-direction: column;
}
.nav__item {
margin-bottom: 16px;
}
.nav__link {
display: block;
width: 100%;
text-align: center;
}
}
Ushbu misolda, .nav-container
elementi inline-size konteyneri sifatida belgilangan. Konteyner kengligi 400px yoki undan kam bo'lganda, navigatsiya menyusi ustunli maketga o'tadi, har bir havola konteynerning to'liq kengligini egallaydi. Konteyner 400px dan kengroq bo'lganda, navigatsiya menyusi havolalarni bir qatorda, ular orasida bo'sh joy bilan ko'rsatadi. Bu navigatsiya menyusining turli ekran o'lchamlari va yo'nalishlariga moslashishiga imkon beradi.
Ichma-ich joylashgan konteynerlar
Konteyner so'rovlari ichma-ich joylashtirilishi mumkin, bu esa uslublarni yanada murakkab va batafsil nazorat qilish imkonini beradi. Ichma-ich joylashganda ma'lum bir konteynerni nishonga olish uchun, konteynerlaringizga noyob nomlar berish uchun container-name
xususiyatidan foydalanishingiz mumkin. Keyin, @container
@-qoidangizda, siz nishonga olmoqchi bo'lgan konteyner nomini belgilashingiz mumkin.
Misol:
Kontent
.outer-container {
container-type: inline-size;
container-name: outer;
}
.inner-container {
container-type: inline-size;
container-name: inner;
}
@container outer (min-width: 500px) {
.inner-container {
background-color: lightblue;
}
}
@container inner (min-width: 300px) {
p {
font-size: 1.2rem;
}
}
Ushbu misolda, .outer-container
"outer" deb nomlangan va .inner-container
"inner" deb nomlangan. Birinchi @container
@-qoidasi "outer" konteynerini nishonga oladi va "outer" konteyneri kamida 500px kengligida bo'lganda .inner-container
ga fon rangini qo'llaydi. Ikkinchi @container
@-qoidasi "inner" konteynerini nishonga oladi va "inner" konteyneri kamida 300px kengligida bo'lganda p
elementining shrift o'lchamini oshiradi.
Brauzerlarda qo'llab-quvvatlanishi
Konteyner so'rovlari a'lo darajada va o'sib borayotgan brauzer qo'llab-quvvatlashiga ega. Aksariyat zamonaviy brauzerlar container-type
, container-name
va @container
xususiyatlarini to'liq qo'llab-quvvatlaydi. Eng so'nggi muvofiqlik ma'lumotlari uchun Can I use saytini tekshirish har doim yaxshi fikrdir.
Konteyner so'rovlarini qo'llab-quvvatlamaydigan eski brauzerlar uchun zaxira yordamini ta'minlash uchun polifillardan foydalanishingiz mumkin. Biroq, polifillar tabiiy konteyner so'rovlari xatti-harakatini mukammal takrorlamasligi va sahifaning yuklanish vaqtiga qo'shimcha yuk bo'lishi mumkinligini yodda tutish muhim.
Eng yaxshi amaliyotlar
Konteyner so'rovlari bilan ishlashda yodda tutish kerak bo'lgan ba'zi eng yaxshi amaliyotlar:
- Mobile-First bilan boshlang: Komponentlaringizni avval eng kichik konteyner o'lchami uchun loyihalashtiring, so'ngra kattaroq konteynerlar uchun maketni bosqichma-bosqich yaxshilash uchun konteyner so'rovlaridan foydalaning.
- Mazmunli konteyner nomlaridan foydalaning: Agar konteynerlarni ichma-ich joylashtirayotgan bo'lsangiz, har bir konteynerning maqsadini aniq ko'rsatadigan tavsiflovchi nomlardan foydalaning.
- Haddan tashqari murakkab so'rovlardan saqlaning: Konteyner so'rovlaringizni oddiy va aniq maqsadli qilib saqlang. Juda ko'p murakkab so'rovlar kodingizni tushunish va saqlashni qiyinlashtirishi mumkin.
- Puxta sinovdan o'tkazing: Komponentlaringizning to'g'ri moslashishini ta'minlash uchun ularni turli xil konteyner o'lchamlari va kontekstlarida sinab ko'ring.
- Ishlash samaradorligini hisobga oling: Konteyner so'rovlarining ishlash samaradorligiga ta'sirini, ayniqsa murakkab so'rovlar yoki ko'p sonli konteynerlardan foydalanganda, yodda tuting.
Maxsus imkoniyatlar (Accessibility) bo'yicha mulohazalar
Konteyner so'rovlari asosan vizual maket o'zgarishlariga qaratilgan bo'lsa-da, komponentlaringiz hamma uchun foydalanishga yaroqli bo'lishini ta'minlash uchun maxsus imkoniyatlarni hisobga olish juda muhim.
- Semantik tuzilmani saqlang: Konteyner o'lchamidan qat'i nazar, asosiy HTML tuzilmasi semantik va kirish mumkin bo'lib qolishini ta'minlang.
- Yordamchi texnologiyalar bilan sinab ko'ring: Kontent hali ham kirish mumkin va tushunarli ekanligini tekshirish uchun komponentlaringizni ekran o'quvchilari va boshqa yordamchi texnologiyalar bilan sinab ko'ring.
- Alternativ kontent taqdim eting: Agar konteyner o'lchami kontentni sezilarli darajada o'zgartirsa, nogironligi bo'lgan foydalanuvchilar ma'lumotlarga kirishini ta'minlash uchun alternativ kontent yoki mexanizmlarni taqdim etishni ko'rib chiqing.
O'lchamdan tashqari: Holat So'rovlari
O'lchamga asoslangan konteyner so'rovlari eng keng tarqalgan bo'lsa-da, konteyner so'rovlarining kelajagi faqat o'lcham bilan cheklanmaydi. Uslub so'rovlari va holat so'rovlari uchun yangi spetsifikatsiyalar va takliflar paydo bo'lmoqda.
Uslub So'rovlari sizga konteynerda belgilangan maxsus xususiyatlarga asoslanib uslublarni qo'llash imkonini beradi. Bu dinamik ma'lumotlar va konfiguratsiyaga asoslangan kuchli uslublarni yaratishga imkon beradi.
Holat So'rovlari sizga konteynerning holatini, masalan, uning fokusda, ustiga sichqoncha bilan olib borilgan yoki unga ma'lum bir klass qo'llanilganligini so'rash imkonini beradi. Bu foydalanuvchi o'zaro ta'siriga javob beradigan adaptiv komponentlar uchun yanada ko'proq imkoniyatlar ochishi mumkin.
Xulosa
CSS Konteyner So'rovlari responsiv va moslashuvchan veb-komponentlarni yaratish uchun kuchli vositadir. Elementlarni ularning o'rab turuvchi elementining o'lchami yoki holatiga qarab uslublashga imkon berish orqali, konteyner so'rovlari an'anaviy media so'rovlariga qaraganda responsiv dizaynga yanada batafsil va moslashuvchan yondashuvni taklif etadi. Brauzerlarni qo'llab-quvvatlash yaxshilanishda davom etar ekan, konteyner so'rovlari har bir veb-dasturchining asboblar to'plamining muhim qismiga aylanishga tayyor. Global auditoriya uchun yanada mustahkam, qayta ishlatiladigan va foydalanuvchiga qulay veb-tajribalarini yaratish uchun ularni qabul qiling.
Konteyner so'rovlari tomonidan ochilgan imkoniyatlar oddiy maket o'zgarishlaridan ancha uzoqqa boradi. Ular turli vaziyatlarga moslasha oladigan kontekstga sezgir komponentlarni yaratishga imkon beradi, natijada yanada uzluksiz va intuitiv foydalanuvchi tajribasi paydo bo'ladi. Ushbu kuchli xususiyatni o'rganar ekansiz, u veb-loyihalaringizning qayta ishlatilishi, texnik xizmat ko'rsatish qulayligi va moslashuvchanligini qanday oshirishi mumkinligini o'ylab ko'ring, natijada yanada inklyuziv va global miqyosda kirish mumkin bo'lgan veb-saytga hissa qo'shing.
Konteyner so'rovlarining kuchidan foydalanib, siz nafaqat vizual jihatdan jozibali, balki global auditoriyaning turli ehtiyojlarini qondiradigan, yuqori darajada moslashuvchan va foydalanuvchiga yo'naltirilgan veb-tajribalarini yaratishingiz mumkin.