CSS Shadows Border Radius Gradients Masking Basics
Selesai membaca dokumentasi ini?
Kembali ke rujukan utama CSS untuk melanjutkan topik lainnya.
Kembali ke rujukan utama CSS untuk melanjutkan topik lainnya.
Topik ini membahas empat alat visual CSS yang sering dipakai untuk membentuk karakter UI tanpa menambah markup tambahan:
box-shadow dan filter: drop-shadow() untuk memberi kedalaman atau memisahkan elemen dari latar.border-radius untuk membulatkan sudut dan membentuk silhouette komponen.linear-gradient(), radial-gradient(), dan conic-gradient() untuk membangun transisi warna atau highlight yang halus.mask-image, mask-composite, atau clip-path untuk mengontrol bagian mana dari elemen yang terlihat.Empat hal ini sering diperlakukan sebagai “hiasan”, padahal efeknya langsung memengaruhi keterbacaan, konsistensi bentuk, dan performa rendering. Dokumentasi ini fokus pada kapan dipakai, cara kerjanya, dan jebakan yang sering muncul di production UI.
Gunakan efek visual ini saat kamu ingin:
Kalau efek visual mulai mengganggu teks, kontras warna, atau waktu render, biasanya kamu sudah terlalu jauh. Efek yang baik membantu membaca isi, bukan bersaing dengan isi.
Dua efek ini kelihatannya mirip, tapi model kerjanya beda.
box-shadowbox-shadow memberi bayangan berbasis kotak elemen. Bentuk shadow mengikuti border box elemen, bukan bentuk pixel konten di dalamnya.
Contoh:
.card {
box-shadow: 0 12px 30px rgb(0 0 0 / 0.12);
}Pakai box-shadow saat:
Kelebihan utamanya:
Keterbatasannya:
filter: drop-shadow()drop-shadow() bekerja lewat filter visual pada hasil render elemen. Ia lebih cocok untuk konten yang punya alpha transparan atau bentuk non-rectangular.
Contoh:
.icon {
filter: drop-shadow(0 8px 12px rgb(0 0 0 / 0.18));
}Pakai drop-shadow() saat:
Kelebihan utamanya:
box-shadow terasa terlalu kakuKeterbatasannya:
box-shadow untuk komponen UI umum.drop-shadow() untuk shape yang bergantung pada transparansi atau outline non-rectangular.border-radius mengubah sudut elemen sehingga bentuknya lebih lembut dan lebih mudah dipetakan secara visual.
.card {
border-radius: 16px;
}Radius bukan sekadar efek rounding. Ia mengubah cara mata membaca bentuk elemen:
0 terasa tegas, kaku, dan boxy.Kalau radius diterapkan ke container, semua detail di dalamnya ikut terasa mengikuti bahasa bentuk itu. Artinya, radius berhubungan langsung dengan identitas visual komponen.
overflow: hidden sering dibutuhkan agar background, gambar, atau pseudo-element tidak keluar dari sudut yang dibulatkan.4px–8px: halus, netral, dan cocok untuk banyak UI dasar12px–16px: terasa modern dan nyaman untuk card9999px: pill shape untuk chip, badge, dan button kecil50%: bentuk bulat penuh jika lebar dan tinggi samaGradient adalah transisi warna yang dihitung browser tanpa aset gambar statis.
Tiga bentuk yang paling umum:
linear-gradient() untuk transisi sepanjang garisradial-gradient() untuk transisi dari pusat atau titik tertentuconic-gradient() untuk transisi yang berputar mengelilingi pusatlinear-gradient()Dipakai untuk background, overlay, highlight, atau pemisah visual lembut.
.hero {
background: linear-gradient(180deg, #111827 0%, #1f2937 100%);
}Gunakan saat kamu butuh arah cahaya atau transisi warna yang konsisten dari satu sisi ke sisi lain.
radial-gradient()Cocok untuk spotlight, glow, atau efek fokus dari titik tertentu.
.banner {
background: radial-gradient(circle at top, rgb(255 255 255 / 0.18), transparent 60%);
}conic-gradient()Sering dipakai untuk progress ring, chart dekoratif, atau aksen berbentuk putaran.
.progress {
background: conic-gradient(#22c55e 0 72%, #e5e7eb 72% 100%);
}Masking dipakai untuk menentukan bagian elemen mana yang terlihat. Ini berbeda dari sekadar warna atau radius; masking bekerja seperti filter visibilitas.
mask-image: menentukan gambar atau gradient yang dipakai sebagai maskmask-size: ukuran maskmask-position: posisi maskmask-repeat: pengulangan maskmask-composite: cara beberapa layer mask digabungkanclip-path: pemotongan bentuk secara geometris, sering dipakai sebagai alternatif saat butuh bentuk yang lebih eksplisitContoh dasar:
.fade-edge {
mask-image: linear-gradient(to bottom, black 70%, transparent 100%);
}border-radius sering lebih jelas dan lebih murah.Alur ini sengaja dibuat sederhana: mulai dari tujuan, lalu cocokkan dengan alat yang paling tepat. Kalau kamu memulai dari efek yang ingin dipakai, biasanya keputusan jadi bias dan hasil akhirnya lebih mahal untuk dirawat.
Visual effect sebaiknya tidak mengorbankan:
Kalau teks di atas gradient atau glow jadi sulit dibaca, kurangi intensitas efek atau tambahkan layer overlay yang lebih tenang.
Beberapa efek aman dipakai sesekali, tapi mahal kalau muncul di banyak elemen:
Untuk komponen yang di-render massal, pilih versi yang paling sederhana dan paling stabil. Satu shadow ringan sering lebih baik daripada tiga shadow dekoratif.
Radius, shadow, dan gradient sebaiknya mengikuti satu bahasa visual yang sama.
Contoh pola yang sehat:
.card {
border-radius: 16px;
box-shadow: 0 10px 24px rgb(15 23 42 / 0.10);
background: linear-gradient(180deg, #ffffff 0
Pola di atas sederhana, tapi justru itu yang biasanya paling tahan lama: radius konsisten, shadow secukupnya, gradient ringan, dan masking hanya dipakai kalau benar-benar perlu.
box-shadowfilter: drop-shadow()border-radiuslinear-gradient(), radial-gradient(), conic-gradient()mask-imageclip-path