Menu

Tag Meta Viewport: Penjelasan width=device-width

Tag meta viewport memberi tahu ponsel untuk menyusun halaman selebar layar, bukan selebar desktop. Pelajari tag standarnya, fungsi setiap nilainya, kenapa CSS responsif bergantung padanya, dan nilai mana yang sebaiknya dihindari.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

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

NilaiContohFungsinya
widthwidth=device-widthLebar layout. device-width adalah lebar layar dalam piksel CSS; angka juga boleh, tapi jarang jadi ide yang bagus.
initial-scaleinitial-scale=1Tingkat zoom saat halaman dibuka.
minimum-scale / maximum-scalemaximum-scale=5Batas zoom. Nilai maksimum yang rendah memblokir zoom, jadi jangan tulis maximum-scale.
user-scalableuser-scalable=yesApakah zoom dengan mencubit diizinkan. Jangan ditulis.
viewport-fitviewport-fit=coverMembuat halaman meluas sampai ke bawah notch atau sudut yang membulat, dipasangkan dengan padding env(safe-area-inset-*).
interactive-widgetinteractive-widget=resizes-contentBagaimana 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; pakai device-width.
  • Menonaktifkan zoom dengan user-scalable=no atau maximum-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.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai