Panduan kepada CSS Viewport Units vw, vh, vmin, vmax
Tempoh peratusan-peratusan, atau unit paparan kerana mereka lebih sering dirujuk, adalah unit CSS responsif yang membolehkan anda untuk menentukan dimensi sebagai peratusan lebar atau panjang viewport. Unit paparan boleh sangat berguna dalam kes di mana unit CSS responsif lain, seperti peratusan, adalah sukar untuk membuat kerja.
Walaupun Dokumentasi W3C pada unit viewport mengandungi segala sesuatu yang boleh dimasukkan ke dalam teori, ia tidak terlalu verbose. Oleh itu, dalam artikel ini, kita akan melihat bagaimana unit CSS ini kerja dalam amalan.
Ketinggian paparan (vh
) & lebar paparan (vw
)
W3C mentakrifkan viewport sebagai “saiz blok yang mengandungi awal”. Dengan kata lain, viewport adalah kawasan terkandung dalam tetingkap penyemak imbas atau mana-mana kawasan tontonan lain pada skrin.
The vw
dan vh
unit berdiri untuk peratusan lebar dan ketinggian viewport sebenar. Mereka boleh mengambil nilai antara 0 dan 100 mengikut peraturan berikut:
100vw = 100% lebar viewport 1vw = 1% dari lebar viewport 100vh = 100% dari ketinggian viewport 1vh = 1% dari ketinggian viewport
Perbezaan dengan unit peratusan
Jadi, bagaimanakah unit viewport berbeza daripada unit peratusan? Unit peratusan mewarisi saiz elemen ibu bapa mereka manakala unit viewport tidak. Unit paparan sentiasa dikira sebagai peratusan saiz paparan. Hasilnya, elemen yang ditakrifkan oleh unit paparan boleh melebihi saiz induknya.
Contoh: Bahagian skrin penuh
Bahagian skrin penuh adalah mungkin kes penggunaan unit viewport yang paling banyak diketahui.
The HTML agak mudah; kita hanya ada tiga bahagian di bawah satu sama lain dan kami mahu setiap mereka meliputi seluruh skrin (tetapi tidak lebih).
Dalam CSS, kami gunakan 100vh
sebagai ketinggian
nilai dan 100%
sebagai lebar
. Kami tidak menggunakannya vw
unit di sini secara lalai, scrollbar juga ditambah kepada saiz paparan. Jadi, jika kita menggunakannya lebar: 100vw;
memerintah a bar skru mendatar akan muncul di bahagian bawah tetingkap penyemak imbas.
* margin: 0; padding: 0; seksyen background-size: cover; kedudukan latar belakang: pusat; lebar: 100%; ketinggian: 100vh; .section-1 background-image: url ('https://assets.hongkiat.com/uploads/css-viewport-units-vw-vh-wmin-vmax/img1.jpg'); .section-2 background-image: url ('https://assets.hongkiat.com/uploads/css-viewport-units-vw-vh-wmin-vmax/img2.jpg'); .section-3 background-image: url ('https://assets.hongkiat.com/uploads/css-viewport-units-vw-vh-wmin-vmax/img3.jpg');
Pada demo gif di bawah, anda boleh melihatnya vh
adalah benar unit responsif.
Menurut dokumen W3C, yang disebutkan di atas Isu gelung huluan boleh diselesaikan dengan menambah limpahan: auto;
memerintah ke elemen akar. Penyelesaian ini hanya berfungsi sebahagiannya, walaupun. Bilah tatal mendatar, sesungguhnya, hilang tetapi lebar
adalah masih dikira berdasarkan lebar paparan (bar sisi disertakan), jadi unsur-unsur akan sedikit lebih besar daripada yang seharusnya.
Saya akan berkata, saya tidak akan berani menggunakannya vw
unit pada saiz skrin penuh kerana sebab ini. Kami tidak memerlukannya, kerana lebar: 100%;
peraturan berfungsi dengan sempurna. Dengan susun atur skrin penuh, cabaran sebenar selalu menjadi cara menetapkan nilai ketinggian yang betul dan juga vh
unit memberikan penyelesaian cemerlang untuk itu.
Kes penggunaan lain
Sekiranya anda berminat kes penggunaan lain vw
dan vh
Lullabot mempunyai artikel hebat yang menyenaraikan a segelintir contoh kehidupan sebenar (dengan demo Codepen), seperti:
- Kad nisbah tetap.
- Menjaga elemen lebih pendek daripada skrin.
- Teks penskalaan.
- Memecah keluar bekas.
Opera.dev juga mempunyai tutorial ringkas tentang bagaimana anda boleh mengambil leverage vw
unit dalam mewujudkan tipografi responsif.
Anda tidak boleh menggunakan unit paparan sahaja lebar
dan ketinggian
hartanah tetapi pada mana-mana yang lain. Sebagai contoh, anda boleh menetapkan saiz padding dan margin menggunakan vw
dan vh
unit juga.
Min pemandangan (vmin
) & maxportport (vmax
)
The vmin
dan vmax
unit membolehkan anda mengakses saiz bahagian yang lebih kecil atau lebih besar dari viewport, menurut peraturan berikut:
100vmin = 100vw atau 100vh, yang mana lebih kecil 1vmin = 1vw atau 1vh, mana yang lebih kecil 100vmax = 100vw atau 100vh, yang mana lebih besar 1vmax = 1vw atau 1vh, mana yang lebih besar
Jadi, dalam hal a orientasi potret, 100vmin
adalah sama dengan 100vw
, sebagai viewport adalah lebih kecil secara mendatar daripada menegak. Atas alasan yang sama, 100vmax
akan sama dengan 100vh
.
Begitu juga, dalam hal a orientasi landskap, 100vmin
adalah sama dengan 100vh
, sebagai viewport adalah lebih kecil secara menegak daripada mendatar. Dan tentu saja, 100vmax
akan sama dengan 100vw
di sini.
Contoh: Buat teks pahlawan yang boleh dibaca pada setiap skrin
The vmin
dan vmax
unit adalah jauh lebih dikenali daripada vw
dan vh
. Walau bagaimanapun, mereka boleh digunakan dengan baik sebagai ganti orientasi @media
pertanyaan. Contohnya, vmin
dan vmax
boleh berguna apabila anda mempunyai elemen yang kelihatan aneh pada nisbah aspek yang berlainan.
Kod Baru mempunyai tutorial hebat di mana mereka membincangkan bagaimana anda boleh menyimpan teks pahlawan yang boleh dibaca pada setiap skrin, menggunakan vmin
unit. Teks pahlawan mudah dilihat terlalu kecil pada mudah alih dan terlalu besar pada monitor besar.
Inilah idea utama penyelesaian mereka:
h1 font-size: 20vmin; font-family: Avenir, sans-serif; font-weight: 900; teks-align: center;
Dalam demo Codepen, anda boleh menyemak bagaimana vmin
menyelesaikan masalah pembacaan teks pahlawan. Akses “Halaman penuh” lihat pada Codepen, kemudian ubah saiz tetingkap pelayar anda baik secara melintang dan menegak untuk melihat bagaimana perubahan teks pahlawan.
Sokongan penyemak imbas
Seperti yang dapat anda lihat pada carta CanIUse di bawah, Sokongan penyemak imbas adalah agak baik untuk unit viewport. Walau bagaimanapun, perlu diingat bahawa beberapa versi IE dan Edge tidak menyokong vmax
. Juga, iOS 6 dan 7 mempunyai masalah dengan vh
unit, yang telah ditetapkan dalam iOS 8.