Desain responsif dengan media query
Tanpa satu tag meta, banyak ponsel menata halaman seolah-olah layarnya jauh lebih lebar (MDN memberi contoh 980 piksel) lalu mengecilkannya, sehingga media query untuk ponsel tidak pernah berjalan.
Satu halaman, semua layar
Desain responsif berarti membangun satu halaman yang menyesuaikan diri dengan layar apa pun tempat ia dibuka, dari ponsel sempit sampai monitor lebar, alih-alih membuat situs seluler terpisah. Desain ini bertumpu pada tiga gagasan: tata letak dari lebar yang lentur, bukan lebar tetap; media yang berskala di dalam wadahnya; dan media query yang menyesuaikan tata letak di titik-titik tempat tata letak itu mulai rusak. Flexbox dan grid sudah mengerjakan banyak bagian, seperti terlihat di dua unit sebelumnya dengan kartu yang membungkus dan kolom auto-fill.
Tag meta viewport
Banyak ponsel menggambar halaman dalam viewport virtual yang lebih lebar daripada layar, MDN memberi contoh 980 piksel, lalu mengecilkan hasilnya, karena situs lama dibuat untuk desktop. Bagi halaman yang dirancang untuk menyesuaikan diri, ini mengganggu: media query yang seharusnya aktif di bawah 600 piksel tidak pernah berjalan, karena browser mengira layarnya 980 piksel. <meta name="viewport" content="width=device-width"> di head memberi tahu browser agar memakai lebar perangkat yang sebenarnya, diukur dalam piksel CSS. Jangan pernah menambahkan user-scalable=no atau maximum-scale yang rendah; MDN memperingatkan bahwa memblokir zoom menyingkirkan orang dengan penglihatan lemah, dan WCAG 1.4.4 mengharapkan teks bisa diperbesar sampai 200 persen.
Lebar dan gambar yang lentur
Lebar tetap adalah penyebab paling umum gulir ke samping di ponsel. Utamakan max-width daripada width: max-width: 70rem pada pembungkus halaman membuatnya memenuhi layar kecil dan berhenti membesar di layar besar. Secara bawaan, gambar mempertahankan ukuran piksel aslinya, jadi foto 1200 piksel tumpah keluar dari layar 390 piksel. img { max-width: 100%; height: auto; } membuat gambar mengecil sesuai wadahnya sambil menjaga proporsinya. WCAG 1.4.10, Reflow, meminta konten tetap berfungsi pada lebar 320 piksel CSS tanpa gulir ke dua arah; memeriksa halamanmu di jendela selebar 320 piksel adalah kebiasaan yang baik.
Media query
Media query membungkus aturan yang hanya berlaku saat sebuah kondisi terpenuhi. @media (min-width: 600px) { ... } menerapkan aturannya saat viewport paling sedikit 600 piksel lebarnya. Pendekatan yang lazim adalah mobile first: tulis gaya dasar untuk layar sempit, yang sering kali paling sederhana (satu kolom, semuanya bertumpuk), lalu tambahkan query min-width yang menata ulang saat ruang bertambah. Pilih breakpoint di titik tempat kontenmu mulai terlihat janggal, bukan dengan menebak ukuran perangkat populer, karena ukuran layar baru muncul setiap tahun. Menulis breakpoint dalam em, seperti 40em, juga membuatnya ikut menanggapi saat pembaca memperbesar teks.
/* Base: one column for narrow screens */
.cols { display: grid; gap: 16px; }
/* From 600px: two columns */
@media (min-width: 600px) {
.cols { grid-template-columns: 1fr 1fr; }
}
/* From 960px: a sidebar layout */
@media (min-width: 960px) {
.cols { grid-template-columns: 240px 1fr 1fr; }
}Hal lain yang bisa ditanyakan query
Media query bisa menguji lebih dari lebar. Fitur preferensi pembaca berasal dari Media Queries Level 5: (prefers-color-scheme: dark) cocok saat pembaca memilih tema gelap di sistem operasi, jadi kamu bisa menawarkan warna gelap secara otomatis. (prefers-reduced-motion: reduce) cocok saat pembaca meminta gerakan dikurangi, sering karena animasi membuat mereka pusing; matikan gerakan besar dan efek paralaks di dalamnya. (hover: hover), dari Level 4, memberi tahu apakah penunjuk utama bisa melayang (hover), yang tidak bisa dilakukan layar sentuh. print menata halaman untuk kertas, misalnya dengan menyembunyikan menu. Terakhir, clamp() mengatur ukuran dengan mulus tanpa query: font-size: clamp(1.5rem, 4vw, 2.5rem) membesar mengikuti layar tetapi tidak pernah di bawah 1.5rem atau di atas 2.5rem.
| desain responsif | Satu halaman yang menyesuaikan diri dengan setiap layar |
| viewport | Area halaman yang terlihat di browser |
| width=device-width | Pakai lebar perangkat sebenarnya, bukan 980px virtual |
| media query | @media (kondisi) { aturan } |
| mobile first | Gaya dasar untuk layar sempit, lalu query min-width |
| breakpoint | Lebar tempat tata letak berubah |
| prefers-reduced-motion | Pembaca meminta animasi dikurangi |
| clamp() | Nilai antara minimum dan maksimum |
- Mengapa media query ponsel gagal tanpa tag meta viewport?
- Ponsel menata halaman pada lebar virtual yang lebar
- Ponsel mengabaikan CSS
- Media query memerlukan JavaScript
- Kapan
@media (min-width: 600px)berlaku?- Saat viewport selebar 600px atau lebih
- Di bawah 600px
- Hanya tepat pada 600px
- Apa arti mobile first?
- Tulis gaya dasar untuk layar sempit, lalu tambahkan query min-width
- Bangun situs ponsel dulu, situs desktop belakangan
- Sembunyikan konten di ponsel
- Aturan mana yang mencegah gambar besar tumpah keluar dari layar sempit?
- img { max-width: 100%; height: auto; }
- img { width: 1200px; }
- img { display: none; }
- Pada lebar berapa WCAG 1.4.10 Reflow meminta konten berfungsi tanpa gulir dua arah?
- Mengapa user-scalable=no jangan pernah dipasang?
- Itu memblokir zoom, menyingkirkan orang dengan penglihatan lemah
- Itu merusak media query
- Itu bukan HTML yang sah
- Bagaimana cara memilih breakpoint?
- Di titik tempat kontenmu mulai terlihat janggal
- Dari daftar ponsel populer
- Selalu 768px
- Query mana yang cocok untuk pembaca yang meminta animasi dikurangi?
- (prefers-reduced-motion: reduce)
- (hover: none)
- (orientation: portrait)
- font-size: clamp(1.5rem, 4vw, 2.5rem) pada layar selebar 1600px dengan rem 16px. Berapa ukurannya?
- Mengapa breakpoint ditulis dalam em?
- Breakpoint ikut menanggapi saat pembaca memperbesar teks
- em wajib dalam media query
- Lebih cepat dimuat
- Tambahkan tag meta viewport; jangan pernah memblokir zoom.
- Lebar lentur, max-width alih-alih width, img { max-width: 100%; height: auto; }.
- Mobile first dengan query min-width di breakpoint konten; juga prefers-color-scheme, prefers-reduced-motion, print, dan clamp().
Sumber kursus ini (6)
- W3C CSS Working Group specifications: CSS Snapshot 2025, Selectors Level 4, CSS Cascading and Inheritance Level 5, CSS Color Level 4, CSS Values and Units Level 4, CSS Box Model Level 3, CSS Box Sizing Level 3, CSS Fonts Level 4, CSS Flexible Box Layout Level 1, CSS Grid Layout Level 2, Media Queries Level 4 and Level 5 (w3.org/TR/, checked 2026-10-17)
- MDN Web Docs, Learn web development: CSS styling basics and CSS layout, and the CSS reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics, .../Core/CSS_layout, developer.mozilla.org/en-US/docs/Web/CSS, checked 2026-10-17)
- W3C, CSS history and CSS1 Recommendation of 17 December 1996 (w3.org/Style/CSS20/history.html, w3.org/press-releases/1996/css1-rec, checked 2026-10-17)
- W3C WCAG 2.2, success criteria 1.4.3 Contrast (Minimum)
- 1.4.8 Visual Presentation, 1.4.10 Reflow, 1.4.12 Text Spacing (w3.org/TR/WCAG22/, checked 2026-10-17)
- every code exercise checked with a Playwright probe against a reference solution.
Diperiksa: 2026-10-17