Alat Uji Responsif
Pasang Iklan di Sini
Dikurasi oleh Tim RTT

Tips Developer untuk Desain Responsif & Performa

Tips praktis siap pakai untuk HTML, CSS, JavaScript, performa, dan aksesibilitas. Baik kamu pakai simulator viewport gratis buat developer kami, nyoba cek CSS breakpoint online, atau cari tau tampilan websitemu di tablet โ€” tips ini cocok banget dipadukan dengan workflow alat uji responsif-mu. Tiap tips ada contoh kode asli yang bisa langsung kamu pakai.

30+ Tips
6 Kategori
Diperbarui: April 2026
Fokus Mobile
Filter:
Kategori 01

Praktik Terbaik HTML

5 tips

HTML yang solid adalah fondasi setiap website hebat. Tips ini membantu kamu menulis markup yang semantik, kuat, dan tahan masa depan yang disukai browser dan screen reader.

HTML ยท Gambar
Selalu gunakan width & height di <img> untuk cegah layout shift
HTMLPerf

Menyetel atribut width dan height eksplisit pada gambar memungkinkan browser memesan ruang yang benar sebelum gambar dimuat, menghilangkan Cumulative Layout Shift (CLS) โ€” salah satu Core Web Vitals Google.

HTML
<!-- โŒ Buruk: browser tidak tahu ukuran sampai gambar dimuat -->
<img src="hero.jpg" alt="Gambar hero">

<!-- โœ… Baik: ruang sudah dipesan langsung -->
<img src="hero.jpg"
     alt="Gambar hero"
     width="1200"
     height="630"
     loading="lazy">
Gabungkan dengan aspect-ratio: auto di CSS dan browser akan menghitung rasio yang benar secara otomatis, bahkan saat CSS mengubah ukuran gambar.
HTML ยท Semantik
Gunakan satu <h1> per halaman dan jaga hierarki heading logis
HTMLA11y

Outline dokumen yang dibangun dengan heading bersarang yang tepat membantu mesin pencari memahami hierarki kontenmu dan pengguna screen reader menavigasi halaman dengan efisien.

HTML
<h1>Judul Halaman (satu per halaman)</h1>
  <h2>Bagian Utama</h2>
    <h3>Sub-bagian</h3>
    <h3>Sub-bagian lain</h3>
  <h2>Bagian Utama Lain</h2>
HTML ยท Tautan
Tambahkan rel="noopener noreferrer" ke tautan eksternal
HTML

Saat membuka tautan di tab baru dengan target="_blank", halaman yang dibuka dapat mengakses halamanmu via window.opener. Menambahkan rel="noopener noreferrer" mencegah kerentanan keamanan ini dan juga menghentikan info referrer dikirim.

HTML
<!-- โŒ Rentan -->
<a href="https://contoh.com" target="_blank">Kunjungi</a>

<!-- โœ… Aman -->
<a href="https://contoh.com"
   target="_blank"
   rel="noopener noreferrer">Kunjungi</a>
HTML ยท Formulir
Gunakan atribut autocomplete untuk tingkatkan UX form di mobile
HTMLMobile

Atribut autocomplete memberi tahu browser dan password manager cara mengisi kolom formulir secara otomatis. Ini secara dramatis meningkatkan tingkat penyelesaian formulir di mobile.

HTML
<input type="text"    autocomplete="given-name">
<input type="email"   autocomplete="email">
<input type="tel"     autocomplete="tel">
<input type="password" autocomplete="current-password">
<input type="text"    autocomplete="postal-code">
HTML ยท Meta
Tambahkan tag Open Graph untuk berbagi media sosial lebih baik
HTML

Tag meta Open Graph mengontrol tampilan halamanmu saat dibagikan di platform media sosial seperti Facebook, LinkedIn, dan Twitter/X. Tanpanya, platform memilih konten secara acak.

HTML โ€” <head>
<meta property="og:title"       content="Judul Halaman">
<meta property="og:description"  content="Deskripsi singkat">
<meta property="og:image"       content="https://domainmu.com/og.jpg">
<meta property="og:url"         content="https://domainmu.com/halaman">
<meta property="og:type"        content="website">
<!-- Twitter/X -->
<meta name="twitter:card"      content="summary_large_image">
Kategori 02

Tips & Trik CSS

6 tips

CSS modern sangatlah powerful. Tips ini mencakup layout, properti kustom, dan pola yang menghemat waktumu dan menjaga stylesheet-mu tetap bersih.

CSS ยท Layout
Pusatkan apa pun dengan sempurna pakai CSS Grid dalam 2 baris
CSS

Berhenti berjuang dengan hack positioning. Singkatan place-items CSS Grid memusatkan konten baik horizontal maupun vertikal dalam dua baris โ€” tanpa calc, tanpa transform.

CSS
.pusatkan-semua {
  display: grid;
  place-items: center;
}

/* Bisa juga untuk pemusatan satu halaman penuh */
body {
  display: grid;
  place-items: center;
  min-height: 100vh;
}
CSS ยท Properti Kustom
Gunakan properti kustom CSS untuk sistem desain yang mudah dipelihara
CSS

Properti kustom CSS (variabel) memungkinkanmu mendefinisikan token desain satu kali dan menggunakannya ulang di mana-mana. Mereka juga diperbarui secara real-time, membuat mode gelap dan theming menjadi sepele.

CSS
:root {
  --color-primary: #6366f1;
  --color-bg: #ffffff;
  --radius-md: 12px;
  --spacing-md: 16px;
}

@media (prefers-color-scheme: dark) {
  :root {
    --color-bg: #0d1117;
  }
}

.btn {
  background: var(--color-primary);
  border-radius: var(--radius-md);
  padding: var(--spacing-md);
}
CSS ยท Tipografi
Gunakan clamp() untuk tipografi fluid dan responsif
CSSResponsif

clamp(min, preferred, max) memungkinkan ukuran font diskalakan dengan mulus sesuai lebar viewport โ€” tanpa perlu media query. Nilai tengah biasanya adalah unit vw.

CSS
/* clamp(minimum, preferred, maksimum) */
h1 {
  font-size: clamp(1.8rem, 5vw, 3.5rem);
}

p {
  font-size: clamp(0.9rem, 2vw, 1.1rem);
  line-height: 1.7;
  max-width: 65ch; /* lebar membaca optimal */
}
CSS ยท Scroll
Smooth scrolling dan scroll-margin untuk tautan anchor
CSSUX

Aktifkan smooth scrolling secara global dan gunakan scroll-margin-top pada target anchor untuk memastikan header sticky tidak menimpa konten yang di-scroll.

CSS
@media (prefers-reduced-motion: no-preference) {
  html {
    scroll-behavior: smooth;
  }
}

/* Offset untuk sticky header (misal tinggi 70px) */
[id] {
  scroll-margin-top: 90px;
}
Selalu bungkus scroll-behavior: smooth dalam media query prefers-reduced-motion: no-preference โ€” beberapa pengguna mengalami mabuk gerakan akibat scroll animasi.
CSS ยท Layout
Gunakan CSS Grid auto-fill untuk layout kartu yang self-healing
CSSResponsif

Pola auto-fill + minmax() menciptakan grid yang otomatis menyesuaikan jumlah kolom berdasarkan ruang yang tersedia โ€” tanpa perlu media query.

CSS
.grid-kartu {
  display: grid;
  grid-template-columns: repeat(
    auto-fill,
    minmax(280px, 1fr)
  );
  gap: 24px;
}
/* 1 kol di mobile โ†’ 2 โ†’ 3 โ†’ 4 otomatis */
CSS ยท Visibilitas
Gunakan :focus-visible daripada menghapus outline
CSSA11y

Jangan pernah melakukan outline: none secara global โ€” itu merusak navigasi keyboard. Gunakan :focus-visible untuk menampilkan focus ring hanya untuk pengguna keyboard, menjaga desain tetap bersih untuk pengguna mouse.

CSS
/* โŒ Jangan pernah lakukan ini */
* { outline: none; }

/* โœ… Sembunyikan untuk mouse, tampilkan untuk keyboard */
:focus:not(:focus-visible) {
  outline: none;
}
:focus-visible {
  outline: 2px solid #6366f1;
  outline-offset: 3px;
  border-radius: 4px;
}
Kategori 03

Tips JavaScript

5 tips

Tulis JavaScript yang lebih bersih dan lebih performan dengan pola modern dan API browser ini.

JS ยท API
Gunakan IntersectionObserver untuk lazy loading & efek scroll
JSPerf

Daripada mendengarkan event scroll (yang terpicu ratusan kali per detik), gunakan API IntersectionObserver untuk hanya bereaksi saat elemen masuk atau keluar viewport.

JavaScript
const observer = new IntersectionObserver(
  (entries) => {
    entries.forEach(entry => {
      if (entry.isIntersecting) {
        entry.target.classList.add('visible');
        observer.unobserve(entry.target); // berhenti mengamati
      }
    });
  },
  { rootMargin: '0px 0px -50px 0px' }
);

document.querySelectorAll('.animate-on-scroll')
  .forEach(el => observer.observe(el));
JS ยท Performa
Debounce event resize dan input untuk hindari masalah performa
JSPerf

Event seperti resize dan input terpicu sangat cepat. Debouncing menunda eksekusi sampai pengguna berhenti berinteraksi, mencegah pekerjaan yang tidak perlu.

JavaScript
function debounce(fn, delay = 300) {
  let timer;
  return (...args) => {
    clearTimeout(timer);
    timer = setTimeout(() => fn(...args), delay);
  };
}

// Penggunaan
window.addEventListener('resize',
  debounce(() => {
    recalculateLayout();
  }, 200)
);
JS ยท API
Gunakan Clipboard API untuk tombol copy-to-clipboard
JSUX

API navigator.clipboard modern berbasis promise dan jauh lebih bersih daripada hack document.execCommand('copy') yang lama.

JavaScript
async function copyToClipboard(text) {
  try {
    await navigator.clipboard.writeText(text);
    showToast('Disalin!');
  } catch (err) {
    console.error('Penyalinan gagal:', err);
  }
}

// Penggunaan
document.querySelector('.copy-btn')
  .addEventListener('click', () =>
    copyToClipboard('Teks yang akan disalin')
  );
JS ยท Storage
Gunakan localStorage dengan aman dengan helper yang menangani error
JS

localStorage dapat melempar error di mode private browsing atau saat storage penuh. Selalu bungkus dalam helper try/catch.

JavaScript
const storage = {
  get(key, fallback = null) {
    try {
      const item = localStorage.getItem(key);
      return item ? JSON.parse(item) : fallback;
    } catch { return fallback; }
  },
  set(key, value) {
    try {
      localStorage.setItem(key, JSON.stringify(value));
      return true;
    } catch { return false; }
  }
};

storage.set('theme', 'dark');
const theme = storage.get('theme', 'light');
JS ยท Media
Deteksi preferensi reduced-motion pengguna di JavaScript
JSA11y

Untuk animasi yang digerakkan oleh JavaScript (misal canvas, GSAP), periksa pengaturan prefers-reduced-motion pengguna dan sederhanakan atau nonaktifkan animasi sesuai kebutuhan.

JavaScript
const prefersReduced = window
  .matchMedia('(prefers-reduced-motion: reduce)')
  .matches;

if (!prefersReduced) {
  startAnimations();
} else {
  showStaticFallback();
}
Kategori 04

Tips Performa

5 tips

Website cepat mendapat peringkat lebih tinggi, mengonversi lebih baik, dan membuat pengguna senang. Tips ini mencakup kemenangan terbesar untuk performa web.

Performa ยท Font
Gunakan font-display: swap dan preconnect untuk Google Fonts
Perf

Tanpa font-display: swap, browser menyembunyikan teks sampai font kustom dimuat (FOIT). Dengannya, font sistem langsung ditampilkan, lalu ditukar โ€” sangat meningkatkan Largest Contentful Paint (LCP).

HTML โ€” <head>
<!-- Langkah 1: preconnect -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

<!-- Langkah 2: tambahkan &display=swap ke URL -->
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap"
      rel="stylesheet">
Performa ยท Gambar
Sajikan format gambar modern dengan fallback <picture>
PerfHTML

Gambar WebP dan AVIF jauh lebih kecil daripada JPEG dan PNG dengan kualitas setara. Gunakan elemen <picture> untuk menyajikan format modern dengan fallback JPEG untuk browser lama.

HTML
<picture>
  <source srcset="hero.avif" type="image/avif">
  <source srcset="hero.webp" type="image/webp">
  <img src="hero.jpg"
       alt="Gambar hero"
       width="1200" height="630"
       loading="lazy">
</picture>
Performa ยท Script
Muat script non-kritis dengan defer atau async
PerfHTML

Tag <script> biasa memblokir parsing HTML. defer menjalankan script setelah parsing selesai (berurutan). async menjalankan script segera setelah diunduh (urutan tidak dijamin).

HTML
<!-- Memblokir rendering โŒ -->
<script src="app.js"></script>

<!-- Berjalan berurutan, setelah DOM โœ… (pakai untuk kebanyakan script) -->
<script src="app.js" defer></script>

<!-- Berjalan segera saat siap โœ… (analitik, iklan) -->
<script src="analytics.js" async></script>
Performa ยท CSS
Gunakan will-change dengan hemat untuk animasi yang dipercepat GPU
PerfCSS

Tetap pada menganimasikan transform dan opacity โ€” keduanya berjalan di thread kompositor GPU tanpa memicu layout atau paint. Tambahkan will-change hanya jika kamu memprofilenya dan melihat manfaat nyata.

CSS
/* โŒ Memicu layout (mahal) */
.buruk { transition: width 0.3s, top 0.3s; }

/* โœ… Dikomposit GPU (murah) */
.baik { transition: transform 0.3s, opacity 0.3s; }

/* Gunakan dengan hemat, hanya sebelum animasi kompleks */
.modal-enter { will-change: transform; }
.modal-entered { will-change: auto; } /* reset setelahnya */
Performa ยท Sumber Daya
Preload aset kritis di atas lipatan
PerfHTML

Gunakan <link rel="preload"> untuk memberi tahu browser mengambil sumber daya kritis lebih awal โ€” sebelum ditemukan di CSS atau JS. Ideal untuk gambar hero, font kritis, dan script kunci.

HTML โ€” <head>
<!-- Preload gambar hero (elemen LCP) -->
<link rel="preload" as="image"
      href="hero.webp" fetchpriority="high">

<!-- Preload font kritis -->
<link rel="preload" as="font"
      href="font.woff2" type="font/woff2"
      crossorigin>
Kategori 05

Tips Aksesibilitas

5 tips

Aksesibilitas bukan sekadar checklist โ€” ini desain yang baik. Tips ini membantu membuat situsmu dapat digunakan oleh semua orang, termasuk pengguna screen reader dan navigator keyboard.

A11y ยท ARIA
Gunakan aria-label untuk tombol hanya ikon
A11yHTML

Tombol yang hanya berisi ikon tidak memiliki teks yang terlihat untuk diumumkan oleh screen reader. Tambahkan aria-label untuk menyediakan label deskriptif.

HTML
<!-- โŒ Screen reader bilang "tombol" -->
<button><i class="fa-solid fa-times"></i></button>

<!-- โœ… Screen reader bilang "Tutup dialog" -->
<button aria-label="Tutup dialog">
  <i class="fa-solid fa-times" aria-hidden="true"></i>
</button>
A11y ยท Bahasa
Selalu deklarasikan atribut lang di <html>
A11yHTML

Atribut lang memberi tahu screen reader bahasa mana yang digunakan, memungkinkan pemenggalan kata yang benar di CSS, dan membantu alat terjemahan mengidentifikasi bahasa konten. Untuk bahasa RTL, tambahkan juga dir="rtl".

HTML
<!-- Inggris -->
<html lang="en">

<!-- Arab (RTL) -->
<html lang="ar" dir="rtl">

<!-- Prancis -->
<html lang="fr">
A11y ยท Warna
Pastikan rasio kontras minimum 4.5:1 untuk teks
A11yCSS

WCAG 2.1 AA mensyaratkan rasio kontras setidaknya 4.5:1 untuk teks normal dan 3:1 untuk teks besar (18px+ tebal atau 24px+ reguler). Gunakan pemeriksa kontras sebelum mengirim.

Alat gratis yang bagus: WebAIM Contrast Checker di webaim.org/resources/contrastchecker/ atau instal aplikasi desktop Colour Contrast Analyser. Chrome DevTools juga menampilkan rasio kontras di pemilih warna.
CSS โ€” Contoh
/* โŒ #6b7280 pada #fff = 4.48:1 (gagal AA untuk teks kecil) */
.redup { color: #6b7280; background: #fff; }

/* โœ… #4b5563 pada #fff = 7.0:1 (lulus AA & AAA) */
.redup { color: #4b5563; background: #fff; }
A11y ยท Screen Reader
Gunakan .sr-only untuk teks yang tersembunyi secara visual namun dapat diakses
A11yCSS

Terkadang kamu perlu teks yang hanya bisa didengar oleh screen reader โ€” seperti tautan skip-to-content atau label untuk elemen visual. Kelas utilitas .sr-only menyembunyikannya secara visual namun tetap dapat diakses.

CSS + HTML
.sr-only {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0,0,0,0);
  white-space: nowrap;
  border: 0;
}

<!-- Contoh tautan skip -->
<a href="#main" class="sr-only">Lewati ke konten</a>
A11y ยท Keyboard
Jebak fokus di dalam modal dan dialog
A11yJS

Saat modal terbuka, fokus keyboard harus dikurung di dalamnya. Jika tidak, Tab akan memfokuskan elemen di belakang overlay โ€” membuat modal tidak dapat digunakan oleh pengguna keyboard.

JavaScript
function trapFocus(modal) {
  const focusable = modal.querySelectorAll(
    'a, button, input, select, textarea, [tabindex]:not([tabindex="-1"])'
  );
  const first = focusable[0];
  const last = focusable[focusable.length - 1];

  modal.addEventListener('keydown', e => {
    if (e.key !== 'Tab') return;
    if (e.shiftKey ? document.activeElement === first
                   : document.activeElement === last) {
      e.preventDefault();
      (e.shiftKey ? last : first).focus();
    }
  });
  first.focus();
}
Kategori 06

Tips Responsif & Mobile

4 tips

Trafik mobile sangat dominan. Tips ini memastikan desainmu bekerja dengan indah di setiap ukuran layar โ€” dari ponsel 320px hingga monitor 4K.

Responsif ยท Meta
Gunakan meta tag viewport yang benar
MobileHTML

Tanpa meta tag viewport, browser mobile merender pada lebar desktop ~980px lalu diperkecil. Izinkan penskalaan pengguna โ€” menonaktifkannya adalah penghalang aksesibilitas utama dan merusak zoom browser.

HTML โ€” <head>
<!-- โŒ Menonaktifkan zoom pengguna (pelanggaran aksesibilitas) -->
<meta name="viewport"
      content="width=device-width, initial-scale=1, user-scalable=no">

<!-- โœ… Benar: mengizinkan penskalaan hingga 5ร— -->
<meta name="viewport"
      content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=5">
Responsif ยท Sentuh
Buat target sentuh setidaknya 44ร—44px di mobile
MobileCSSA11y

Pedoman Antarmuka Manusia Apple dan WCAG 2.5.5 merekomendasikan target sentuh minimal 44ร—44 piksel CSS. Target kecil membuat pengguna frustrasi dan menyebabkan kesalahan ketuk. Kamu dapat memperluas area yang dapat diklik tanpa mengubah ukuran visual menggunakan padding atau pseudo-elemen.

CSS
/* Perluas area sentuh tanpa perubahan visual */
.icon-btn {
  position: relative;
  width: 24px; height: 24px;
}
.icon-btn::before {
  content: '';
  position: absolute;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  min-width: 44px; min-height: 44px;
}
Responsif ยท RTL
Gunakan properti CSS logis untuk dukungan bahasa RTL
RTLCSS

Properti CSS logis seperti margin-inline-start alih-alih margin-left secara otomatis membalik arah berdasarkan mode penulisan dokumen โ€” membuat dukungan RTL hampir tanpa usaha.

CSS
/* Fisik (tidak membalik untuk RTL) */
.icon { margin-right: 8px; }

/* Logis (otomatis membalik di RTL) */
.icon { margin-inline-end: 8px; }

/* Contoh properti logis lainnya */
.card {
  padding-inline: 16px;      /* kiri + kanan */
  padding-block: 12px;       /* atas + bawah */
  border-start-start-radius: 12px; /* kiri-atas di LTR */
}
Responsif ยท Unit
Gunakan dvh daripada vh untuk layout layar penuh mobile
MobileCSS

100vh di browser mobile menyertakan chrome browser (bilah alamat), menyebabkan overflow saat bilah muncul. Unit baru dvh (dynamic viewport height) menyesuaikan saat chrome browser muncul atau hilang.

CSS
/* โŒ Overflow di mobile saat chrome browser muncul */
.hero { height: 100vh; }

/* โœ… Dengan fallback untuk browser lama */
.hero {
  height: 100vh;          /* fallback */
  height: 100dvh;         /* dynamic viewport height */
}
Didukung di semua browser modern sejak 2023. Juga tersedia: svh (viewport kecil, selalu mengecualikan chrome) dan lvh (viewport besar, selalu menyertakan ruang chrome).

Lebih dari ResponsiveCheckTool

Alat Uji Responsif Tentang Kami Kontak Kebijakan Privasi
๐Ÿ–ฅ๏ธ

Praktikkan Tips Ini

Uji bagaimana perubahan responsifmu terlihat di mobile, tablet, dan desktop โ€” instan, gratis, tanpa perlu daftar.

Uji Websitemu Sekarang