Mundarija (44)
- Bu darsda
- 1. Nega bu kerak?
- 2. "Ishlata olamanmi?" — uch manba
- 2.1 Baseline — bitta belgi
- 2.2 caniuse.com — foiz va tafsilot
- 2.3 MDN moslik jadvali — versiyalar
- 2.4 Interop — brauzerlar kelishuvi
- 3. Eng oddiy zaxira — kaskad
- 3.1 Ikki qator
- 3.2 Kaskad yetmaydigan uch holat
- 4. @supports sintaksisi
- 4.1 Asosiy shakl
- 4.2 not, and, or
- 4.3 selector() — selektorni tekshirish
- 4.4 Shriftlar uchun
- 4.5 Brauzeringiz nimalarni biladi?
- 5. Va'dalarni bajaramiz
- 5.1 Nisbiy rang va var()
- 5.2 Gradient matn
- 5.3 Masonry: yangi va eski
- 5.4 @supports nimani tekshirmaydi
- 6. Progressive enhancement va graceful degradation — CSS'da
- 7. Vendor prefikslar: qisqa tarix
- 7.1 Nima edi
- 7.2 Nega muvaffaqiyatsiz bo'ldi
- 7.3 Bugun nima qilamiz
- 8. Boshqa brauzerlarda sinash
- 8.1 Chrome yetmaydi
- 8.2 Yo'llar
- 9. Polyfill — CSS'da kam
- 10. Ko'p uchraydigan xatolar
- 10.1 Qavssiz shart
- 10.2 Shartda var()
- 10.3 Yangi imkoniyatni zaxirasiz asosiy ma'lumotga berish
- 10.4 "@supports ha dedi — demak ishlaydi"
- 10.5 Faqat -webkit- yozish
- 11. Mashqlar
- 1-mashq (oson): Qaror qabul qiling
- 2-mashq (o'rta): Xatolarni toping
- 3-mashq (qiyin): «Bahor» menyusining "Yangi" kartalari
- 4-mashq: Portfolio qadami — moslik auditi
- 12. Real ishda
- Xulosa
- Manbalar
CSS brauzer mosligi: Baseline, caniuse va @supports bilan xavfsiz yangi CSS
Qisqacha: Yangi CSS imkoniyatini ishlatishdan oldin uning Baseline holatini (MDN yoki caniuse'da) tekshiring: "Widely available" — bemalol, "Newly available" — zaxira o'ylab, "Limited" — faqat qo'shimcha sifatida. Brauzer tushunmagan deklaratsiyani tashlab ketadi — oddiy holatda zaxirani yuqoriroq qatorga yozish yetadi. Bir necha qator birga o'zgarishi kerak bo'lsa yoki qiymatda
var()bo'lsa,@supports (xususiyat: qiymat) { ... }ishlating: ichidagi qoidalar faqat brauzer shartni tushunsa qo'llanadi. Selektorni@supports selector(:has(a))tekshiradi.
Bu darsda
- Baseline, caniuse va MDN moslik jadvalini o'qib, "buni hozir ishlata olamanmi?" savoliga javob bera olasiz.
- Zaxirani qachon oddiy kaskad bilan, qachon
@supportsbilan yozish kerakligini ajrata olasiz. @supportsningnot,and,orvaselector()shakllarini to'g'ri yoza olasiz.- Vendor prefikslar nima ekanini va nega bugun ularni qo'lda yozmasligimizni bilasiz.
- Sahifani Safari va Firefox'da sinash yo'llarini bilasiz.
Oldin bilishingiz kerak: Veb standartlari va brauzer mosligi, Brauzer mosligi va progressive enhancement, DevTools'da CSS, CSS o'zgaruvchilari 2.
1. Nega bu kerak?
05-qism davomida biz "yangi — eski brauzerlarda ishlamaydi" degan gapni ko'p aytdik va o'n martacha "@supports ni keyinroq o'rganamiz" deb va'da berdik:
- Mantiqiy pseudo-klasslar — brauzer
:has()ni biladimi, CSS'ning o'zida qanday tekshirish? - Ranglar 3 — nisbiy rang eski brauzerda fonni butunlay shaffof qilib qo'yadi.
- Matn bezagi — gradient matn eski brauzerda bo'sh to'rtburchak bo'lib qoladi.
- subgrid va Layout naqshlari — "brauzer qo'llasa — yangisi, bo'lmasa — eskisi".
Brauzer mosligi va progressive enhancement darsida HTML tomonini ko'rgan edik: zaxira kontent, polyfill, "zina va lift". Bugun CSS tomoni. Va o'sha va'dalarning hammasini bajaramiz.
Vaziyat: Jasur akaning jiyani eski iPhone'da «Bahor» saytini ochdi. Sarlavha o'rnida — bo'sh rangli to'rtburchak. Siz Chrome'da tekshirgansiz, hammasi joyida edi. Bugungi dars — shunday "menda ishlayapti edi-ku" holatlarining oldini olish.
2. "Ishlata olamanmi?" — uch manba
2.1 Baseline — bitta belgi
Veb standartlari darsidan eslang: Baseline asosiy brauzerlar to'plamiga qaraydi (Chrome, Edge, Firefox, Safari — kompyuter va telefonda) va uch holat beradi:
| Holat | Ma'nosi | CSS'da nima qilamiz |
|---|---|---|
| Widely available | Hammasida bor, 30 oydan beri | Bemalol ishlatamiz |
| Newly available | Hammasining oxirgi versiyasida bor | Ishlatamiz, eski qurilmalar uchun zaxira bilan |
| Limited availability | Kamida bittasida yo'q | Faqat qo'shimcha bezak, @supports yoki zaxira bilan |
Darslarda "Baseline ma'lumotiga ko'ra..." deb yozgan sanalarimiz shu yerdan. Masalan: :has() 2023-yil dekabrda Newly, 2026-yil iyunda Widely available bo'ldi. Native CSS nesting ham xuddi shunday — 2026-yil iyunida keng tarqalgan bo'ldi. content-visibility esa hali yangi (2025-yil sentabr).
Baseline belgisi MDN'dagi har xususiyat sahifasining tepasida turadi. "Baseline 2024" kabi yozuv — imkoniyat qaysi yili Newly available bo'lganini bildiradi.
2.2 caniuse.com — foiz va tafsilot
Veb standartlari darsida caniuse'ning yashil, qizil va sariq kataklarini ko'rgan edik. CSS uchun yana uch narsa muhim:
- Notes (izohlar) va Known issues (ma'lum xatolar) tablari. Sariq "qisman" katakning sababi shu yerda yoziladi: masalan, "faqat
-webkit-prefiksi bilan". - Flag belgisi — imkoniyat brauzerda bor, lekin sozlamalarda qo'lda yoqilmasa ishlamaydi. Oddiy foydalanuvchi uchun bu "yo'q" degani.
- Davlat bo'yicha foiz. Sozlamalarda global foiz o'rniga biror davlatni tanlash mumkin. Mijozlaringiz qaysi qurilmada ekanini bilsangiz — shu raqam muhimroq.
2.3 MDN moslik jadvali — versiyalar
MDN sahifasining pastidagi Browser compatibility jadvalida har brauzer va versiya. Belgilarni o'qish:
- Yashil katak va raqam — shu versiyadan beri ishlaydi.
- Qizil — ishlamaydi.
- Kichik belgi yoki izoh raqami — qisman: prefiks bilan, flag orqasida yoki cheklov bilan. Izohni ochib o'qing.
2.4 Interop — brauzerlar kelishuvi
Ba'zan imkoniyat hamma brauzerda "bor", lekin har birida biroz boshqacha ishlaydi. Buni tuzatish uchun Apple, Google, Microsoft, Mozilla va boshqalar har yili Interop loyihasida kelishadi: shu yil qaysi yo'nalishlarni birga tuzatamiz. Natijalar wpt.fyi/interop sahifasida — har brauzer shu yo'nalishlar bo'yicha testlarning necha foizidan o'tganini ko'rsatadi. Testlarning o'zi web-platform-tests (WPT) deb ataladi — minglab avtomatik sinovlar to'plami.
Sizga amaliy foyda: imkoniyat Interop ro'yxatida bo'lsa, u yaqin oylarda hamma brauzerda bir xil ishlashi kutiladi.
Tekshirib ko'ring: Imkoniyat caniuse'da 94% va sariq katak bilan, MDN'da "Limited availability". Asosiy ma'lumotni (masalan, narxni) shu imkoniyatga ishonib ko'rsatasizmi?
Javob
Yo'q. "Limited" — kamida bitta asosiy brauzerda ishlamaydi, 6% foydalanuvchi esa ko'p odam. Imkoniyatni faqat bezak sifatida qo'shing: usiz ham narx ko'rinsin va o'qilsin. Sariq katak izohini ham o'qing — "qisman" nimani anglatishini bilmaguncha qaror qilmang.
3. Eng oddiy zaxira — kaskad
3.1 Ikki qator
CSS nima darsidagi qoidani eslang: brauzer tushunmagan deklaratsiyani tashlab ketadi. Demak, zaxira shunday yoziladi:
h1 {
color: #2f6b3a; /* hamma brauzer */
color: oklch(48% 0.1 145); /* tushunsa — ustiga yozadi */
}Yangi brauzer ikkala qatorni tushunadi, pastdagisi yutadi. Eski brauzer ikkinchisini tashlaydi, birinchisi qoladi. @supports kerak emas.
Xuddi shunday: height: 100vh; height: 100dvh; (Viewport birliklari), -webkit-text-size-adjust va text-size-adjust (Mobil qurilma tuzoqlari). Qoida: eski — tepada, yangi — pastda.
3.2 Kaskad yetmaydigan uch holat
- Qiymatda
var()bor. CSS o'zgaruvchilari 2 va Ranglar 3 darslaridagi tuzoq:var()li qiymatni eski brauzer ham "tushunadi" (o'qish paytidavar()ichiga qaramaydi). Keyin hisoblashda yaroqsiz chiqadi — va yuqoridagi zaxira allaqachon yutqazgan bo'ladi. - Bir necha qator birga o'zgarishi kerak. Gradient matn uchun
background-clip: textvacolor: transparentkerak. Brauzer birinchisini tushunmay, ikkinchisini tushunsa — matn yo'qoladi. - Butun layout almashadi. "Masonry bo'lsa —
grid-lanes, bo'lmasa —columns". Bir necha xususiyat, bir necha element.
Uchala holatda ham yechim — @supports.
4. @supports sintaksisi
4.1 Asosiy shakl
@supports (display: grid) {
.taom-karta {
display: grid;
}
}@supports (feature query — imkoniyat so'rovi) — "brauzer qavs ichidagi deklaratsiyani tushunsa, blok ichidagi qoidalarni qo'lla". @media ga o'xshaydi: @media ekranni so'raydi, @supports — brauzerning o'zini. Baseline ma'lumotiga ko'ra @supports 2015-yildan hamma asosiy brauzerda bor — o'zi keng tarqalgan.
Qavs majburiy. Chrome'da tekshirdik: @supports display: grid { ... } qoidasi butunlay tashlandi — brauzer uni @supports deb ham qabul qilmadi.
4.2 not, and, or
/* Tushunmasa */
@supports not (display: grid-lanes) { ... }
/* Ikkalasini ham */
@supports (display: grid) and (gap: 1rem) { ... }
/* Kamida bittasini */
@supports (background-clip: text) or
(-webkit-background-clip: text) { ... }and va or ni bitta darajada aralashtirib bo'lmaydi — qo'shimcha qavs kerak. Chrome'da tekshirdik: (a) and (b) or (c) qoidasi tashlandi, ((a) and (b)) or (c) esa ishladi.
4.3 selector() — selektorni tekshirish
Mantiqiy pseudo-klasslar darsidagi savolga javob:
@supports selector(:has(a)) {
.taom-karta:has(.yangi) {
border-color: #b4461a;
}
}selector() ichiga qavssiz, to'g'ridan-to'g'ri selektor yoziladi. Baseline ma'lumotiga ko'ra @supports selector() ning o'zi 2021-yildan Baseline, keng tarqalgan.
Eslatma: Mantiqiy pseudo-klasslar darsidagi ":has() ni oddiy selektorlar bilan bitta ro'yxatga qo'shmang" qoidasi ham bir xil muammoni hal qiladi — ikkalasini birga ishlatish mumkin.
4.4 Shriftlar uchun
@supports font-tech(color-COLRv1) va font-format(woff2) — brauzer rangli shrift texnologiyasini yoki fayl formatini biladimi. Baseline ma'lumotiga ko'ra ikkalasi 2026-yil martdan keng tarqalgan. Kam kerak bo'ladi: Web shriftlar darsidagi src ro'yxati odatda o'zi yetadi.
4.5 Brauzeringiz nimalarni biladi?
<style>
body { font-family: system-ui, sans-serif; }
li::after {
content: " — yo'q";
font-weight: bold;
color: #b4461a;
}
@supports (display: grid) {
.grid::after { content: " — bor"; color: #2f6b3a; }
}
@supports selector(:has(a)) {
.has::after { content: " — bor"; color: #2f6b3a; }
}
@supports (color: oklch(from red l c h)) {
.nisbiy::after { content: " — bor"; color: #2f6b3a; }
}
@supports (animation-timeline: view()) {
.skroll::after { content: " — bor"; color: #2f6b3a; }
}
@supports (display: grid-lanes) {
.lanes::after { content: " — bor"; color: #2f6b3a; }
}
</style>
<ul>
<li class="grid">display: grid</li>
<li class="has">:has()</li>
<li class="nisbiy">nisbiy rang (oklch from)</li>
<li class="skroll">skrollga bog'liq animatsiya</li>
<li class="lanes">display: grid-lanes (masonry)</li>
</ul>Nimaga qarang: har qator oxirida brauzeringizning javobi. Chrome 154 da natija: birinchi to'rttasi "bor" (yashil), grid-lanes — "yo'q" (qizg'ish). Safari yoki Firefox'da ochsangiz, javoblar boshqacha bo'lishi mumkin. Baseline ma'lumotiga ko'ra skrollga bog'liq animatsiyalar (Scroll-driven animatsiyalar) Baseline emas — Firefox'da yo'q, grid-lanes esa hozircha faqat Safari 26.4 da. Buni "Tahrirlab ko'rish" bilan o'zingiz o'zgartirib sinang: masalan, display: flex qo'shing.
Tekshirib ko'ring:
@supports (display: grid) or (display: flex) and (gap: 1rem) { ... }— brauzer nima qiladi?
Javob
Butun qoidani tashlab ketadi. or va and bitta darajada aralashgan — bu sintaksis xatosi. To'g'risi: (display: grid) or ((display: flex) and (gap: 1rem)). Qaysi qism birga ekanini qavs aniq aytishi kerak.
5. Va'dalarni bajaramiz
5.1 Nisbiy rang va var()
Ranglar 3 darsida to'xtab qolgan misol — «Bahor» tugmasi hover'da to'qroq bo'ladi:
.bron-havola:hover {
background-color: var(--rang-asosiy-toq);
}
@supports (color: oklch(from red l c h)) {
.bron-havola:hover {
background-color: oklch(
from var(--rang-asosiy) calc(l - 0.08) c h
);
}
}Shartda red — oddiy, var() siz rang. Sababi: @supports (color: var(--x)) doim "ha" deydi — Chrome'da tekshirdik, (--x: foo) ham "ha". var() bor joyda brauzer qiymatni tekshirmaydi. Shuning uchun shartga imkoniyatning o'zini haqiqiy qiymat bilan yozamiz. Baseline ma'lumotiga ko'ra nisbiy rang 2024-yil sentabrdan yangi Baseline.
5.2 Gradient matn
Matn bezagi darsidagi xavf: color: transparent ishlaydi, background-clip: text esa yo'q — matn g'oyib. Ikkalasini bitta shartga bog'laymiz:
<style>
body { font-family: system-ui, sans-serif; }
h1 {
color: #2f6b3a; /* zaxira: hamma brauzer */
}
@supports (background-clip: text) or
(-webkit-background-clip: text) {
h1 {
inline-size: fit-content; /* gradient faqat matn enida */
background: linear-gradient(90deg, #2f6b3a, #b4461a);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
}
</style>
<h1>Choyxona «Bahor»</h1>Nimaga qarang: sarlavha yashildan qizg'ishga o'tuvchi gradient bilan bo'yalgan. Shartni tushunmagan brauzerda u oddiy yashil bo'ladi — bo'sh to'rtburchak emas. color: transparent endi faqat background-clip bilan birga keladi.
Baseline ma'lumotiga ko'ra background-clip: text hali Baseline emas. Shuning uchun -webkit- prefiksli varianti ham yozilgan va shartda or bor — prefiksni quyida ko'ramiz.
5.3 Masonry: yangi va eski
Layout naqshlari darsidagi va'da:
section {
columns: 16rem; /* hamma brauzer */
}
@supports (display: grid-lanes) {
section {
columns: auto;
display: grid-lanes;
grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
gap: 1rem;
}
}section — Layout naqshlari darsidagi masonry misolidagi selektor. Safari 26.4 yangi layoutni oladi, qolganlari — columns. Blok ichidagi columns: auto yangi layoutda eski ustunlarni o'chiradi.
subgrid darsida esa shart kerak ham bo'lmadi. Subgrid bugun keng tarqalgan. Eski brauzer faqat bitta qatorni tashlaydi va karta oddiy grid bo'lib qoladi.
5.4 @supports nimani tekshirmaydi
@supports faqat "brauzer bu yozuvni tushunadimi" deb so'raydi, "to'g'ri ishlaydimi" deb emas. subgrid darsida ko'rgan edik: Chrome 154 fieldset da grid-template-columns: subgrid ni tushunadi — @supports "ha" deydi — lekin ishlamaydi. Bunday xatolar faqat sinab ko'rish bilan topiladi.
Tekshirib ko'ring: Nega nisbiy rang shartiga
(color: oklch(from var(--rang-asosiy) l c h))yozish xato?
Javob
var() bor qiymatni brauzer tekshirmaydi — @supports har qanday brauzerda "ha" deydi, hatto nisbiy rangni bilmaydiganida ham. Natijada shart hech narsani filtrlamaydi va eski brauzer yana shaffof fon oladi. Shartda doim var() siz, oddiy qiymat yozing.
6. Progressive enhancement va graceful degradation — CSS'da
Brauzer mosligi darsidagi ikki yo'l CSS'da shunday ko'rinadi:
- Progressive enhancement (pastdan yuqoriga): avval hamma brauzer uchun oddiy CSS, keyin
@supports (yangi)ichida yaxshilash. Bizning hamma misollarimiz — shunday. - Graceful degradation (yuqoridan pastga): avval eng yangi CSS, keyin
@supports not (yangi)ichida eski brauzer uchun tuzatish.
Birinchisi ishonchliroq. Sababi — juda eski brauzer @supports ning o'zini bilmasligi mumkin: u holda not blokini ham tashlaydi va tuzatish unga yetmaydi. Progressive enhancement'da esa asosiy CSS blok tashqarisida — u doim ishlaydi.
flowchart TD
A["Yangi imkoniyat kerak"] --> B{"Baseline Widely?"}
B -->|Ha| C["Bemalol yozing"]
B -->|Yo'q| D{"Eski qatorni tepaga<br/>yozish yetadimi?"}
D -->|Ha| E["Kaskad zaxirasi"]
D -->|"Yo'q: var(), bir necha<br/>qator, layout"| F["@supports bilan"]Nimaga qarang: @supports — birinchi emas, oxirgi vosita. Ko'p holatda ikki qator yetadi.
7. Vendor prefikslar: qisqa tarix
7.1 Nima edi
2000-yillar oxiri va 2010-yillarda brauzerlar yangi CSS'ni prefiks bilan chiqarardi: -webkit- (Safari, keyin Chrome), -moz- (Firefox), -ms- (Internet Explorer), -o- (Opera). G'oya: "bu tajriba, standart tayyor bo'lgach prefiksni olib tashlaymiz".
.taom-karta {
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
border-radius: 8px;
}Eski kodda bunday uch-to'rt qatorlik to'plamlarni hali ko'p uchratasiz.
7.2 Nega muvaffaqiyatsiz bo'ldi
Dasturchilar prefiksli versiyani ishlab chiqarishda ishlata boshladi va ko'pincha faqat -webkit- ni yozdi. Natijada Firefox va boshqalar ham -webkit- prefiksini tushunishga majbur bo'ldi — aks holda saytlar ularda buzilardi. Tajriba abadiy standartga aylandi.
Bugun brauzerlar yangi imkoniyatni flag orqasida sinaydi (oddiy foydalanuvchida o'chiq) va tayyor bo'lgach, darhol prefikssiz chiqaradi.
7.3 Bugun nima qilamiz
- Qo'lda prefiks yozmaymiz. Kerak bo'lsa, uni Autoprefixer vositasi avtomatik qo'shadi — PostCSS va Autoprefixer darsida o'rganamiz, hozir bilish shart emas.
- Bir necha istisno hali qo'lda yoziladi, chunki standart versiya hamma joyda yo'q:
-webkit-text-size-adjust(portfoliongizda bor),-webkit-background-clip: text. Har doim prefiksli qator — tepada, standart — pastda.
8. Boshqa brauzerlarda sinash
8.1 Chrome yetmaydi
Kompyuteringizda Chrome bor. Lekin foydalanuvchilaringiz orasida iPhone egalari bor — ularning deyarli hamma brauzeri (iOS'dagi Chrome ham) Safari dvigateli WebKit'da ishlaydi (Brauzer tuzilishi va dvigatellar). DevTools'ning qurilma rejimi ekran o'lchamini taqlid qiladi, lekin dvigatel baribir Chrome'niki — u Safari'ni almashtirmaydi.
8.2 Yo'llar
| Yo'l | Nima beradi | Narxi |
|---|---|---|
| Firefox o'rnatish | Uchinchi dvigatel (Gecko) | Bepul |
| Haqiqiy telefon | Android — Chrome, iPhone — Safari | O'zingizniki yoki tanishingizniki |
| Playwright WebKit | Windows'da ham WebKit dvigateli bilan sahifani ochish | Bepul (npm vositasi) |
| BrowserStack, LambdaTest | Bulutda yuzlab haqiqiy qurilma | Pullik, sinov davri bor |
- Android telefonni kompyuterga ulash. Telefon sozlamalarida avval "Dasturchi rejimi" (Developer options) va undagi "USB debugging" yoqiladi. Keyin telefonni USB orqali ulab, kompyuterdagi Chrome'da
chrome://inspectni ochasiz. Endi telefondagi sahifani kompyuter DevTools'i bilan tekshira olasiz. - Playwright — brauzerlarni dastur orqali boshqaradigan vosita. U o'zi bilan WebKit, Firefox va Chromium'ni olib keladi. Uni npm orqali o'rnatamiz va testlarni Playwright I darsida yozamiz; hozir faqat nomini bilib qo'ying.
Maslahat: Kichik loyihada tartib shunday: Chrome'da yozing → Firefox'da oching → telefon(lar)da oching →
@supportsva zaxiralarni tekshiring. Har imkoniyat uchun o'zingizga savol bering: "shu yo'q bo'lsa, sahifa o'qiladimi?"
9. Polyfill — CSS'da kam
Brauzer mosligi darsida polyfill'ni ko'rgan edik: yetishmayotgan imkoniyatni JavaScript bilan "yamash". CSS'da polyfill kam ishlatiladi: layout va chizishni JavaScript'da taqlid qilish og'ir va sekin. Masalan, container queries uchun polyfill bor edi — imkoniyat hamma brauzerga yetib kelgach, u keraksiz bo'ldi. CSS'da asosiy yo'l — progressive enhancement: eski brauzerga oddiyroq, lekin ishlaydigan sahifa.
10. Ko'p uchraydigan xatolar
10.1 Qavssiz shart
@supports display: grid { ... } — qoida jim tashlanadi, ichidagi CSS hech qayerda ishlamaydi. Tuzatish: @supports (display: grid).
10.2 Shartda var()
@supports (color: var(--x)) doim "ha" — shart foydasiz. Tuzatish: imkoniyatni oddiy qiymat bilan tekshiring.
10.3 Yangi imkoniyatni zaxirasiz asosiy ma'lumotga berish
Narx faqat :has() bilan ko'rinadigan qilingan — eski brauzerda narx yo'q. Tuzatish: asosiy ma'lumot yangi imkoniyatsiz ham ko'rinsin; yangisi faqat bezak qo'shsin.
10.4 "@supports ha dedi — demak ishlaydi"
Tushunish va to'g'ri ishlash — boshqa narsa («@supports nimani tekshirmaydi» bo'limi). Tuzatish: muhim joyni haqiqiy brauzerlarda sinang.
10.5 Faqat -webkit- yozish
-webkit-background-clip: text bor, standart background-clip: text yo'q. Tuzatish: prefiksli — tepada, standart — pastda; ikkalasi birga.
11. Mashqlar
1-mashq (oson): Qaror qabul qiling
Har imkoniyat uchun ayting: bemalol, kaskad zaxirasi bilan yoki @supports bilan? Holatlar Baseline ma'lumotidan (2026-yil sentabr).
aspect-ratio— Widely available.text-wrap: pretty— Baseline emas; tushunmagan brauzer oddiy o'raydi.- Nisbiy rang
var()bilan — Newly available. display: grid-lanes— Limited, faqat Safari 26.4.
Ishora: «Eski qatorni tepaga yozish yetadimi?» diagrammasi.
Yechim
- Bemalol.
- Bemalol ham yozsa bo'ladi — zaxira kerak emas: tushunmagan brauzer qatorni tashlaydi va matnni odatdagidek o'raydi. Bu — progressive enhancement'ning eng oson holati.
@supportsbilan — qiymatdavar()bor, kaskad zaxirasi ishlamaydi.@supportsbilan — butun layout almashadi, bir necha xususiyat birga.
2-mashq (o'rta): Xatolarni toping
@supports display: grid-lanes {
section { display: grid-lanes; }
}
@supports (display: grid) and (gap: 1rem) or (display: flex) {
.taom-karta { display: grid; }
}
@supports (color: oklch(from var(--rang-asosiy) l c h)) {
.aksiya { color: oklch(from var(--rang-urgu) l c h); }
}Uchta xatoni toping va tuzating.
Ishora: qavs, and/or aralashuvi, shartdagi var().
Yechim
@supports (display: grid-lanes) {
section { display: grid-lanes; }
}
@supports ((display: grid) and (gap: 1rem)) or (display: flex) {
.taom-karta { display: grid; }
}
@supports (color: oklch(from red l c h)) {
.aksiya { color: oklch(from var(--rang-urgu) l c h); }
}- Shart qavssiz edi — butun qoida tashlanardi.
andvaorbitta darajada — qoida tashlanardi. Qavs bilan guruhladik.- Shartdagi
var()tufayli u doim "ha" edi. Endi imkoniyatredbilan tekshiriladi, ichidagi qiymatda esavar()bemalol qoladi.
3-mashq (qiyin): «Bahor» menyusining "Yangi" kartalari
Talab: yangi taomlar kartasining chegarasi #b4461a bo'lsin. HTML'da karta ichida span bilan "Yangi" yozuvi bor, lekin kartaning o'zida yangi class'i yo'q (taomlarni Jasur aka sayt boshqaruv panelidan qo'shadi, panel esa class qo'ymaydi). :has() bilan yozing. Eski brauzerda kartalar oddiy chegarada qolsin, lekin "Yangi" yozuvi baribir ko'zga tashlansin (qizg'ish, qalin).
Ishora: :has() ni selector() bilan tekshiring; "Yangi" yozuvi uchun qoida shartsiz bo'lsin. span ni qanday tanlash — Atribut selektorlari yoki kombinatorlar. Yozuvga «Bahor»dagi aksiya class'ini bering.
Yechim
HTML:
<article class="taom-karta">
<h3 class="taom-nomi">Tandir go'sht</h3>
<p><span class="aksiya">Yangi</span></p>
<p class="narx">45 000 so'm</p>
</article>CSS:
/* Hamma brauzer: yozuvning o'zi ajralib tursin */
.taom-karta .aksiya {
font-weight: bold;
color: #b4461a;
}
/* :has() tushunadigan brauzer: butun karta */
@supports selector(:has(a)) {
.taom-karta:has(.aksiya) {
border-color: #b4461a;
}
}Asosiy ma'lumot — "Yangi" yozuvi — shartsiz, har brauzerda ko'rinadi. Chegara esa qo'shimcha bezak. Aslida bu yerda @supports siz ham xavfsiz: :has() ni bilmagan brauzer faqat shu bitta qoidani tashlaydi (Mantiqiy pseudo-klasslar — :has() ni vergulli ro'yxatga qo'shmaslik qoidasi). @supports bu yerda niyatni ochiq ko'rsatadi: "bu — yaxshilash". Narx 45 000 — mashq uchun namuna taom.
4-mashq: Portfolio qadami — moslik auditi
Yakuniy loyiha darsida portfoliongizda "Eski brauzerlar" jadvali bor edi. Endi uni o'zingiz tekshirasiz va bitta xavfli joyni tuzatasiz.
asosiy.cssda quyidagilarning Baseline holatini MDN'da toping:color-mix(), nisbiy rang (oklch(from ...)),:has(),text-wrap: balance,scrollbar-gutter. Jadval tuzing: imkoniyat, holat, "yo'q bo'lsa nima bo'ladi".- Header menyusidagi hover rangi nisbiy rang bilan,
var()ichida yozilgan. Eski brauzerda u nima qiladi?@supportsbilan himoyalang, zaxira — oddiyvar(--rang-matn). - Portfolio'ni Firefox'da oching (o'rnatilmagan bo'lsa — o'rnating). Chrome bilan farq bormi?
Yechim
Namuna jadval (2026-yil sentabr, Baseline ma'lumotlari):
| Imkoniyat | Holat | Yo'q bo'lsa |
|---|---|---|
color-mix() |
Widely (2025-11 dan) | Chegara va och fon rangi yo'qoladi |
| Nisbiy rang | Newly (2024-09) | Menyu hover rangi yo'qoladi |
:has() |
Widely (2026-06 dan) | Bosh sahifa bir ustunda, loyiha kartalari matn enida |
text-wrap: balance |
Newly (2024-05) | Oddiy o'rash |
scrollbar-gutter |
Newly (2024) | Skrollbar paydo bo'lganda sahifa biroz siljiydi |
Nisbiy rang var() ichida — eski brauzerda qiymat hisoblashda yaroqsiz bo'ladi va color otadan meros oladi. Hover'da havola rangi shunchaki matn rangiga o'tadi — buzilmaydi, lekin tasodifan. Endi buni ataylab qilamiz:
@media (hover: hover) {
header nav a:not([aria-current="page"]):hover {
color: var(--rang-matn); /* zaxira */
}
@supports (color: oklch(from red l c h)) {
header nav a:not([aria-current="page"]):hover {
color: oklch(from var(--rang-asosiy) calc(l - 0.1) c h);
}
}
}@supports ni @media ichiga qo'ysa bo'ladi. Ikkalasi ham bir xil ishlaydi: "shart bajarilsa, ichidagi qoidalarni qo'lla". Shuning uchun ularni bir-birining ichiga joylash mumkin.
color-mix() ning ham zaxirasi yo'q, lekin u endi keng tarqalgan — portfolio uchun yetarli. Firefox'da odatda farq kichik: shrift chizilishi va forma maydonlari biroz boshqacha. Katta farq ko'rsangiz — qaysi xususiyat ekanini DevTools'da (Firefox'da ham F12) toping.
12. Real ishda
- "Qaysi brauzerlarni qo'llaymiz?" — har loyihaning boshida yoziladigan kelishuv. Zamonaviy javob: "Baseline Widely available" yoki "har brauzerning oxirgi 2 versiyasi". U keyinroq
browserslistsozlamasiga yoziladi va vositalar unga qarab prefiks qo'shadi (PostCSS, Autoprefixer va browserslist). - Katta kompaniyalar Safari va eski Android uchun alohida sinov qurilmalari saqlaydi yoki BrowserStack kabi xizmatga pul to'laydi.
- CSS yangiliklari — har yili Interop va brauzer relizlari bilan. Ularni qanday kuzatish kerakligini Yangi paydo bo'layotgan CSS darsida ko'ramiz.
- Intervyuda so'raladi: "
@supportsnima?", "Progressive enhancement va graceful degradation farqi?", "Vendor prefiks nima va hozir qo'lda yozasizmi?", "Yangi CSS'ni qachon ishlatishni qanday hal qilasiz?".
Xulosa
- Uch manba: Baseline (bitta belgi), caniuse (foiz, izohlar, davlat), MDN jadvali (versiyalar, prefiks va flag).
- Oddiy zaxira — kaskad: eski qator tepada, yangisi pastda.
@supports—var()li qiymat, birga o'zgaradigan qatorlar va layout almashuvi uchun; qavs majburiy,and/oraralashsa — qo'shimcha qavs.- Shartda
var()yozmang;selector()bilan selektorni tekshiring. @supportstushunishni tekshiradi, to'g'ri ishlashni emas — haqiqiy brauzerlarda sinang.- Prefikslarni qo'lda yozmang (istisnolardan tashqari) — ularni Autoprefixer qo'yadi.
Keyingi dars: Native CSS nesting — qoidalarni Sass'siz, to'g'ridan-to'g'ri CSS'da ichma-ich yozishni va uning specificity tuzoqlarini o'rganamiz.
Manbalar
- MDN: "@supports", "Using feature queries", "Browser compatibility tables", "Vendor prefix" — developer.mozilla.org
- web.dev: "Baseline" — web.dev/baseline
- caniuse.com — caniuse.com
- Interop dashboard va web-platform-tests — wpt.fyi/interop
- web-features (Baseline ma'lumotlari): "supports", "relative-color", "background-clip-text", "grid-lanes", "scroll-driven-animations" — github.com/web-platform-dx/web-features
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!