Tag yang perlu dipakai
Letakkan baris ini di <head> setiap halaman:
<meta name="viewport" content="width=device-width, initial-scale=1">
width=device-width membuat layout selebar layar, dan initial-scale=1 membuka halaman dengan zoom 100%. Hanya itu yang dibutuhkan kebanyakan situs. Halaman lengkap dengan tag ini terpasang:
Script ini membaca tag dan lebar layout. Browser desktop mengabaikan tag viewport, jadi di preview ini lebarnya sama dengan lebar kotak preview. Di ponsel, file yang sama melaporkan lebar ponsel (biasanya 360 sampai 430 piksel CSS) karena tag ini.
Apa yang terjadi di ponsel tanpa tag ini
Browser mobile yang tidak menemukan tag viewport menganggap halaman itu dibuat untuk desktop. Browser menyusun halaman dengan lebar sekitar 980 piksel, lalu mengecilkan semuanya agar muat di layar. Dua ponsel tiruan di bawah ini memuat halaman yang sama, satu disusun dengan lebar 980px dan satu dengan lebar ponsel, keduanya diskalakan ke ukuran yang sama:
Di ponsel pertama, teks 16px jadi sangat kecil dan pembaca harus mencubit layar untuk zoom. Di ponsel kedua teksnya tetap terbaca, dan kolom-kolomnya bertumpuk karena aturan @media (max-width: 600px) cocok. Itulah tugas kedua tag ini: media query melihat lebar layout, jadi tanpa tag ini ponsel melaporkan 980px dan gaya mobile-mu tidak pernah berlaku. Ganti 375 menjadi 980 di show('with', 375) dan kedua ponsel akan terlihat sama.
Tag ini baru setengah pekerjaan
Tag viewport memberimu layout yang sempit; CSS-mu harus muat di dalamnya. Satu elemen dengan lebar tetap yang lebih lebar dari layar membuat seluruh halaman bisa digeser ke samping:
Kotak pertama bisa digeser ke samping; kotak kedua mengecil agar muat. Beri gambar dan elemen lebar lainnya max-width: 100%, dan utamakan lebar yang fleksibel (persentase, fr, flexbox) daripada lebar piksel yang tetap.
Nilai viewport
| Nilai | Contoh | Fungsinya |
|---|---|---|
width | width=device-width | Lebar layout. device-width adalah lebar layar dalam piksel CSS; angka juga boleh, tapi jarang jadi ide yang bagus. |
initial-scale | initial-scale=1 | Tingkat zoom saat halaman dibuka. |
minimum-scale / maximum-scale | maximum-scale=5 | Batas zoom. Nilai maksimum yang rendah memblokir zoom, jadi jangan tulis maximum-scale. |
user-scalable | user-scalable=yes | Apakah zoom dengan mencubit diizinkan. Jangan ditulis. |
viewport-fit | viewport-fit=cover | Membuat halaman meluas sampai ke bawah notch atau sudut yang membulat, dipasangkan dengan padding env(safe-area-inset-*). |
interactive-widget | interactive-widget=resizes-content | Bagaimana keyboard di layar memengaruhi layout. Didukung oleh Chrome di Android. |
Nilai-nilainya dipisahkan koma. Halaman yang memenuhi seluruh layar di ponsel dengan notch terlihat seperti ini:
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<style>
body {
padding-top: env(safe-area-inset-top);
padding-bottom: env(safe-area-inset-bottom);
}
</style>
Jangan blokir zoom
Kamu akan menemukan tag ini di template lama:
<!-- Avoid: stops people from zooming -->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
Tag ini mencegah zoom dengan mencubit, yang diandalkan oleh orang dengan penglihatan rendah, dan pemeriksa aksesibilitas seperti Lighthouse menandainya. Safari di iOS mengabaikan user-scalable=no, jadi tag ini bahkan tidak berfungsi secara konsisten. Kalau sebuah kolom form melakukan zoom saat diketuk di iPhone, penyebabnya adalah ukuran font di bawah 16px pada input; atur font-size input itu minimal 16px, jangan menonaktifkan zoom.
Kesalahan umum
- Lupa menulis tag ini. Stylesheet responsif tidak berbuat apa-apa di ponsel tanpa tag ini, karena media query melihat layout 980px. Letakkan di samping tag title di template halamanmu.
- Titik koma di antara nilai. Pakai koma:
width=device-width, initial-scale=1. - Menulis lebar secara tetap seperti
width=375. Ukuran layar berbeda-beda; pakaidevice-width. - Menonaktifkan zoom dengan
user-scalable=noataumaximum-scale=1. - Menyalahkan tag ini saat halaman bisa digeser ke samping. Cari elemen yang lebih lebar dari layar dan beri lebar yang fleksibel.
Pertanyaan yang sering diajukan
Apa fungsi tag meta viewport?
Tag ini memberi tahu browser mobile selebar apa layout halaman. Tanpa tag ini, kebanyakan ponsel menyusun halaman dengan lebar sekitar 980 piksel CSS lalu mengecilkannya agar muat di layar. Dengan width=device-width, lebar layout sama dengan lebar layar, sehingga teks terbaca dan media query berfungsi.
Seperti apa tag meta viewport yang standar?
<meta name="viewport" content="width=device-width, initial-scale=1">, diletakkan di <head>. Ini pilihan yang tepat untuk hampir semua halaman responsif.
Kenapa meta viewport-ku tidak berfungsi?
Pastikan tagnya ada di <head>, name-nya viewport, dan nilainya dipisahkan koma. Kalau halaman masih bisa digeser ke samping, ada elemen yang lebih lebar dari layar, seperti lebar tetap, gambar besar atau kata yang panjang; tag ini tidak bisa memperbaiki CSS yang lebih lebar dari perangkat.
Perlukah aku memakai user-scalable=no atau maximum-scale=1?
Tidak. Keduanya mencegah orang melakukan zoom, padahal banyak pengguna dengan penglihatan rendah mengandalkannya, dan keduanya gagal dalam audit aksesibilitas. Safari di iOS juga mengabaikan user-scalable=no.
Apakah tag meta viewport berpengaruh di browser desktop?
Tidak. Browser desktop mengabaikannya; lebar layout di sana sama dengan lebar jendela. Tag ini penting di ponsel dan tablet.