Secara umum, gaya huruf untuk website terbagi ke dalam 5 kelompok besar. Setiap contoh di bawah ditampilkan dengan font aslinya, lengkap dengan kategori bisnis yang cocok.
Huruf dengan "kaki" atau garis kecil di ujung tiap goresan. Kesannya klasik, elegan, terpercaya, dan berwibawa.
Tanpa kaki, bersih dan modern. Ini pilihan default kebanyakan website dan aplikasi.
Setiap karakter punya lebar yang sama persis, seperti mesin ketik. Kesannya teknis dan "developer".
Huruf yang dirancang untuk ukuran besar dan menarik perhatian, bukan untuk dibaca panjang. Jangan dipakai untuk paragraf.
Meniru tulisan tangan atau kaligrafi. Dipakai hanya sebagai aksen, misalnya nama brand atau satu kata di judul, karena sulit dibaca dalam jumlah banyak.
Pakai maksimal 2 font: satu untuk judul (heading) dan satu untuk isi (body).
Kamar dengan pemandangan laut, sarapan pagi, dan layanan 24 jam untuk setiap tamu.
Pantau stok, penjualan, dan laporan keuangan secara real-time dari mana saja.
Belanja minimal Rp100.000 dan dapatkan potongan langsung di kasir. Berlaku sampai 31 Desember.
Semua contoh di atas tersedia gratis di Google Fonts, jadi aman dipakai untuk proyek klien.
Nuansa visual adalah "rasa" atau kesan keseluruhan sebuah website. Nuansa ini dibentuk dari kombinasi warna, jenis huruf, jarak antar elemen (spacing), bentuk sudut, dan gaya gambar. Ini nuansa yang paling umum dipakai:
Dalam pembuatan website, warna bisa dibahas dari dua sisi: arti tiap warna (kesan yang ditimbulkan) dan peran warna dalam sebuah palet.
Satu website biasanya tidak hanya pakai satu warna. Palet yang rapi terdiri dari:
Pengertian: urutan perhatian mata pengguna, yaitu apa yang dilihat pertama, kedua, dan ketiga. Alatnya adalah ukuran, ketebalan, warna, kontras, posisi, dan jarak.
di layar pembayaran, kasir perlu melihat total bayar dalam sepersekian detik.
urutannya headline (misalnya "Potong Rapi, 30 Menit Selesai"), lalu tombol Booking via WhatsApp, lalu foto hasil potongan, lalu harga.
semua teks dibuat bold, semua tombol diberi warna aksen, atau ada tiga headline besar dalam satu layar. Akibatnya pengguna bingung harus melihat ke mana.
Pengertian: sistem ukuran huruf yang konsisten, ditambah pengaturan line-height, font-weight, dan letter-spacing.
| Peran | Ukuran | Weight | Line-height |
|---|---|---|---|
| Display / Hero | 48px | 700 | 1.1 |
| H1 | 36px | 700 | 1.2 |
| H2 | 28px | 600 | 1.25 |
| H3 | 20px | 600 | 1.3 |
| Body | 16px | 400 | 1.5–1.6 |
| Small / Caption | 14px / 12px | 400–500 | 1.4 |
cukup 4 ukuran: total (40px), nama produk (16px), harga di kartu produk (16px semibold, angka tabular), dan label kecil (12px).
butuh rentang lebih lebar. Hero bisa 48–64px di desktop dan turun ke 32–36px di HP.
max-width: 65ch).-0.02em) supaya rapat dan rapi.0.05em).clamp() untuk ukuran responsif:memakai 10 ukuran berbeda yang hanya selisih 1px, body text di bawah 14px, atau line-height 1.0 untuk paragraf sehingga teks terasa sesak.
Pengertian: jarak di dalam elemen (padding) dan antar elemen (margin/gap), diatur dengan skala tetap.
elemen yang saling berhubungan diberi jarak dekat, elemen yang berbeda grup diberi jarak jauh.
jarak antar kartu produk 8–12px agar banyak produk muat di layar, tapi padding dalam tombol Bayar besar (16–20px) supaya mudah ditekan.
section hero diberi ruang lega (padding 96px atas-bawah) supaya pesan utama terasa "bernapas".
mulai dengan spacing yang terlalu lega, lalu kurangi. Itu lebih mudah daripada sebaliknya. Di Tailwind, skalanya sudah tersedia (p-2, p-4, gap-6, dan seterusnya).
angka acak seperti 13px, 17px, atau 22px, atau jarak label ke field sama dengan jarak antar field sehingga label terlihat "melayang" tanpa jelas milik field yang mana.
Pengertian: kerangka penempatan konten di halaman.
Hero, keunggulan (3 kolom), produk atau layanan, testimoni, lokasi dan jam buka (embed Maps), CTA WhatsApp, lalu footer.
max-width: 1200px; margin-inline: auto;.konten membentang penuh di monitor 27 inci sehingga satu baris teks berisi 200 karakter, atau elemen yang tidak sejajar satu sama lain.
Pengertian: tampilan yang menyesuaikan ukuran layar.
max-width: 100% dan gunakan srcset untuk ukuran berbeda.tabel lebar yang membuat seluruh halaman bisa di-scroll ke samping, teks terlalu kecil di HP, atau tombol terlalu berdekatan sehingga mudah salah tekan.
Pengertian: "kepribadian" bentuk elemen, yang sangat memengaruhi nuansa.
| Radius | Kesan | Cocok untuk |
|---|---|---|
| 0–2px | Tegas, editorial, serius | Media, portfolio, brutalism |
| 4–8px | Profesional, netral | Kasir, ERP, SaaS |
| 12–16px | Ramah, modern | UMKM, aplikasi konsumen |
| Full (pill) | Playful, lembut | Produk anak, tombol CTA |
radius elemen dalam = radius luar dikurangi padding. Contohnya kartu dengan radius 16px dan padding 8px, maka gambar di dalamnya diberi radius 8px. Kalau keduanya sama, sudut terlihat tidak pas.
0 1px 2px rgba(0,0,0,.05)).radius 8px, border tipis abu-abu untuk kartu produk, bayangan hampir tidak ada (supaya tetap bersih), dan modal pembayaran dengan bayangan tinggi agar jelas berada di atas.
radius 16–24px, tombol berbentuk pill, dan bayangan lembut berwarna (bukan hitam pekat).
mencampur sudut tajam dan sangat bulat dalam satu halaman, atau bayangan hitam pekat yang terlihat kuno.
Pengertian: simbol visual pendukung teks atau navigasi.
Lucide (cocok dengan shadcn/ui), Heroicons, Tabler Icons, dan Phosphor (punya banyak varian ketebalan).
ikon di section keunggulan (misalnya ikon jam untuk "Buka 7 hari", ikon lokasi untuk "Dekat kampus"). Ukuran lebih besar (32–48px), bisa diberi latar lingkaran berwarna lembut.
currentColor).mencampur ikon outline dan filled, ikon tanpa label untuk aksi penting, atau ikon yang terlalu kreatif sehingga artinya ambigu.
Pengertian: konten visual seperti foto, ilustrasi, dan grafis, termasuk gaya dan optimasinya.
foto asli lebih dipercaya daripada foto stok. Foto pemilik barbershop sedang memotong rambut jauh lebih meyakinkan daripada model stok. Kalau foto dari klien kurang bagus, minta difoto di dekat jendela (cahaya alami) dari HP yang sudah cukup bagus.
foto produk berbentuk persegi (1:1), latar seragam, ukuran kecil (sekitar 200×200px). Sediakan placeholder (inisial nama produk di atas latar warna) untuk produk tanpa foto.
loading="lazy" untuk gambar di bawah layar pertama.width dan height agar layout tidak bergeser saat gambar dimuat (CLS).alt yang deskriptif untuk SEO dan aksesibilitas.mengunggah foto 5MB langsung dari HP, foto dengan rasio berbeda-beda di satu grid, atau watermark stok yang lupa dihapus.
Pengertian: semua kondisi yang mungkin dialami sebuah elemen atau halaman.
| State | Tampilan |
|---|---|
| Default | Warna normal |
| Hover | Sedikit lebih gelap |
| Active / pressed | Lebih gelap, sedikit mengecil |
| Focus | Ring/outline terlihat (untuk keyboard) |
| Disabled | Pudar (opacity 50%), kursor not-allowed |
| Loading | Spinner + teks "Memproses…", tidak bisa diklik |
tombol Bayar wajib punya state loading dan disabled setelah diklik. Tanpa itu, kasir bisa mengetuk dua kali dan terjadi transaksi ganda. Di sisi backend, tambahkan juga idempotency key.
halaman kosong putih polos tanpa penjelasan, tombol tetap aktif saat proses berjalan, atau error yang hanya bertuliskan "Something went wrong".
Pengertian: memastikan website bisa dipakai semua orang, termasuk pengguna dengan gangguan penglihatan, buta warna, atau yang hanya memakai keyboard.
outline: none tanpa pengganti.<button> untuk aksi dan <a> untuk navigasi, bukan <div onClick>.ikon tanpa label untuk pembaca layar, form yang tidak bisa diisi dengan tombol Tab, atau teks di atas foto tanpa overlay gelap.
Pengertian: semua teks kecil di antarmuka seperti tombol, label, pesan error, konfirmasi, placeholder, dan tooltip.
| Kurang baik | Lebih baik |
|---|---|
| Submit | Simpan Transaksi |
| OK | Ya, Hapus Produk |
| Error 422 | Stok tidak cukup. Tersisa 3 pcs. |
| Invalid input | Nomor HP harus diawali 08 dan berisi 10–13 angka |
| Apakah Anda yakin? | Hapus "Kopi Susu"? Data penjualannya tetap tersimpan. |
| Klik di sini | Lihat Daftar Harga |
mencampur bahasa Indonesia dan Inggris, teks dari developer yang terbawa ke produksi ("test123", "lorem ipsum"), atau pesan error yang menyalahkan pengguna.
Pengertian: animasi kecil yang memberi umpan balik dan memperhalus perpindahan tampilan.
ease-out untuk elemen yang muncul, ease-in untuk elemen yang hilang. Hindari linear untuk UI.
hormati pengaturan pengguna yang mengurangi animasi.
animasi loading palsu yang memperlambat, parallax berat yang membuat HP murah lag, atau carousel yang bergerak otomatis terlalu cepat.
Pengertian: seberapa banyak informasi ditampilkan dalam satu layar.
| Lega | Sedang | Padat |
|---|---|---|
| Landing page, portfolio | Aplikasi konsumen, kasir | ERP, laporan, spreadsheet |
| Padding besar, sedikit konten per layar | Seimbang | Baris tabel rapat, banyak kolom |
sedang. Grid produk cukup padat (banyak produk terlihat tanpa scroll), tapi tombol tetap besar untuk sentuhan.
padat. Tinggi baris tabel 36–40px, font 13–14px, dan banyak kolom. Pengguna mahir ingin melihat banyak data sekaligus.
lega. Satu section berisi satu pesan utama.
menerapkan spacing lega khas landing page ke dashboard ERP (hanya 5 baris data per layar), atau sebaliknya, landing page sesak seperti brosur.
Pengertian: kumpulan aturan dan komponen yang bisa dipakai ulang. Design tokens adalah nilai-nilai dasarnya (warna, spacing, radius, font, shadow) yang disimpan sebagai variabel.
kalau Anda menjual aplikasi kasir ke beberapa klien (kafe, barbershop, toko baju), cukup ganti beberapa token (warna primer, logo, mungkin radius) dan aplikasi langsung terasa "milik" klien tersebut tanpa mengubah kode komponen. Ini sangat berguna untuk model SaaS multi-tenant: token per tenant bisa disimpan di database lalu disuntikkan saat runtime.
@theme (Tailwind v4).warna hex ditulis langsung di puluhan file (sulit diubah), dua komponen tombol yang hampir sama tapi berbeda sedikit, atau tidak ada dokumentasi sehingga anggota tim membuat versinya masing-masing.
Cara membaca tabel ini: mulai dari tujuan bisnisnya dulu, bukan dari nama gaya atau istilahnya. Kalau tujuan bisnis klien adalah "supaya calon pelanggan langsung percaya dan berani bayar mahal", jawabannya mengarah ke serif dan nuansa mewah. Kalau tujuannya "supaya kasir bekerja cepat tanpa salah pencet", jawabannya mengarah ke hierarki, spacing, dan kepadatan informasi. Setiap baris juga dilengkapi contoh yang bisa dibayangkan langsung, dan di akhir tiap section di atas sudah ada box "Untuk bisnis apa?" yang menjelaskan panduan tersebut dengan bahasa yang sama.
| Panduan | Tujuan bisnis | Usaha & SaaS yang paling cocok | Contoh yang kebayang |
|---|---|---|---|
| Serif | Bangun wibawa & kepercayaan harga premium | Firma hukum, keuangan, media, hotel & bridal premium | Judul situs hotel mewah, undangan bridal |
| Sans-serif | Modern, bersih, mudah dipakai harian | SaaS, ERP, kasir, e-commerce, company profile | Dashboard kasir, aplikasi ERP |
| Monospace | Presisi angka & kode yang mudah dicek | Developer tools, fintech/invoice, kasir (struk) | Nomor invoice, struk, blok kode |
| Display / Dekoratif | Berhenti scroll & diingat dalam 1 detik | F&B promo, event, gaming, fashion, barbershop | Banner FLASH SALE, hero event |
| Script / Handwriting | Aksen personal & premium | Bridal, kafe, bakery, UMKM kuliner | Nama brand di undangan & kemasan |
| Panduan memilih (maks. 2 font) | Keputusan cepat & brand konsisten | Semua usaha & SaaS, agensi multi-klien | Satu pasangan font di semua halaman klien |
| Nuansa: Bersih & profesional | Terpercaya untuk urusan serius | SaaS, ERP, kasir, klinik, sekolah | Dashboard SaaS, portal akademik |
| Nuansa: Hangat & ramah | Mengundang & terasa manusiawi | UMKM, kafe, bakery, kuliner, layanan lokal | Landing kafe, toko roti rumahan |
| Nuansa: Modern gelap (dark mode) | Kesan tech & futuristik | Startup AI, developer tools, gaming, crypto | Landing produk AI, tools developer |
| Nuansa: Tegas & editorial | Kesan berwibawa seperti majalah | Media, blog, portfolio, agensi, fashion | Situs berita, portfolio desainer |
| Nuansa: Mewah & elegan | Justifikasi harga premium | Hotel, bridal, perhiasan, properti premium, spa | Situs resort, brand perhiasan |
| Nuansa: Ceria & playful | Menyenangkan & ramah anak | Produk anak, TK, mainan, edukasi, event | Situs TK, toko mainan |
| Nuansa: Natural & organik | Alami, sehat & membumi | Herbal, pertanian, skincare alami, wisata alam | Toko produk herbal, eco-brand |
| Nuansa: Retro / vintage | Nostalgia & karakter kuat | Barbershop, coffee shop, clothing, craft beer | Situs barbershop, kafe retro |
| Nuansa: Futuristik / glassmorphism | Modern, ringan & canggih | Landing tech, aplikasi finansial modern | Landing peluncuran produk tech |
| Nuansa: Brutalism | Tampil beda & berani | Portfolio desainer, brand anak muda | Portfolio desainer eksperimental |
| Warna (sistem palet) | Arahkan perhatian & bedakan status | Semua usaha & SaaS, terutama fintech & kasir | Tombol Bayar, badge sukses/error |
| 01 Hierarki Visual | Pengunjung tahu apa yang diklik dulu | Landing UMKM, kasir, checkout | Total bayar, headline + CTA WhatsApp |
| 02 Skala Tipografi | Keterbacaan konsisten di semua layar | SaaS, ERP, media, edukasi | Judul, body & caption portal akademik |
| 03 Spacing & Whitespace | Tidak sesak, tidak salah sentuh | Kasir, ERP, landing premium | Tombol kasir lega, grid produk rapat |
| 04 Layout & Grid | Konten mudah dipindai | Dashboard, katalog, company profile | Grid katalog toko online |
| 05 Responsive Design | Pelanggan HP tetap bisa beli/booking | UMKM, e-commerce, SaaS lapangan | Booking barbershop dari HP |
| 06 Bentuk, Radius & Bayangan | Kepribadian brand lewat bentuk | Produk anak, fintech, brand premium | Tombol pill vs sudut kotak fintech |
| 07 Ikon | Navigasi cepat tanpa banyak baca | Dashboard, kasir, mobile app | Ikon keranjang, cetak, cari di kasir |
| 08 Gambar & Ilustrasi | Bukti nyata sebelum kata dibaca | Hotel, bridal, kuliner, properti, fashion | Foto kamar hotel, foto produk |
| 09 State Komponen | Pengguna tenang saat loading/error | Pembayaran, booking, kasir, fintech | Status memuat saat bayar, pesan error jelas |
| 10 Aksesibilitas | Pasar lebih luas, tanpa kehilangan pengguna | Sekolah, klinik, layanan publik, korporat | Formulir yang bisa dipakai keyboard |
| 11 Microcopy | Ragu jadi klik, CS tidak ditanya berulang | Checkout, pendaftaran, onboarding SaaS | Tombol Coba gratis, tanpa kartu kredit |
| 12 Motion & Micro-interaction | Umpan balik halus, kesan modern | Landing premium, onboarding, e-commerce | Transisi halaman hotel yang halus |
| 13 Kepadatan Informasi | Kecepatan kerja vs kenyamanan baca | Kasir/ERP (padat), landing (lega) | Banyak produk per layar kasir |
| 14 Design System & Tokens | Hemat biaya saat produk membesar | SaaS multi-modul, ERP, agensi | Ganti satu token warna, semua tombol berubah |
Aturan praktisnya: satu bisnis, satu nuansa dan maksimal dua font. Kalau bisnisnya menjual kepercayaan (hukum, keuangan, klinik, hotel premium), pilih yang tenang dan rapi. Kalau bisnisnya menjual kecepatan dan harga (kuliner, promo, kasir), pilih yang jelas, kontras, dan gampang diklik dari HP.
| Aspek | Aplikasi Kasir | Landing Page UMKM |
|---|---|---|
| Hierarki | Total bayar paling menonjol | Headline + CTA WhatsApp |
| Tipografi | 4 ukuran, angka tabular | Rentang lebar, hero besar |
| Spacing | Rapat di grid, lega di tombol | Lega, section berjarak besar |
| Layout | Dua panel (produk + keranjang) | Section vertikal berurutan |
| Responsive | Tablet sebagai prioritas | HP sebagai prioritas |
| Radius | 6–8px | 12–16px atau pill |
| Gambar | Foto produk kecil 1:1 | Foto asli besar, hero |
| State | Sangat penting (loading, error, offline) | Cukup form dan CTA |
| Aksesibilitas | Target sentuh besar, shortcut keyboard | Kontras, alt text |
| Microcopy | Spesifik dan operasional | Persuasif dan ajakan bertindak |
| Motion | Minimal dan cepat | Halus saat scroll |
| Density | Sedang–padat | Lega |
| Design system | Wajib (banyak layar dan komponen) | Cukup tokens sederhana |
Kalau ingin fokus, urutan ini paling berdampak:
Sumber belajar yang praktis untuk developer adalah buku Refactoring UI (dari pembuat Tailwind CSS). Isinya langsung membahas topik-topik di atas dengan contoh sebelum dan sesudah.