Mundarija (36)
- Bu darsda
- 1. Nega bu kerak?
- 2. Qayerda tekshiriladi: uch manba
- 2.1 MDN'dagi moslik jadvali
- 2.2 caniuse.com
- 3. Brauzer noma'lum narsani ko'rsa nima qiladi?
- 3.1 Noma'lum atribut — e'tiborsiz qoladi
- 3.2 Noma'lum type — oddiy matn maydoni
- 3.3 Noma'lum teg — oddiy qutiga aylanadi
- 4. Zaxira kontent (fallback content)
- 4.1 picture: ichidagi img — zaxira
- 4.2 video va audio: ichidagi matn — zaxira
- 4.3 canvas: ichidagi kontent — zaxira
- 4.4 noscript: JavaScript bo'lmasa
- 5. Tuzoq: zaxira yo'q yangi imkoniyat
- 6. Progressive enhancement va graceful degradation
- 6.1 Progressive enhancement — pastdan yuqoriga
- 6.2 Graceful degradation — yuqoridan pastga
- 6.3 Polyfill
- 7. Eskirgan teglar
- 7.1 Ular qayerdan keldi
- 7.2 Nega ular hali ham ishlaydi?
- 7.3 Validator ularni ushlaydi
- 8. Qanday sinab ko'rish kerak
- 9. Ko'p uchraydigan xatolar
- 9.1 "Menda Chrome'da ishlayapti — demak tayyor"
- 9.2 Yangi imkoniyatni zaxirasiz ishlatish
- 9.3 Brauzer nomiga qarab ish qilish
- 9.4 Eskirgan teglarni "tez yechim" deb ishlatish
- 10. Mashqlar
- 1-mashq (oson): Jadvalni o'qing
- 2-mashq (o'rta): Eski sahifani yangilang
- 3-mashq (qiyin): Zaxira yo'llar qo'shing
- 11. Real ishda
- Xulosa
- Manbalar
Brauzer mosligi va progressive enhancement: HTML'da zaxira yo'llari
Qisqacha: Brauzer mosligi — sahifangiz eski telefon, Safari yoki Telegram ichidagi brauzerda ham ishlashi. Yangi teg yoki atributdan oldin uning holatini caniuse, Baseline yoki MDN'dagi moslik jadvalida tekshirasiz. Progressive enhancement qoidasi: asosiy vazifa hamma joyda ishlaydi, yangi imkoniyat esa uni qo'llaydigan brauzerda qo'shimcha bo'lib keladi.
Bu darsda
- MDN'dagi brauzer moslik jadvalini va caniuse sahifasini o'qiy olasiz.
- Brauzer noma'lum teg, atribut va
typeni qanday qabul qilishini tushuntirasiz. video,picture,canvasvanoscriptdagi zaxira kontentni to'g'ri yozasiz.- Eskirgan teglarni (
center,font,marquee,frame,big) taniysiz va zamonaviysiga almashtirasiz. - Polyfill va graceful degradation nima ekanini, progressive enhancement'dan farqini ayta olasiz.
Oldin bilishingiz kerak: Veb standartlari va brauzer mosligi, Zamonaviy forma imkoniyatlari, HTML darajasidagi xavfsizlik.
1. Nega bu kerak?
O'tgan darsda «Bahor» saytini hujumchilardan himoya qildik. Endi boshqa, tinchroq "dushman" bilan tanishamiz — eski brauzer.
Tasavvur qiling: choyxona egasi Jasur aka saytni kompyuterida Chrome'da ochdi. Hammasi a'lo. Keyin havolani Telegram'dagi "Bahor mijozlari" guruhiga tashladi. Bir soatdan keyin xabarlar keldi:
- "Stol band qilish tugmasi bosilmayapti" — 2019-yilgi iPhone'dan.
- "Sanani qanday yozish kerak? Kalendar chiqmadi" — Firefox'dan.
- "Sahifada qandaydir yozuvlar hammasi ochiq turibdi" — Telegram ichidagi brauzerdan.
Sayt bitta. Brauzerlar — har xil. Hamma odam ham telefonini yangilamaydi. Masalan, iPhone'dagi Safari faqat iOS bilan birga yangilanadi. Eski iPhone yangi iOS olmasa, uning Safari'si ham yillab eski qoladi.
Bu dars shu savolga javob beradi: yangi imkoniyatlarni qanday ishlatish kerakki, eski brauzerdagi mehmon ham stol band qila olsin?
2. Qayerda tekshiriladi: uch manba
Zamonaviy forma imkoniyatlari darsida Baseline holatini to'rt joyda ko'rishni o'rgangan edik. Qisqa eslatma:
| Baseline holati | Ma'nosi | Qanday ishlatamiz |
|---|---|---|
| Widely available | 4 brauzerda 30 oydan beri bor | Bemalol |
| Newly available | 4 brauzerning eng yangisida bor | Zaxira yo'l bilan |
| Limited availability | Kamida bittasida yo'q | Faqat qo'shimcha sifatida |
Baseline — tez javob: "ha" yoki "hali yo'q". Lekin ba'zan aniqroq savol tug'iladi: "Aynan qaysi brauzerda yo'q? Qaysi versiyadan beri bor?" Bunga ikki vosita javob beradi.
2.1 MDN'dagi moslik jadvali
MDN'da har bir teg yoki atribut sahifasining eng pastida Browser compatibility (brauzer mosligi) jadvali bor. Hujjat o'qish darsida uni ko'rgansiz. Endi uni to'g'ri o'qishni o'rganamiz.
Jadvalning ustunlari — brauzerlar: kompyuterdagi Chrome, Edge, Firefox, Opera, Safari va telefondagi Chrome Android, Safari on iOS, Samsung Internet, WebView Android. Qatorlari — teg va uning atributlari.
input type="week" uchun jadval taxminan shunday ko'rinadi (qisqartirilgan):
| Brauzer | Katakda | Ma'nosi |
|---|---|---|
| Chrome | 20 |
20-versiyadan beri bor |
| Firefox | No |
Yo'q |
| Safari | No |
Yo'q |
Kataklardagi belgilar:
- Raqam (yashil) — shu versiyadan boshlab ishlaydi.
- No (qizil) — umuman yo'q.
- Partial support (sariq) — qisman bor. Katak yonidagi izohni albatta o'qing: nimasi yo'qligi o'sha yerda yozilgan.
- Bayroqcha belgisi — faqat maxsus sozlama (flag) yoqilganda ishlaydi. Oddiy foydalanuvchida yo'q deb hisoblang.
Maslahat: Kataklardagi raqamlarni yodlash shart emas. Siz faqat bitta savolga javob izlaysiz: "Mehmonlarimizning brauzerlarida bormi?". Aniq raqamlar 2026-yil holatiga ko'ra o'zgarib turadi — har safar MDN'dan qarab oling.
2.2 caniuse.com
caniuse.com'da imkoniyat nomini yozasiz (masalan, input week). Natijada rangli jadval va bitta muhim raqam chiqadi — Global usage. Bu dunyo bo'yicha shu imkoniyat ishlaydigan brauzerlar ulushi.
caniuse'ning MDN'dan bitta afzalligi bor: foydalanuvchilar ulushini ko'rsatadi. Sozlamalarda mamlakatni tanlasangiz, masalan O'zbekistonni, foizni shu yerdagi foydalanuvchilar uchun ham ko'rasiz. Chunki O'zbekistondagi brauzerlar tarkibi Yevropadagidan farq qiladi: telefon ulushi katta, Android ko'p.
| Savol | Qayerga qaraysiz |
|---|---|
| Umuman ishlatsa bo'ladimi? | Baseline belgisi (MDN tepasida) |
| Qaysi brauzerda yo'q? | MDN moslik jadvali |
| Necha foiz odamda ishlaydi? | caniuse.com |
Tekshirib ko'ring: MDN jadvalida Safari katagida sariq rang va
Partial supportyozuvi turibdi. Bu nimani anglatadi va nima qilasiz?
Javob
Safari bu imkoniyatning faqat bir qismini qo'llaydi. Katak yonidagi izohni ochib o'qiysiz: aynan qaysi qismi ishlamasligi o'sha yerda yozilgan. Agar sizga kerakli qism ishlamasa — Safari uchun zaxira yo'l o'ylaysiz.
3. Brauzer noma'lum narsani ko'rsa nima qiladi?
Bu — butun darsning kaliti. HTML'ning bitta ajoyib qoidasi bor: brauzer tushunmagan narsa uchun xato bermaydi va sahifani to'xtatmaydi. U noma'lum narsani o'tkazib yuboradi yoki eng oddiy holatda ko'rsatadi.
Brauzer HTML'ni qanday tahlil qiladi darsida parser xatolarni jimgina "tuzatishini" ko'rgan edik. Bu yerda ham xuddi shu "kechirimlilik" ishlaydi. Faqat bu safar u bizning foydamizga.
3.1 Noma'lum atribut — e'tiborsiz qoladi
<img src="osh.jpg" alt="Bir tarelka osh"
width="600" height="400" loading="lazy">loading="lazy" ni bilmaydigan eski brauzer uni shunchaki tashlab yuboradi. Rasm odatdagidek darhol yuklanadi. Sahifa biroz sekinroq ochiladi, lekin hech narsa buzilmaydi.
3.2 Noma'lum type — oddiy matn maydoni
<label for="hafta">Navbatchilik haftasi</label>
<input id="hafta" name="hafta" type="week">Chrome'da hafta tanlagich chiqadi. Firefox'da esa oddiy matn maydoni chiqadi — brauzer tanimagan type ni text deb qabul qiladi. Mehmon baribir nimadir yoza oladi, faqat qulaylik kamroq.
3.3 Noma'lum teg — oddiy qutiga aylanadi
<search>
<form action="/qidiruv">
<label for="q">Taom qidirish</label>
<input id="q" name="q" type="search">
<button type="submit">Qidirish</button>
</form>
</search>search — nisbatan yangi landmark teg (Sahifa landmarklari darsida ko'rgansiz). Uni bilmaydigan brauzer search ni ma'nosiz span kabi qabul qiladi. Ichidagi forma esa to'liq ishlaydi. Yo'qotilgan narsa — faqat ekran o'quvchi uchun "qidiruv hududi" belgisi.
| Brauzer tushunmadi | Nima bo'ladi |
|---|---|
| Atribut | E'tiborsiz qoladi |
input ning type i |
type="text" kabi ishlaydi |
| Teg | Ma'nosiz inline quti, ichidagisi ko'rinadi |
Bu qoida tufayli yangi HTML'ni qo'rqmasdan yozish mumkin. Lekin bitta "tuzoq" bor — 5-bo'limda ko'ramiz.
Tekshirib ko'ring: Eski brauzer
<input type="date">ni tanimaydi. Mehmon ekranda nimani ko'radi va sanani kiritib yubora oladimi?
Javob
Oddiy matn maydonini ko'radi — kalendar chiqmaydi. Sanani qo'lda yozib yubora oladi. Lekin qaysi formatda yozishni bilmaydi. Shuning uchun label yoki maydon ostidagi yo'riqnomaga namuna yozgan ma'qul: "masalan, 2026-10-05".
4. Zaxira kontent (fallback content)
Ba'zi teglar zaxira uchun maxsus joy ajratgan. Zaxira kontent (fallback content) — faqat brauzer asosiy narsani ko'rsata olmaganda chiqadigan kontent.
Hayotiy o'xshatish: to'yga borasiz, taksi chaqirasiz. Taksi kelmasa — avtobusga chiqasiz. Avtobus — zaxira yo'l. U bor bo'lgani uchun to'yga baribir yetib borasiz.
4.1 picture: ichidagi img — zaxira
Responsive rasmlar II darsidagi namuna:
<picture>
<source srcset="osh.avif" type="image/avif">
<source srcset="osh.webp" type="image/webp">
<img src="osh.jpg" alt="Bir tarelka osh"
width="600" height="400">
</picture>Brauzer yuqoridan pastga qaraydi. AVIF'ni bilsa — AVIF'ni oladi. Bilmasa — WebP'ga o'tadi. Hech birini bilmasa — img dagi JPEG'ni ko'rsatadi. picture ni umuman tanimaydigan juda eski brauzer ham img ni ko'radi. Shuning uchun ichki img majburiy.
4.2 video va audio: ichidagi matn — zaxira
<video controls width="640" height="360"
poster="osh-video.jpg">
<source src="osh-video.webm" type="video/webm">
<source src="osh-video.mp4" type="video/mp4">
<p>
Brauzeringiz videoni ko'rsata olmadi.
<a href="osh-video.mp4">Videoni yuklab oling</a>.
</p>
</video>Teglar orasidagi paragraf faqat video tegini tanimaydigan brauzerda chiqadi. Zamonaviy brauzer uni ko'rsatmaydi. Bu yerda ham yuklab olish havolasi — "avtobus".
4.3 canvas: ichidagi kontent — zaxira
canvas darsida ko'rdik: canvas rasmini JavaScript chizadi. JavaScript o'chiq yoki ishlamasa — canvas bo'sh qoladi. Ichiga yozilgan kontent esa ekran o'quvchiga va eski brauzerga yetib boradi:
<canvas width="400" height="200">
<p>Haftalik buyurtmalar: dushanba — 40,
seshanba — 55, chorshanba — 38.</p>
</canvas>4.4 noscript: JavaScript bo'lmasa
noscript ichidagi kontent faqat JavaScript o'chiq bo'lganda ko'rinadi. Skriptlarni ulash darsida u bilan tanishgansiz.
<noscript>
<p>Xaritani ko'rish uchun JavaScript kerak.
Manzil: Toshkent, Chilonzor tumani.</p>
</noscript>Diqqat:
noscriptfaqat "JavaScript butunlay o'chiq" holatni ushlaydi. JavaScript yoqilgan-u, lekin skript xato bilan to'xtab qolsa —noscriptyordam bermaydi. Shuning uchun eng yaxshi zaxira — sahifaning o'zi JavaScript'siz ham ishlashi.
Tekshirib ko'ring: Nega
pictureichidagiimgni olib tashlab bo'lmaydi, garchisourcelar allaqachon rasm manzillarini bersa ham?
Javob
Chunki rasmni aslida img ko'rsatadi, source lar faqat unga "qaysi faylni olish" haqida maslahat beradi. img bo'lmasa, hech narsa ko'rinmaydi. Bundan tashqari img — hamma brauzer uchun oxirgi zaxira. alt, width va height ham aynan img da yoziladi.
5. Tuzoq: zaxira yo'q yangi imkoniyat
3-bo'limda aytganimizdek, noma'lum narsa odatda zararsiz. Lekin ba'zi yangi atributlar kontentni yashirish uchun ishlatiladi. Brauzer atributni bilmasa — hech narsa yashirilmaydi.
popover ni eslang (Popover API):
<button type="button" popovertarget="aksiya">
Bugungi aksiya
</button>
<div id="aksiya" popover>
<p>Juma kuni har bir oshga choy — bepul!</p>
</div>Popover'ni qo'llaydigan brauzerda div tugma bosilguncha yashirin turadi. popover ni bilmaydigan eski brauzerda esa div sahifada doim ochiq ko'rinadi, tugma esa hech narsa qilmaydi. Guruhdagi "yozuvlar hammasi ochiq turibdi" degan xabar aynan shu edi.
Bu holatda nima qilamiz? Ikki savol beramiz:
- Kontent ochiq qolsa, zarar bormi? Aksiya matni ochiq tursa — hech qanday zarar yo'q. Mehmon ma'lumotni baribir oladi. Demak bu yerda popover'ni bemalol ishlatish mumkin.
- Harakat ishlamay qolsa, asosiy vazifa buziladimi? Agar "Stol band qilish" formasi faqat popover ichida ochilsa — eski brauzerda muammo bo'lishi mumkin. Asosiy vazifani oddiy sahifa yoki oddiy havolaga qo'ygan xavfsizroq.
Maslahat: Yangi imkoniyatni ishlatishdan oldin o'zingizga bitta savol bering: "Bu imkoniyat umuman ishlamasa, mehmon nima ko'radi?". Javob "baribir maqsadiga yetadi" bo'lsa — ishlataverasiz.
6. Progressive enhancement va graceful degradation
Endi ikki mashhur atamani aniq ajratamiz. Ularni Veb standartlari darsida nomi bilan eshitgansiz.
6.1 Progressive enhancement — pastdan yuqoriga
Progressive enhancement (bosqichma-bosqich boyitish) — avval hamma joyda ishlaydigan asosni quramiz, keyin qatlam-qatlam qo'shamiz:
- HTML — kontent va asosiy vazifa. Forma yuboriladi, havola ochiladi.
- CSS — chiroyli ko'rinish. CSS yuklanmasa ham sahifa o'qiladi.
- JavaScript — qulaylik. JavaScript ishlamasa ham forma baribir yuboriladi.
Zamonaviy forma imkoniyatlari darsidagi zinapoya va liftni eslang: lift bo'lmasa ham ikkinchi qavatga zinadan chiqasiz. Bu safar g'oyani butun sahifaga qo'llaymiz.
6.2 Graceful degradation — yuqoridan pastga
Graceful degradation (chiroyli pasayish) — teskari yo'l. Avval eng zamonaviy brauzer uchun to'liq versiya quriladi. Keyin eski brauzerlarda "chiroyli buzilishi" uchun tuzatishlar qo'shiladi.
O'xshatish: ishlamay qolgan eskalator. U to'xtasa, oddiy zinaga aylanadi — noqulay, lekin baribir yuqoriga chiqasiz.
| Progressive enhancement | Graceful degradation | |
|---|---|---|
| Qayerdan boshlanadi | Oddiy asosdan | To'liq zamonaviy versiyadan |
| Eski brauzer | Rejaning bir qismi | Keyin o'ylanadi |
| Xavf | Kam | Nimadir unutilib qolishi mumkin |
Ikkalasining maqsadi bir: hech kim bo'sh sahifa ko'rmasin. Lekin progressive enhancement xavfsizroq, chunki asos birinchi quriladi. HTML qismida biz aynan shunday ishladik: har bir forma JavaScript'siz yuboriladi, har bir rasmda alt bor.
6.3 Polyfill
Ba'zan eski brauzerda yo'q imkoniyat juda kerak bo'ladi. Unda polyfill ishlatiladi — brauzerda yo'q imkoniyatni JavaScript bilan "yamab" qo'yadigan kod.
Nomi Buyuk Britaniyadagi "Polyfilla" nomli devor shpaklyovkasidan olingan. Devordagi yoriqni shpaklyovka bilan to'ldirasiz — devor butunga o'xshab qoladi. Polyfill ham brauzerdagi "yoriq"ni to'ldiradi.
Masalan, bir necha yil oldin dialog tegi Safari va Firefox'da yo'q edi. Dasturchilar dialog-polyfill kutubxonasini ulashardi. Bugun dialog hamma joyda bor va bu polyfill keraksiz.
Polyfill JavaScript kodi, shuning uchun uni hozir yozmaymiz. Uning ishlashini TC39 va polyfill darsida, loyihada avtomatik ulashni esa browserslist darsida ko'rasiz. Hozir ikki qoidani eslab qoling:
- Polyfill — oxirgi chora. Avval HTML'ning o'z zaxira yo'lini qidiring.
- Polyfill — begona kod. U ham xavfsizlik darsidagi qoidalarga bo'ysunadi.
Diqqat: Skriptlarni ulash darsidagi polyfill.io voqeasini eslang: polyfill tarqatadigan mashhur xizmatning o'zi zararli kod bera boshlagan edi. Saboq: begona serverdan skript ulashdan oldin o'ylang, ulasangiz — SRI (
integrity) bilan.
Tekshirib ko'ring: «Bahor» saytidagi stol band qilish formasi faqat JavaScript orqali yuboriladi. JavaScript ishlamasa, tugma hech narsa qilmaydi. Bu qaysi yondashuvni buzadi va qanday tuzatiladi?
Javob
Progressive enhancement'ni buzadi: asosiy vazifa (stol band qilish) eng pastki qatlamga — HTML'ga emas, JavaScript'ga bog'lab qo'yilgan. Tuzatish: formaga action va method beriladi, tugma type="submit" bo'ladi. Shunda JavaScript'siz ham forma serverga yuboriladi. JavaScript esa ustidan qulaylik qo'shadi.
7. Eskirgan teglar
7.1 Ular qayerdan keldi
1990-yillarda CSS hali yo'q edi yoki juda zaif edi. Dasturchilar ko'rinishni HTML teglari bilan berardi. O'sha davrdan qolgan teglar bugun eskirgan (obsolete) deb hisoblanadi — standartdan chiqarilgan.
| Teg | Nima qilardi | Bugun nima ishlatiladi |
|---|---|---|
center |
Markazga surardi | CSS: text-align |
font |
Shrift va rang berardi | CSS: color, font-family |
big |
Matnni kattalashtirardi | CSS: font-size |
marquee |
Matnni yugurtirardi | CSS animatsiya yoki umuman yo'q |
frame, frameset |
Oynani bo'laklarga bo'lardi | Oddiy sahifa, kerak bo'lsa iframe |
blink |
Matnni miltillatardi | Hech narsa |
Ularga eski atributlar ham qo'shiladi: align, bgcolor, border (jadvalda), color. Hammasining o'rnini CSS egallagan.
7.2 Nega ular hali ham ishlaydi?
Brauzerlarning oltin qoidasi bor: vebni buzmaslik. Internetda 1998-yilda yozilgan millionlab sahifalar hamon turibdi. Brauzer center ni tushunmay qolsa, ularning hammasi buziladi. Shuning uchun ko'p eskirgan teglar hali ham ishlaydi.
Istisno ham bor. blink tegi bugun hech bir brauzerda miltillamaydi. Firefox uni 2013-yilda o'chirgan edi. Ya'ni eskirgan narsa istalgan kun ishlamay qolishi mumkin.
7.3 Validator ularni ushlaydi
Eski sahifadan parcha. Uni eski.html ga saqlab, html-validate'dan o'tkazamiz:
<center><font color="red">Aksiya!</font></center>
<marquee>Osh — 35 000 so'm</marquee> 1:2 error <center> is deprecated: use CSS instead deprecated
1:10 error <font> is deprecated: use CSS instead deprecated
2:2 error <marquee> is deprecated deprecatedTarjimasi: "center eskirgan: o'rniga CSS ishlating". Qoida nomi — deprecated ("eskirgan"). Nu HTML Checker ham xuddi shunday xabar beradi: The “center” element is obsolete. Use CSS instead.
Zamonaviy variant: ma'no — HTML'da, ko'rinish — CSS'da.
<p class="aksiya"><strong>Aksiya!</strong></p>
<p>Osh — 35 000 so'm</p>Qizil rang va markazlashni CSS nima darsidan boshlab qaytaramiz. strong esa "bu muhim" degan ma'noni saqlaydi — Urg'u teglari darsida ko'rgansiz.
Tekshirib ko'ring: Mijoz "Eski saytimizda
marqueebor edi, u ishlayapti-ku, nega olib tashlaymiz?" deb so'radi. Unga nima deysiz?
Javob
Uch sabab bor. Birinchisi: marquee standartdan chiqarilgan, istalgan kun ishlamay qolishi mumkin — blink bilan shunday bo'lgan. Ikkinchisi: yugurib turgan matnni o'qish qiyin, ayniqsa ko'rishi zaif odamlarga. Uchinchisi: validator uni xato deb ko'rsatadi. Harakat haqiqatan kerak bo'lsa — CSS animatsiya bilan qilinadi va to'xtatish imkoni beriladi.
8. Qanday sinab ko'rish kerak
Moslik jadvali — nazariya. Haqiqiy tekshiruv — sahifani haqiqiy brauzerda ochish.
- Kamida uch dvigatel. Chrome (Blink), Firefox (Gecko) va Safari (WebKit). Brauzer dvigatellari darsini eslang: Edge, Opera va Yandex — Chrome dvigatelida, ularni alohida tekshirish kamroq kerak.
- Safari muammosi. Windows'da Safari yo'q. Eng oddiy yo'l — iPhone'da ochish. Do'stingiz yoki qarindoshingizning iPhone'i ham yetadi.
- Telegram ichidagi brauzer. Havolani o'zingizga "Saqlangan xabarlar"ga yuboring va Telegram ichida oching. O'zbekistonda saytga ko'p odam aynan shu yo'l bilan keladi.
- Pullik xizmatlar. BrowserStack va LambdaTest kabi saytlar yuzlab haqiqiy qurilma va brauzerni masofadan beradi. Ularda bepul sinov davri bor.
Diqqat: DevTools'dagi mobil ko'rinish (device mode) — faqat Chrome'ning kichraytirilgan oynasi. U iPhone'dagi Safari'ni emas, ekran o'lchamini taqlid qiladi. Safari'ga xos muammolarni u ko'rsatmaydi.
9. Ko'p uchraydigan xatolar
9.1 "Menda Chrome'da ishlayapti — demak tayyor"
Sizning brauzeringiz — eng yangi va eng qulay sharoit. Mehmonlarniki — har xil. Kamida bitta Firefox va bitta iPhone'da ochmaguncha sahifani tayyor demang.
9.2 Yangi imkoniyatni zaxirasiz ishlatish
"Limited availability" imkoniyatda asosiy vazifani qurish. Masalan, band qilish formasini faqat bitta brauzerda ishlaydigan yangi vidjetga bog'lash. Qoida: asosiy vazifa faqat widely available imkoniyatlarga tayansin.
9.3 Brauzer nomiga qarab ish qilish
Sahifada "Bu sayt faqat Chrome'da ishlaydi" deb yozish — 1990-yillarning odati. Mehmonga brauzer almashtirishni buyurmaymiz. Imkoniyatni tekshiramiz va zaxira beramiz.
9.4 Eskirgan teglarni "tez yechim" deb ishlatish
Internetdan eski maslahat topasiz: "markazlash uchun center qo'ying". Bu maslahat 20 yillik. Sahifa ishlagandek tuyuladi, lekin validator xato beradi. Maslahat sanasini tekshiring — Samarali qidirish darsidagi qoida.
10. Mashqlar
1-mashq (oson): Jadvalni o'qing
MDN'dagi bitta atribut uchun moslik jadvalining bir qismi:
| Brauzer | Katak |
|---|---|
| Chrome | 114 |
| Firefox | 125 |
| Safari | 17 |
| Safari on iOS | 17 |
- Firefox'da bu imkoniyat qaysi versiyadan beri ishlaydi?
- iPhone'i iOS 16 da qolgan mehmonda bu imkoniyat ishlaydimi? Nega?
Yechim
- 125-versiyadan beri.
- Yo'q. Safari on iOS katagida
17turibdi, ya'ni iOS 17 dagi Safari'dan boshlab ishlaydi. iPhone'dagi Safari faqat iOS bilan birga yangilanadi, shuning uchun iOS 16 dagi mehmonda bu imkoniyat yo'q. Unga zaxira yo'l kerak.
2-mashq (o'rta): Eski sahifani yangilang
Choyxonaning 2008-yilgi eski sahifasidan parcha. Eskirgan teglarni olib tashlang va ma'noni to'g'ri teglar bilan bering. Ko'rinishni hozircha e'tiborsiz qoldiring — uni CSS qismida qaytaramiz.
Eski kod:
<center><big>Choyxona «Bahor»</big></center>
<font color="green">Har kuni ochiqmiz!</font>
<marquee>Yangi taom: tandir go'sht</marquee>Ishora: sahifaning asosiy sarlavhasi uchun qaysi teg kerakligini Sarlavhalar va paragraflar darsidan eslang.
Yechim
<h1>Choyxona «Bahor»</h1>
<p>Har kuni ochiqmiz!</p>
<p><strong>Yangi taom:</strong> tandir go'sht</p>centervabigbirgalikda "katta va markazda" degani edi. Aslida bu — sahifaning asosiy sarlavhasi, ya'nih1.fontfaqat rang berardi — ma'no qo'shmasdi. Uning o'rnida oddiypyetarli.marquee"diqqat qiling" degani edi. Ma'no jihatidan bustrong. Harakat kerak emas.
npx html-validate bilan tekshirsangiz, deprecated xatolari yo'qoladi.
3-mashq (qiyin): Zaxira yo'llar qo'shing
«Bahor» saytining "Tadbirlar" sahifasi uchun uch bo'lak yozing:
- Tadbir videosi: WebM va MP4 manbalari bilan. Video ishlamasa — yuklab olish havolasi chiqsin.
- Tadbir sanasini tanlash maydoni
type="date"bilan. Kalendar chiqmasa ham mehmon to'g'ri formatni bilsin. - Sahifadagi qidiruv formasi
searchtegi ichida.searchni bilmaydigan brauzerda nima yo'qolishini bir gap bilan yozing.
Ishora: sana yo'riqnomasini maydon bilan bog'lash uchun aria-describedby ishlatiladi — Qulay va accessible forma darsida ko'rgansiz.
Yechim
<video controls width="640" height="360"
poster="navruz.jpg">
<source src="navruz.webm" type="video/webm">
<source src="navruz.mp4" type="video/mp4">
<p>Video ochilmadi.
<a href="navruz.mp4">Yuklab oling (MP4)</a>.</p>
</video>
<form action="/tadbir" method="post">
<label for="sana">Tadbir sanasi</label>
<input id="sana" name="sana" type="date"
aria-describedby="sana-yordam">
<p id="sana-yordam">Masalan: 2026-10-05</p>
<button type="submit">Band qilish</button>
</form>
<search>
<form action="/qidiruv">
<label for="q">Tadbir qidirish</label>
<input id="q" name="q" type="search">
<button type="submit">Qidirish</button>
</form>
</search>- Video bo'lmasa, paragrafdagi havola orqali faylni yuklab olish mumkin.
datetanilmasa, maydon oddiy matnga aylanadi. Yo'riqnoma esa qaysi formatda yozishni aytadi. Zamonaviy brauzerda u ham zarar qilmaydi.searchtanilmasa, faqat ekran o'quvchi uchun "qidiruv hududi" belgisi yo'qoladi. Forma to'liq ishlayveradi.
11. Real ishda
- Brauzerlar ro'yxati shartnomada. Buyurtma bilan sayt yasaganda "qaysi brauzerlarni qo'llaymiz" oldindan yoziladi. Ko'pincha: "Baseline widely available" yoki "har brauzerning oxirgi 2 versiyasi". Keyinroq bu qoida loyiha sozlamasiga ham yoziladi (browserslist darsida).
- CSS'da ham xuddi shu g'oya. CSS'da imkoniyatni tekshirish uchun
@supportsbor. Uni CSS'da@supportsdarsida ko'rasiz. - Test jamoalari. Katta kompaniyalarda QA muhandislari (sifat tekshiruvchilar) sahifani o'nlab qurilmada sinaydi. Kichik jamoada bu ishni o'zingiz qilasiz.
- Intervyuda so'raladi: "Progressive enhancement va graceful degradation farqi nima?", "Polyfill nima?". Endi ikkalasiga ham misol bilan javob bera olasiz.
Xulosa
- Yangi imkoniyatdan oldin tekshiring: Baseline — tez javob, MDN jadvali — qaysi brauzerda yo'q, caniuse — necha foiz odamda bor.
- Brauzer noma'lum atributni tashlab yuboradi, noma'lum
typenitextdeb, noma'lum tegni oddiy quti deb qabul qiladi. picture,video,audio,canvasvanoscriptda zaxira kontent uchun joy bor — undan foydalaning.- Kontentni yashiradigan yangi atributlar (
popover) eski brauzerda hammasini ochiq qoldiradi — oldindan o'ylang. - Progressive enhancement — asosdan qatlam-qatlam; graceful degradation — to'liq versiyadan pastga; polyfill — oxirgi chora.
center,font,big,marquee,frame— eskirgan; ma'no HTML'da, ko'rinish CSS'da.
Keyingi dars: HTML kod uslubi va konventsiyalar — jamoada HTML'ni bir xil uslubda yozish qoidalari va ularni Prettier bilan avtomatlashtirish.
Manbalar
- MDN: "Browser compatibility tables" va "Progressive enhancement" — developer.mozilla.org
- caniuse.com — brauzerlar bo'yicha qo'llab-quvvatlash jadvallari
- web.dev: "Baseline" — web.dev/baseline
- WHATWG HTML: "Obsolete features" bo'limi — html.spec.whatwg.org
- html-validate:
deprecatedqoidasi — html-validate.org/rules/deprecated.html
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!