1818 kata
9 menit

Belajar CSS Responsive: Biar Website Nyaman Dibuka di HP

Pernah membuka sebuah website melalui HP, tetapi tulisannya terlalu kecil, gambarnya melebar, atau kita harus menggeser halaman ke kanan dan kiri hanya untuk membaca satu paragraf?

Padahal ketika website yang sama dibuka melalui laptop, tampilannya baik-baik saja.

Masalah seperti ini biasanya berkaitan dengan bagaimana halaman menyesuaikan diri terhadap ukuran layar.

Halo, Gabuters!

Pada artikel sebelumnya, kita sudah belajar menggunakan Flexbox untuk menyusun elemen. Sekarang kita akan melanjutkannya dengan Responsive Web Design, supaya layout yang kita buat tidak hanya bagus di laptop, tetapi juga nyaman digunakan di HP.

Kita tidak perlu membuat dua website berbeda. Kita cukup membuat satu halaman yang mampu menyesuaikan tampilannya.

1. Apa Itu Responsive Web Design?#

Responsive Web Design adalah pendekatan membuat tampilan website yang dapat menyesuaikan diri dengan ruang yang tersedia pada perangkat pengguna.

Misalnya, kita mempunyai tiga kartu artikel.

Pada layar laptop yang lebar, ketiganya bisa ditampilkan berdampingan.

DESKTOP
+---------------------------------------+
| |
| +---------+ +---------+ +---------+ |
| | Artikel | | Artikel | | Artikel | |
| | 1 | | 2 | | 3 | |
| +---------+ +---------+ +---------+ |
| |
+---------------------------------------+

Namun, ketika dibuka melalui HP, ruangnya jauh lebih sempit.

Daripada memaksakan tiga kartu tetap berdampingan, kita bisa menyusunnya ke bawah.

MOBILE
+-----------------+
| |
| +-----------+ |
| | Artikel 1 | |
| +-----------+ |
| |
| +-----------+ |
| | Artikel 2 | |
| +-----------+ |
| |
| +-----------+ |
| | Artikel 3 | |
| +-----------+ |
| |
+-----------------+

Kontennya tetap sama. Yang berubah hanyalah cara kita menyusunnya.

Inilah salah satu tujuan responsive design: menyesuaikan tampilan tanpa mengorbankan kenyamanan membaca dan menggunakan halaman.

2. Kenapa Website Bisa Melebar di HP?#

Ada beberapa penyebab umum.

Misalnya, kita membuat container dengan lebar tetap:

.container {
width: 1000px;
}

Ketika layar pengguna lebih sempit dari 1000 piksel, container tersebut tetap berusaha menggunakan lebar yang sudah ditentukan.

Akibatnya, halaman bisa melebar dan memunculkan scroll horizontal.

Contoh lain adalah gambar:

img {
width: 800px;
}

Jika gambar tersebut berada di dalam area yang lebih sempit, ukurannya bisa melebihi ruang yang tersedia.

Untuk mengurangi masalah seperti ini, kita bisa mulai menggunakan ukuran yang lebih fleksibel.

.container {
width: 100%;
max-width: 1000px;
}

Dengan kombinasi tersebut, container dapat mengikuti lebar area induknya, tetapi tidak melebihi 1000 piksel.

Untuk gambar:

img {
max-width: 100%;
height: auto;
}

Aturan ini membantu gambar menyusut ketika ruangnya terbatas tanpa merusak perbandingan aspek aslinya.

Perlu diingat, gambar bukan satu-satunya penyebab overflow. Teks panjang tanpa pemisah, elemen dengan min-width besar, dan padding yang tidak diperhitungkan juga bisa menimbulkan masalah.

3. Mengenal Viewport#

Sebelum mengatur responsive design, ada satu hal penting yang perlu kita periksa pada HTML.

Di dalam elemen <head>, tambahkan:

<meta name="viewport" content="width=device-width, initial-scale=1.0">

Apa fungsinya?

Secara sederhana, viewport adalah area yang digunakan browser untuk menampilkan halaman.

Pada browser mobile, meta viewport tersebut membantu membuat lebar layout mengikuti lebar perangkat dalam CSS pixel, dengan skala awal yang normal.

Tanpa konfigurasi viewport yang sesuai, browser mobile tertentu dapat menggunakan layout viewport yang lebih lebar lalu mengecilkan tampilan halaman.

Akibatnya, teks dan elemen bisa terlihat sangat kecil.

Jika kita menggunakan struktur HTML dasar dari series sebelumnya, bagian <head> kira-kira menjadi seperti ini:

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Profil BapakGabut</title>
<link rel="stylesheet" href="style.css">
</head>

Meta viewport tidak otomatis membuat website responsive.

Kita tetap perlu menulis CSS yang mampu menyesuaikan layout.

4. Mengenal Media Query#

Sekarang kita sampai pada salah satu fitur penting CSS Responsive, yaitu media query.

Media query memungkinkan kita menerapkan aturan CSS ketika kondisi tertentu terpenuhi.

Misalnya:

.kotak {
background-color: lightblue;
}
@media (max-width: 600px) {
.kotak {
background-color: lightgreen;
}
}

Artinya:

  • Secara default, kotak menggunakan warna biru muda.
  • Ketika lebar viewport 600 piksel atau kurang, warnanya berubah menjadi hijau muda.

Coba ubah ukuran jendela browser dan perhatikan kapan warnanya berubah.

Media query tidak hanya digunakan untuk warna. Kita bisa memakainya untuk mengubah layout, ukuran teks, jarak, atau properti CSS lainnya.

Angka 600px pada contoh tersebut bukan aturan wajib.

Kita memilih breakpoint berdasarkan kebutuhan layout, bukan semata-mata berdasarkan merek atau ukuran perangkat tertentu.

5. Desktop First dan Mobile First#

Ada dua pendekatan yang sering dibahas ketika membuat responsive design.

Desktop First#

Pada pendekatan ini, kita menulis tampilan layar besar terlebih dahulu, kemudian menyesuaikannya untuk layar yang lebih kecil.

Contohnya:

.kartu {
width: 600px;
}
@media (max-width: 600px) {
.kartu {
width: 100%;
}
}

Mobile First#

Pada pendekatan mobile first, kita mulai dari tampilan layar kecil, kemudian menambahkan aturan ketika ruang layar semakin besar.

Contohnya:

.kartu {
width: 100%;
}
@media (min-width: 768px) {
.kartu {
width: 600px;
}
}

Kedua pendekatan tersebut bisa digunakan.

Namun, untuk latihan kita kali ini, kita akan mencoba mobile first.

Alasannya sederhana: kita mulai dengan layout yang nyaman pada ruang sempit, kemudian memanfaatkan ruang tambahan ketika layar lebih lebar.

Dengan begitu, kita juga belajar memikirkan kebutuhan pengguna mobile sejak awal.

6. Praktik: Membuat Kartu Profil Responsive#

Pada artikel Flexbox sebelumnya, kita sudah membuat kartu profil BapakGabut.

Foto berada di sebelah kiri, sedangkan nama dan deskripsi berada di sebelah kanan.

Layout tersebut cocok untuk layar yang cukup lebar.

Namun, bagaimana jika kartu dibuka melalui HP?

Kita akan membuatnya berubah menjadi susunan vertikal pada layar sempit dan horizontal pada layar yang lebih lebar.

HTML#

Buat file index.html:

<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Profil Responsive BapakGabut</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="halaman">
<article class="kartu-profil">
<img
src="foto-profil.jpg"
alt="Foto profil BapakGabut"
class="foto-profil"
>
<div class="informasi-profil">
<h1>BapakGabut</h1>
<p>Ngoding, main game, dan ngulik apa saja.</p>
<a href="#artikel">Lihat Artikel</a>
</div>
</article>
<section id="artikel" class="bagian-artikel">
<h2>Artikel Pilihan</h2>
<p>Tempat berbagi cerita dan pembelajaran.</p>
</section>
</main>
</body>
</html>

Ganti foto-profil.jpg dengan gambar yang tersedia di folder latihanmu.

Tautan #artikel akan membawa pengguna ke bagian Artikel Pilihan pada halaman yang sama.

CSS Dasar untuk Mobile#

Sekarang buat file style.css:

* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: Arial, sans-serif;
line-height: 1.6;
color: #1f2937;
background-color: #f1f5f9;
}
.halaman {
width: 100%;
max-width: 1000px;
margin: 0 auto;
padding: 16px;
}
.kartu-profil {
display: flex;
flex-direction: column;
align-items: center;
gap: 20px;
padding: 24px;
border: 1px solid #d1d5db;
border-radius: 12px;
background-color: white;
}
.foto-profil {
width: 120px;
height: 120px;
flex-shrink: 0;
object-fit: cover;
border-radius: 50%;
}
.informasi-profil {
min-width: 0;
width: 100%;
text-align: center;
}
.informasi-profil h1 {
margin: 0 0 8px;
font-size: 1.75rem;
}
.informasi-profil p {
margin: 0 0 16px;
}
.informasi-profil a {
display: inline-block;
padding: 10px 16px;
border-radius: 8px;
background-color: #2563eb;
color: white;
text-decoration: none;
}
.informasi-profil a:hover {
background-color: #1d4ed8;
}
.informasi-profil a:focus-visible {
outline: 3px solid #f59e0b;
outline-offset: 3px;
}
.bagian-artikel {
margin-top: 32px;
}

Perhatikan bagian berikut:

.kartu-profil {
display: flex;
flex-direction: column;
}

Kita menggunakan flex-direction: column karena pada layar sempit, foto dan informasi profil lebih nyaman disusun dari atas ke bawah.

Selain itu, text-align: center membuat teks profil berada di tengah.

Sampai tahap ini, kita sudah memiliki tampilan dasar yang cocok untuk layar kecil.

7. Mengubah Layout Ketika Layar Lebih Lebar#

Sekarang kita tambahkan media query di bagian bawah style.css.

@media (min-width: 768px) {
.halaman {
padding: 32px;
}
.kartu-profil {
flex-direction: row;
gap: 32px;
}
.informasi-profil {
text-align: left;
}
.foto-profil {
width: 150px;
height: 150px;
}
}

Mari kita bahas.

@media (min-width: 768px) berarti aturan di dalamnya diterapkan ketika lebar viewport setidaknya 768 piksel.

flex-direction: row mengubah foto dan informasi profil menjadi berdampingan.

text-align: left mengembalikan teks profil ke rata kiri.

gap: 32px memberikan jarak yang lebih besar karena ruang layar juga lebih luas.

Dengan cara ini, kita hanya menggunakan satu HTML dan satu CSS, tetapi mendapatkan dua susunan layout yang berbeda.

Ukuran 768 piksel hanyalah breakpoint untuk contoh ini. Dalam proyek nyata, kita sebaiknya mengujinya dan menyesuaikan titik perubahan ketika layout mulai membutuhkan ruang tambahan.

8. Membuat Daftar Kartu Artikel Responsive#

Sekarang kita kembangkan halaman profil dengan menambahkan daftar artikel.

Ganti isi section bagian-artikel pada HTML sebelumnya menjadi:

<section id="artikel" class="bagian-artikel">
<h2>Artikel Pilihan</h2>
<div class="daftar-artikel">
<article class="kartu-artikel">
<h3>Belajar HTML</h3>
<p>Memahami struktur dasar halaman web.</p>
</article>
<article class="kartu-artikel">
<h3>Belajar CSS</h3>
<p>Mengatur tampilan dan layout website.</p>
</article>
<article class="kartu-artikel">
<h3>Belajar JavaScript</h3>
<p>Mengenal logika dan interaksi halaman.</p>
</article>
</div>
</section>

Tambahkan CSS berikut:

.daftar-artikel {
display: flex;
flex-direction: column;
gap: 16px;
}
.kartu-artikel {
flex: 1;
min-width: 0;
padding: 20px;
border-radius: 10px;
background-color: white;
border: 1px solid #d1d5db;
}
.kartu-artikel h3 {
margin-top: 0;
}

Pada layar kecil, ketiga kartu tersusun secara vertikal.

Selanjutnya, tambahkan aturan ini di dalam media query min-width: 768px yang sudah dibuat sebelumnya:

.daftar-artikel {
flex-direction: row;
}

Sekarang, pada layar yang lebih lebar, ketiga kartu akan disusun berdampingan.

Jika ukuran layar semakin sempit, aturan dasarnya akan kembali menggunakan flex-direction: column.

Ini adalah contoh sederhana bagaimana Flexbox dan media query bekerja sama.

9. Apakah Semua Hal Harus Menggunakan Media Query?#

Tidak selalu.

Beberapa masalah responsive dapat diselesaikan menggunakan ukuran fleksibel tanpa media query.

Contohnya:

.gambar-artikel {
display: block;
max-width: 100%;
height: auto;
}

Atau:

.container {
width: 100%;
max-width: 1000px;
margin: 0 auto;
}

Kita juga bisa menggunakan fungsi CSS seperti clamp() untuk membuat ukuran teks menyesuaikan ruang dalam rentang tertentu.

.judul {
font-size: clamp(1.5rem, 4vw, 2.5rem);
}

Artinya, ukuran teks memiliki batas minimum 1,5rem, nilai yang menyesuaikan viewport sebesar 4vw, dan batas maksimum 2,5rem.

Untuk saat ini, cukup pahami bahwa responsive design tidak hanya bergantung pada media query.

Media query kita gunakan ketika memang perlu mengubah aturan berdasarkan kondisi tertentu.

10. Cara Menguji Tampilan Responsive#

Kita tidak harus mempunyai banyak HP dan laptop untuk mulai menguji tampilan.

Browser modern menyediakan alat pengembang atau Developer Tools.

Jika menggunakan Google Chrome:

  1. Buka halaman HTML yang sedang dibuat.
  2. Tekan F12 atau klik kanan lalu pilih Inspect.
  3. Aktifkan Toggle Device Toolbar atau tekan Ctrl + Shift + M.
  4. Coba beberapa ukuran viewport, termasuk ukuran sempit dan lebar.
  5. Perhatikan apakah ada teks yang terpotong, gambar yang meluap, atau elemen yang sulit digunakan.

Namun, simulasi perangkat pada browser desktop tidak selalu sama persis dengan perilaku perangkat sungguhan.

Jika memungkinkan, tetap coba membuka hasilnya melalui HP.

Periksa bukan hanya apakah tampilannya rapi, tetapi juga apakah teks mudah dibaca, tautan mudah disentuh, dan halaman tidak memunculkan scroll horizontal yang tidak diperlukan.

11. Kesalahan Umum Saat Membuat Website Responsive#

Menggunakan lebar tetap untuk semua elemen#

.container {
width: 1200px;
}

Aturan ini bisa membuat halaman meluap ketika layar lebih kecil.

Lebih baik gunakan ukuran fleksibel jika memang sesuai kebutuhan.

Menganggap semua HP memiliki lebar yang sama#

Tidak semua HP mempunyai ukuran viewport yang sama.

Karena itu, jangan membuat layout yang hanya terlihat benar pada satu ukuran perangkat.

Terlalu banyak menggunakan breakpoint#

Kita tidak harus membuat media query untuk setiap ukuran HP.

Mulailah dari layout yang fleksibel, kemudian tambahkan breakpoint ketika konten memang membutuhkannya.

Hanya menguji tampilan desktop#

Layout yang terlihat rapi di laptop belum tentu nyaman di HP.

Biasakan menguji tampilan pada beberapa ukuran viewport selama proses pengembangan.

Menganggap responsive hanya soal ukuran layar#

Responsive design juga berkaitan dengan kenyamanan penggunaan.

Tombol yang terlalu kecil, teks sulit dibaca, dan jarak antarelemen yang terlalu rapat tetap menjadi masalah meskipun halaman sudah menyesuaikan lebar layar.

12. Latihan Mandiri#

Sekarang coba kembangkan halaman profil tadi.

  1. Ubah breakpoint dari 768px menjadi 640px, lalu amati perbedaannya.
  2. Ubah ukuran foto pada desktop menjadi 180px.
  3. Tambahkan satu kartu artikel lagi.
  4. Coba gunakan flex-wrap: wrap pada daftar artikel dan bandingkan hasilnya dengan pendekatan media query.
  5. Uji tampilan pada lebar viewport sekitar 360px, 768px, dan 1200px.
  6. Pastikan halaman tetap nyaman dibaca tanpa scroll horizontal yang tidak diperlukan.

Tidak ada satu ukuran breakpoint yang selalu benar untuk semua website.

Yang penting, kita memahami kapan layout perlu berubah dan mengapa perubahan tersebut membantu pengguna.

13. Selanjutnya: Mini Project Profil BapakGabut#

Sekarang kita sudah mengenal beberapa fondasi CSS:

  • Cara memberikan style pada HTML.
  • Selector, property, dan value.
  • Box Model.
  • Flexbox.
  • Responsive Web Design.

Pada artikel berikutnya, kita akan menggabungkan semuanya dalam Mini Project: Mempercantik Halaman Profil dengan CSS.

Kita akan menggunakan struktur profil yang sudah dibuat pada series HTML, lalu mengubahnya menjadi halaman yang lebih menarik, rapi, dan responsive.

Jadi, bukan sekadar menghafal properti CSS, tetapi benar-benar melihat bagaimana semuanya bekerja bersama.

Sampai jumpa di mini project berikutnya, Gabuters!

CSS

Selesai

Bagian 5 dari 6Tulisan ini bagian dari seri

Bagikan Artikel

Buat poster berbagi atau salin tautan artikel ini.

Lanjut membaca

Bacaan terkait

Berdasarkan tag dan kategori yang sama

Coba jalur lain

Pilihan konsisten dari artikel lain