Mundarija (32)
- Bu darsda
- 1. Nega bu kerak?
- 2. Viewport nima?
- 3. vw va vh
- 3.1 vw — oyna enining foizi
- 3.2 vh — oyna bo'yining foizi
- 3.3 Matn o'lchami faqat vw da — xavfli
- 4. vmin va vmax
- 5. Mobil "100vh" muammosi
- 5.1 Yashirinib-chiqadigan panel
- 5.2 Uch yangi birlik: svh, lvh, dvh
- 5.3 Qaysi birini tanlash?
- 5.4 «Bahor» tabriknomasi — to'g'ri yechim
- 6. 100vw va gorizontal skroll
- 6.1 Muammo
- 6.2 Nega?
- 6.3 Tuzatish
- 7. DevTools'da sinash
- 8. Ko'p uchraydigan xatolar
- 8.1 height: 100vh birinchi ekran
- 8.2 width: 100vw
- 8.3 height o'rniga min-height kerak edi
- 8.4 Matn faqat vw da
- 8.5 Faqat kompyuterda sinash
- 9. Mashqlar
- 1-mashq (oson): Hisoblang
- 2-mashq (o'rta): Stajyorning tabriknomasi
- 3-mashq (qiyin): Qaysi birlik?
- 4-mashq: Portfolio qadami — 404 sahifasi ekranga moslashadi
- 10. Real ishda
- Xulosa
- Manbalar
CSS viewport birliklari: vw, vh, dvh va mobil "100vh" muammosi
Qisqacha: Viewport birliklari o'lchamni brauzer oynasiga bog'laydi:
1vw— oyna enining 1 foizi,1vh— bo'yining 1 foizi. Telefonda manzil paneli aylantirganda yashirinib-chiqadi,100vhesa panel yashiringandagi bo'yga teng — shuning uchun sahifa ochilganda blokning pasti panel ortida qoladi. Yechim — yangi birliklar:svh(panel ko'rinib turgandagi kichik bo'y),lvh(katta bo'y),dvh(hozirgi bo'y). Birinchi ekran uchunmin-height: 100svhyozing.width: 100vwo'rniga esa100%ishlating — aks holda Windows'da gorizontal skroll paydo bo'ladi.
Bu darsda
vw,vh,vminvavmaxnimaga teng ekanini hisoblay olasiz.- Telefonda
100vhnega ekrandan katta chiqishini tushuntirasiz. svh,lvhvadvhdan vazifaga mosini tanlaysiz.100vwsabab paydo bo'ladigan gorizontal skrollni topib, tuzatasiz.- Nega matn o'lchamini faqat
vwda bermaslik kerakligini bilasiz.
Oldin bilishingiz kerak: O'lcham birliklari, head anatomiyasi va viewport, Responsive rasmlar I.
1. Nega bu kerak?
Jasur aka «Bahor»ning bosh sahifasini shunday ko'rmoqchi: telefonda saytni ochgan odam avval faqat yashil fonda choyxona nomini va ish vaqtini ko'rsin. Butun ekran — bitta "tabriknoma". Menyu esa pastda, aylantirganda chiqsin.
Buning uchun blok bo'yi ekran bo'yiga teng bo'lishi kerak. O'tgan darsda ko'rdik: height: 100% ishlamaydi, chunki ota bo'yi oldindan noma'lum. px ham yordam bermaydi — telefonlarning bo'yi har xil.
Bizga "ekranning o'zi"ga nisbatan birlik kerak. CSS'da ular bor va ular viewport birliklari deyiladi. Bu darsda ular bilan ishlashni va telefonlardagi mashhur tuzoqni o'rganamiz.
2. Viewport nima?
Viewport — brauzer oynasining sahifa chiziladigan qismi. Manzil qatori, tablar, xatcho'plar paneli unga kirmaydi — faqat sahifa ko'rinadigan to'rtburchak.
Uyingizning derazasini tasavvur qiling. Ko'cha katta, lekin siz uni faqat deraza ramkasi ichidan ko'rasiz. Sahifa — ko'cha, viewport — deraza. Sahifa uzun bo'lsa, siz uni "deraza oldidan o'tkazasiz" — aylantirasiz.
head anatomiyasi darsidagi qatorni eslang:
<meta name="viewport" content="width=device-width, initial-scale=1">Aynan shu qator telefonda viewport enini qurilma eniga tenglaydi: 360–430 CSS piksel. Usiz telefon sahifani 980 piksellik "kompyuter derazasi"da chizardi. Viewport birliklari to'g'ri ishlashi uchun bu qator albatta bo'lsin.
3. vw va vh
3.1 vw — oyna enining foizi
1vw — viewport enining 1 foizi. 100vw — butun en. Responsive rasmlar I darsida bu birlikni sizes atributida ko'rgan edingiz: sizes="(max-width: 600px) 100vw, 600px" — "rasm ekranning butun enini egallaydi". O'sha yerda "vw ni CSS qismida batafsil ko'ramiz" degan edik. Mana u CSS'da:
<style>
header {
padding: 12px 5vw;
background-color: #2f6b3a;
color: #fffaf0;
}
.aksiya {
font-size: 6vw;
color: #b4461a;
}
</style>
<header>
<h1>Choyxona «Bahor»</h1>
</header>
<p class="aksiya">Bugun ko'k choy — bepul!</p>Telefon va kompyuter tugmalarini almashtirib ko'ring. Natija oynasida vw — natija oynasining eniga nisbatan: tugmalar oynani 360, 768 va 1280 piksel qiladi.
Nimaga qarang:
- Yashil blokning chap va o'ng ichki bo'sh joyi ekran bilan o'sadi: telefonda 18 piksel (360 × 5%), kompyuterda 64 piksel (1280 × 5%). Katta ekranda matn chetga yopishmaydi.
- Aksiya matni esa haddan tashqari o'zgaradi: telefonda 21.6 piksel — sarlavhadan kichik, kompyuterda 76.8 piksel — sarlavhadan ikki barobardan katta.
Birinchisi — vw ning to'g'ri ishlatilishi. Ikkinchisi — xavfli, nega ekanini biroz pastda ko'ramiz.
3.2 vh — oyna bo'yining foizi
1vh — viewport bo'yining 1 foizi. height: 100vh — oynaning butun bo'yi. Jasur akaning "tabriknomasi" uchun birinchi urinish shunday bo'lardi:
header {
height: 100vh;
}Kompyuterda bu ishlaydi. Telefonda esa bitta tuzoq bor — uni "Mobil 100vh muammosi" bo'limida ochamiz.
Bu darsdagi natija bloklari haqida bitta muhim gap. Kodda vh kabi bo'yga bog'liq birlik bo'lsa, natija oynasining bo'yi 400 pikselda qotib turadi. Shuning uchun natijada vh — shu oynaning bo'yiga nisbatan, telefoningiz ekraniga emas: 100vh — 400 piksel. Haqiqiy natijani ko'rish uchun kodni o'z faylingizga yozib, telefonda oching.
3.3 Matn o'lchami faqat vw da — xavfli
Aksiya matni font-size: 6vw da edi. U ikki sababga ko'ra accessibility'ni buzadi.
Birinchisi — shrift sozlamasi. O'tgan darsda foydalanuvchi Chrome'da shriftni Large qilganda rem o'sishini ko'rdik. vw bu sozlamaga umuman qaramaydi — u faqat oyna eniga bog'liq.
Ikkinchisi — zoom. Hisoblab ko'ramiz. Kompyuter oynasi 1280 piksel, matn 6vw — 76.8 piksel. Foydalanuvchi zoom'ni 200% qiladi. Endi har CSS piksel ekranda ikki barobar katta chiziladi, shuning uchun oynaga faqat 640 CSS piksel sig'adi. Matn: 640 × 6% = 38.4 CSS piksel, ekranda esa 38.4 × 2 = 76.8 — avvalgidek. Zoom bosildi, matn kattalashmadi.
WCAG talabi (1.4.4) — matn 200% gacha kattalashishi kerak. Faqat vw dagi matn bu testdan o'ta olmaydi. Yechim — vw ni rem bilan aralashtirish va chegaralash: clamp(1.5rem, 1rem + 2vw, 3rem). Buni Matematik funksiyalar darsida o'rganamiz.
Tekshirib ko'ring: Telefon viewport'i 360 × 640 CSS piksel.
width: 50vwvaheight: 25vhqancha piksel bo'ladi?font-size: 5vw-chi?
Javob
50vw — 180px (360 ning yarmi), 25vh — 160px (640 ning chorak qismi), 5vw — 18px. Har vw enidan, har vh bo'yidan olinadi — elementning otasi bu hisobda umuman qatnashmaydi. % dan asosiy farqi shu.
4. vmin va vmax
Telefonni yotqizsangiz, en va bo'y o'rin almashadi. Ba'zan "qaysi tomoni kichik bo'lsa, shunga qarab" o'lchash kerak bo'ladi:
vmin—vwvavhdan kichigi.vmax— ikkalasidan kattasi.
Faraz qiling: «Bahor»da bron qabul qilingach, sahifada QR kod chiqadi va mehmon uni ofitsiant Otabekka ko'rsatadi. Kod ekranga to'liq sig'sin — telefon tik turganda ham, yotganda ham. Ekran 400 × 800 CSS piksel bo'lsin:
| O'lcham | Tik (400 × 800) | Yotiq (800 × 400) |
|---|---|---|
width: 60vw |
240px | 480px — bo'yiga sig'maydi |
width: 60vmin |
240px | 240px |
60vmin har ikki holatda ham ekranning qisqa tomonidan olinadi. Kvadrat doim sig'adi:
figure {
width: 60vmin;
height: 60vmin;
}vmax kamroq ishlatiladi — masalan, fon bezagi ekranning uzun tomonini ham to'ldirishi kerak bo'lganda.
Tekshirib ko'ring: Telefon ekrani 360 × 780 CSS piksel.
50vminnecha piksel? Telefonni yotqizsangiz-chi?
Javob
Ikkala holatda ham 180px. vmin — en va bo'ydan kichigi, ya'ni 360. Uning yarmi — 180. Yotqizganda en 780, bo'y 360 bo'ladi, lekin kichik tomon baribir 360.
5. Mobil "100vh" muammosi
5.1 Yashirinib-chiqadigan panel
Telefonda saytni oching va pastga aylantiring. Tepadagi manzil qatori (ba'zi brauzerlarda pastdagi tugmalar paneli ham) yashirinadi — sahifaga ko'proq joy qoladi. Tepaga aylantirsangiz, panel qaytadi. Demak telefonda viewport bo'yi doim o'zgarib turadi.
Endi savol: 100vh qaysi bo'yga teng? Agar u har safar o'zgarsa, aylantirish paytida vh bilan o'lchangan hamma bloklar cho'zilib-qisqarib, sahifa "sakrardi". Mobil brauzerlar buning oldini olish uchun vh ni panel yashiringandagi — eng katta — bo'yga tenglashtirdi.
Natija — mashhur muammo. Sahifa endi ochilganda panel ko'rinib turibdi, height: 100vh blok esa undan balandroq. Uning pastki qismi panel ortida, ekrandan tashqarida qoladi:
flowchart TD
A["Sahifa ochildi: panel bor"] --> B["100vh blok ekrandan uzun"]
B --> C["Blokning pasti ko'rinmaydi"]
C --> D["Foydalanuvchi aylantirdi"]
D --> E["Panel yashirindi"]
E --> F["Endi 100vh = ko'rinadigan bo'y"]Nimaga qarang: blok faqat panel yashiringandan keyin ekranga roppa-rosa sig'adi. Birinchi taassurot esa — ochilgan paytdagi ekran. Tugma yoki "pastga aylantiring" yozuvi blokning pastki chetiga qo'yilgan bo'lsa, u aynan birinchi ekranda ko'rinmay qoladi. (Kontentni blok pastiga joylashni Flexbox darslarida o'rganamiz.)
5.2 Uch yangi birlik: svh, lvh, dvh
Muammoni hal qilish uchun CSS'ga viewport'ning uch xil o'lchami qo'shildi:
svh(small — kichik) — panellar ko'rinib turgandagi bo'y. Eng kichik holat.lvh(large — katta) — panellar yashiringandagi bo'y. Eskivhshunga teng.dvh(dynamic — o'zgaruvchan) — hozirgi bo'y: panel yashirinsa, kattalashadi, qaytsa, kichrayadi.
| Birlik | Panel ko'rinib turganda | Panel yashiringanda |
|---|---|---|
100svh |
Ko'rinadigan qism | O'zgarmaydi |
100lvh, 100vh |
Ekrandan uzun | Ko'rinadigan qism |
100dvh |
Ko'rinadigan qism | Ko'rinadigan qism |
Kompyuterda panellar yashirinmaydi, shuning uchun u yerda to'rttasi bir xil.
Xuddi shu old qo'shimchalar — s, l, d — boshqa viewport birliklariga ham qo'shiladi: svw, lvw, dvw, svmin, dvmax kabi. Yana vi va vb bor — matn yo'nalishi bo'yicha en va bo'y; o'zbekcha matnda vi = vw, vb = vh. Bu nomlarni yodlash shart emas: amalda eng ko'p kerak bo'ladigani — svh va dvh.
Baseline ma'lumotlariga ko'ra, svh, lvh, dvh va ularning oilasi 2022-yil dekabridan beri to'rt asosiy brauzerning hammasida ishlaydi, 2025-yil o'rtasidan beri esa "keng tarqalgan" (Widely available) holatida. Lekin eski, yangilanmagan telefonlar hali ham uchraydi — zaxira yozing (qanday — pastdagi «Bahor» yechimida).
5.3 Qaysi birini tanlash?
svh— ko'p holatda eng xavfsiz tanlov. Blok birinchi ekranga doim sig'adi va aylantirganda sakramaydi. «Bahor»ning "tabriknomasi" uchun aynan shu.dvh— ekranni roppa-rosa to'ldirishi shart bo'lgan joylarda: chat oynasi, xarita, to'liq ekranli ilova ko'rinishi. Kamchiligi: panel harakatlanganda blok bo'yi o'zgaradi va ostidagi hamma narsa suriladi. Oddiy matnli sahifada bu o'quvchini bezovta qiladi.lvh— kamdan-kam. Panel ortiga ham cho'zilishi kerak bo'lgan fon bezagi uchun.
Yana bir qoida: height emas, min-height yozing. Ma'nosi — "kamida bir ekran, kontent ko'p bo'lsa — undan ham baland". O'tgan darsdagi shrift sozlamasini eslang: kichik telefonda, Large shriftda matn bir ekranga sig'masligi mumkin. Shunda height bilan matn blokdan toshib chiqardi, min-height bilan esa blok o'zi cho'ziladi. Bu xususiyatni O'lchamlar darsida batafsil ko'rasiz.
5.4 «Bahor» tabriknomasi — to'g'ri yechim
<style>
body {
margin: 0;
}
header {
min-height: 100vh;
min-height: 100svh;
background-color: #2f6b3a;
color: #fffaf0;
}
header > * {
margin: 0;
padding: 0.5rem 1rem;
}
main {
padding: 0 1rem;
}
</style>
<header>
<h1>Choyxona «Bahor»</h1>
<p>Har kuni 7:00 dan 23:00 gacha ochiqmiz.</p>
</header>
<main>
<h2>Bugungi menyu</h2>
<p>Osh — 35 000 so'm</p>
</main>Nimaga qarang: yashil blok natija oynasining butun bo'yini egallaydi. Menyuni ko'rish uchun oyna ichida pastga aylantiring — u "keyingi ekranda". Telefonda esa blok ochilgan paytdagi ekranga roppa-rosa teng bo'ladi.
Uch nozik joy:
- Ikki
min-heightqatori — zaxira. CSS nima darsidan: brauzer tushunmagan qatorni tashlab ketadi. Eski brauzer100svhni tushunmaydi va100vhda qoladi. Yangisi ikkalasini o'qiydi, pastdagisi yutadi. body { margin: 0; }— brauzerbodyatrofiga 8 piksel tashqi bo'sh joy qo'yadi. Usiz yashil blok atrofida oq chiziq qolardi.header > *— ichki bo'sh joyni blokning o'ziga emas, bolalariga berdik. Nega — Box model vabox-sizingdarslarida tushunasiz:paddingblok bo'yiga qo'shiladi va u ekrandan uzun bo'lib qoladi.
Tekshirib ko'ring: Xarita ilovasi ekranni to'liq to'ldirishi kerak: pastda ham, tepada ham bo'sh joy qolmasin, panel yashirinsa ham. Qaysi birlik mos:
100svh,100lvhyoki100dvh?
Javob
100dvh. U doim hozirgi ko'rinadigan bo'yga teng: panel ko'rinsa — kichik, yashirinsa — katta. svh panel yashiringanda pastda bo'sh joy qoldirardi, lvh esa panel ko'ringanda xaritaning pastini yashirardi. Xarita ichidagi narsalar aylantirilmaydi, shuning uchun dvh ning "sakrashi" bu yerda muammo emas.
6. 100vw va gorizontal skroll
6.1 Muammo
Aksiya lentasini butun en bo'ylab cho'zmoqchimiz. Mantiqan width: 100vw to'g'ridek:
<style>
body {
margin: 0;
}
.aksiya {
width: 100vw;
background-color: #b4461a;
color: #fffaf0;
}
main {
height: 1000px; /* uzun sahifa o'rniga */
}
</style>
<p class="aksiya">Bugun ko'k choy — bepul!</p>
<main>
<h2>Bugungi menyu</h2>
</main>Windows kompyuterda natija oynasiga qarang: o'ng tomonda tik skrollbar, pastda esa gorizontal skrollbar ham paydo bo'ldi. Sahifani o'ngga surish mumkin — aksiya lentasining oxiri tik skrollbar ostiga kirib ketgan. Telefonda yoki macOS'da esa hech narsa ko'rinmaydi.
6.2 Nega?
100vw — viewport'ning to'liq eni, skrollbar bilan birga. Sahifa uzun bo'lsa, Windows'da skrollbar o'ng chetdan joy oladi va sahifaga kamroq en qoladi. Lekin 100vw buni hisobga olmaydi.
Windows 11'dagi Chrome'da o'lchadik: natija oynasi 668 piksel keng edi, skrollbar 15 pikselni oldi va sahifaga 653 piksel qoldi. 100vw esa 668 piksel — 15 piksel ortiqcha. Shu 15 piksel gorizontal skroll beradi.
Telefonda va macOS'da (odatiy sozlamada) skrollbar sahifa ustida suzib yuradi va joy egallamaydi, shuning uchun xato ko'rinmaydi. Mac'da ishlaydigan dasturchi uni sezmasligi mumkin, Windows'dagi foydalanuvchi esa har sahifada ko'radi.
body ning standart 8 piksellik margin i ham xuddi shunday xato beradi — hatto skrollbarsiz. Element chapdan 8 piksel ichkarida boshlanadi, 100vw uzunlikda davom etadi va o'ng chetdan 8 piksel chiqib ketadi.
6.3 Tuzatish
Blok element eni o'zi ota enini to'liq egallaydi — hech narsa yozish shart emas. Aniq kerak bo'lsa, width: 100% yozing: foiz skrollbarsiz qolgan joydan olinadi. Natijadagi "Tahrirlab ko'rish" bilan 100vw ni 100% ga almashtiring — gorizontal skroll yo'qoladi.
Internetda boshqa "yechim"ni ham uchratasiz: body { overflow-x: hidden; } — gorizontal skrollni taqiqlash. U kasallikni emas, belgisini yashiradi: chiqib ketgan qism endi shunchaki kesiladi. overflow ni Overflow darsida o'rganamiz.
Tekshirib ko'ring: Sahifa qisqa — bir ekranga sig'adi, tik skrollbar yo'q.
bodygamargin: 0berilgan.width: 100vwblok gorizontal skroll beradimi?
Javob
Yo'q. Skrollbar yo'q bo'lsa, 100vw sahifa eniga roppa-rosa teng, margin ham yo'q. Lekin sahifaga kontent qo'shilib, u uzaygan zahoti Windows'da skrollbar chiqadi va xato paydo bo'ladi. Shuning uchun 100% — ishonchli yo'l, 100vw — tasodifga bog'liq.
7. DevTools'da sinash
Viewport birliklarini sinashning tez yo'li — DevTools'ning qurilma rejimi: F12, keyin Ctrl + Shift + M (Chrome DevTools I). Tepadagi ro'yxatdan telefon tanlang yoki oyna enini sichqoncha bilan torting — vw dagi o'lchamlar darhol o'zgaradi. Computed yorlig'ida ularning pikseldagi qiymatini ko'rasiz (DevTools'da CSS).
Lekin bitta cheklov bor. Qurilma rejimi manzil panelini chizmaydi. Chrome'da tekshirdik: telefon rejimida 100svh, 100lvh, 100dvh va 100vh — hammasi bir xil. svh va dvh farqini faqat haqiqiy telefonda ko'rasiz. Eng oson yo'l — sahifani internetga joylab (Birinchi deploy), telefonda ochish va aylantirib ko'rish.
8. Ko'p uchraydigan xatolar
8.1 height: 100vh birinchi ekran
Telefonda blokning pasti panel ortida qoladi. Tuzatish: min-height: 100vh; min-height: 100svh; — zaxira bilan.
8.2 width: 100vw
Windows'da gorizontal skroll, body margin bilan — hamma joyda. Tuzatish: width ni o'chiring yoki 100% yozing.
8.3 height o'rniga min-height kerak edi
height: 100svh blokda matn ko'p bo'lsa yoki shrift kattalashtirilsa, kontent blokdan toshib chiqadi. Tuzatish: min-height.
8.4 Matn faqat vw da
Zoom va shrift sozlamasiga javob bermaydi, katta ekranda ulkan bo'lib ketadi. Tuzatish: clamp() va rem aralashmasi (Matematik funksiyalar).
8.5 Faqat kompyuterda sinash
DevTools qurilma rejimi svh va dvh farqini ko'rsatmaydi. Tuzatish: birinchi ekranni haqiqiy telefonda, aylantirib ko'ring.
9. Mashqlar
1-mashq (oson): Hisoblang
Viewport — 400 × 700 CSS piksel (panellar yo'q, shuning uchun vh = svh = dvh).
width: 25vw→ pxheight: 50vh→ pxwidth: 50vmin→ pxwidth: 10vmax→ px
Yechim
- 400 × 25% = 100px.
- 700 × 50% = 350px.
vmin— kichik tomon, 400: 400 × 50% = 200px.vmax— katta tomon, 700: 700 × 10% = 70px.
2-mashq (o'rta): Stajyorning tabriknomasi
Stajyor «Bahor» uchun shunday yozdi. Kompyuterda hammasi yaxshi, lekin Jasur aka telefonda "matn kesilib qolyapti va o'ngga suriladi" dedi:
header {
width: 100vw;
height: 100vh;
padding: 1rem;
background-color: #2f6b3a;
}
header h1 {
font-size: 12vw;
}Uchta muammoni toping va CSS'ni qayta yozing. Sarlavha shrifti hozircha rem da bo'lsin — vw ni rem bilan aralashtirishni Matematik funksiyalar darsida o'rganamiz.
Ishora: "Qaysi birini tanlash?", "100vw va gorizontal skroll" va "Matn o'lchami faqat vw da" bo'limlarini eslang. width kerakmi o'zi?
Yechim
height: 100vh— telefonda blok panel ortiga kirib ketadi, kontent ko'p bo'lsa toshib chiqadi.width: 100vw—bodymargin'i va skrollbar sabab gorizontal skroll.font-size: 12vw— zoom va shrift sozlamasiga javob bermaydi. 360 piksellik telefonda 43.2 piksel — uzun so'z ekranga sig'maydi.
body {
margin: 0;
}
header {
min-height: 100vh;
min-height: 100svh;
background-color: #2f6b3a;
}
header > * {
margin: 0;
padding: 0.5rem 1rem;
}
header h1 {
font-size: 2.25rem;
}width butunlay olib tashlandi — blok o'zi to'liq en oladi. padding bolalarga ko'chdi, aks holda u 100svh ga qo'shilib, blokni ekrandan uzun qilardi («Bahor» tabriknomasidagi uchinchi nozik joy).
3-mashq (qiyin): Qaysi birlik?
Har vazifa uchun birlik tanlang va bir gap bilan asoslang:
- Chat ilovasi: xabarlar ro'yxati ekranni to'liq to'ldiradi, pastdagi yozish maydoni doim ko'rinib turadi.
- Choyxona haqidagi sahifa boshida katta surat: birinchi ekranning kamida yarmi.
- Mehmonga ko'rsatiladigan QR kod: telefon tik ham, yotiq ham bo'lishi mumkin.
- Sahifa chap va o'ng chetidagi bo'sh joy: katta ekranda ko'proq bo'lsin.
Yechim
height: 100dvh. Yozish maydoni ko'rinadigan qismning pastida turishi kerak — panel yashirinsa ham, ko'rinsa ham. Ro'yxat ichki aylantiriladi, sahifa emas, shuning uchun "sakrash" sezilmaydi.min-height: 50svh. Birinchi ekranga — panel ko'rinib turganda — kafolatli sig'adi va aylantirganda o'zgarmaydi. Zaxira: oldidanmin-height: 50vh.width: 60vmin; height: 60vmin;— ekranning qisqa tomonidan olinadi, har holatda sig'adi.padding: 0 5vw;— ekran eniga qarab o'sadi. Buvwning xavfsiz ishlatilishi: matn o'lchami emas, bo'sh joy.
4-mashq: Portfolio qadami — 404 sahifasi ekranga moslashadi
Portfoliongizdagi 404 sahifasida xabar ekranning eng tepasiga yopishib turibdi. Uni biroz pastroqqa tushiring: ekran bo'yining 20 foizi.
asosiy.cssga faqat 404 sahifasiningmainini tanlaydigan qoida yozing.- Tepadagi ichki bo'sh joy — ko'rinadigan bo'yning 20 foizi. Aylantirganda sakramasin. Eski brauzer uchun zaxira ham yozing.
- Faylda
100vwborligini tekshiring (Ctrl + F). Bo'lsa — almashtiring. - Sahifani DevTools qurilma rejimida, keyin telefoningizda oching.
Ishora: Yakuniy loyiha darsidagi 404.html ni boshqa sahifalar bilan solishtiring: hamma sahifada <main id="asosiy">, 404 da esa main ning id si yo'q. "Atributi yo'q" degan shartni :not() bilan yozish mumkin (Mantiqiy pseudo-klasslar), atribut selektori — Atribut selektorlari darsidan.
Yechim
/* 404: id'si yo'q main — faqat 404.html da */
main:not([id]) {
padding-top: 20vh;
padding-top: 20svh;
}main:not([id])— "idatributi yo'qmain". Boshqa sahifalardagimainlardaid="asosiy"bor, ular tanlanmaydi.20svh— panel ko'rinib turgandagi bo'yning 20 foizi. Aylantirganda o'zgarmaydi.20vh— eski brauzer uchun zaxira.padding-top— faqat tepa tomondagi ichki bo'sh joy (CSS nima darsidagi to'liq yozuv).
404 sahifasi taxminan shunday ko'rinadi:
<style>
body {
font-family: system-ui, sans-serif;
color: #1f2a24;
background-color: #f7faf8;
}
h1 { color: #1f6f4a; }
main:not([id]) {
padding-top: 20vh;
padding-top: 20svh;
}
</style>
<main>
<h1>Kechirasiz, bu sahifa topilmadi</h1>
<p>Manzil noto'g'ri yozilgan yoki sahifa ko'chirilgan
bo'lishi mumkin.</p>
<ul>
<li><a href="/">Bosh sahifaga qaytish</a></li>
<li><a href="/loyihalar/">Loyihalarim</a></li>
</ul>
</main>Natija oynasida svh oynaning o'z bo'yidan olinadi, shuning uchun tepadagi bo'sh joy bu yerda telefondagidan boshqacha chiqadi. Haqiqiy ko'rinishni telefoningizda tekshiring: xabar ekranning taxminan beshdan bir qismi pastidan boshlanadi.
100vw topilmagan bo'lsa — ajoyib. CSS nima darsidan beri biz hech qayerda width bermadik: hamma bloklar o'z enini o'zi oldi.
10. Real ishda
- Landing sahifalar (bitta mahsulot yoki xizmatni tanishtiradigan sahifa) deyarli har doim "birinchi ekran" (hero) bloki bilan boshlanadi. Unda
min-height: 100svhyoki100dvh— zamonaviy standart. Eski loyihalarda100vhni va uni JavaScript bilan "tuzatadigan" kodni uchratasiz — yangi birliklardan oldin shunday qilishardi. - Tailwind (tayyor class'lar to'plami, kursda alohida o'rganamiz)
h-screen(100vh) bilan birgah-svh,h-dvh,min-h-svhkabi class'larni ham beradi. - Telefondagi klaviatura ochilganda viewport yana o'zgaradi — bu alohida mavzu, uni Mobil qurilma tuzoqlari darsida ko'ramiz.
- Intervyuda so'raladi: "
100vhtelefonda nega muammo?dvhvasvhfarqi nima?", "Nega100vwgorizontal skroll beradi?". Bu darsdan keyin ikkalasiga ham javob bera olasiz.
Xulosa
vw/vh— viewport eni/bo'yining foizi; otaga emas, oynaga bog'liq.vmin/vmax— qisqa/uzun tomon.- Telefonda
vhpanel yashiringandagi katta bo'yga teng — shuning uchun100vhblok birinchi ekranda kesiladi. svh— kichik (panel bor),lvh— katta,dvh— hozirgi bo'y. Birinchi ekran uchun odatdamin-height: 100svh, zaxira bilan.100vwskrollbarni ham o'z ichiga oladi —width: 100%ishlating yokiwidthni umuman yozmang.- Matn o'lchamini faqat
vwda bermang: zoom va shrift sozlamasi ishlamay qoladi.
Keyingi dars: Ranglar 1: nomli, hex, rgb, hsl va shaffoflik — «Bahor» ranglarining kodini o'qishni, rgb() va hsl() yozuvlarini va shaffof rang berishni o'rganamiz. Undan keyingi darsda esa clamp() bilan o'lchamlarni chegaralaymiz.
Manbalar
- MDN: "length" (viewport-percentage lengths), "Viewport concepts" — developer.mozilla.org
- W3C: "CSS Values and Units Module Level 4", "Viewport-percentage lengths" bo'limi — w3.org/TR/css-values-4
- web.dev: "The large, small, and dynamic viewport units" — web.dev/blog/viewport-units
- web-features (Baseline ma'lumotlari): "Small, large, and dynamic viewport units" — github.com/web-platform-dx/web-features
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!