Menu

Box Shadow CSS: Sintaks, Spread, Inset, dan Contoh

box-shadow menggambar bayangan di sekeliling kotak elemen. Pelajari lima nilainya (x, y, blur, spread, warna), bayangan inset, menumpuk beberapa bayangan untuk kedalaman yang realistis, focus ring yang dibuat dengan spread, dan kesalahan yang membuat bayangan terlihat kotor.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Cara kerja box-shadow

box-shadow melukis bayangan di sekeliling border box elemen. Bayangan mengikuti border-radius, tidak memakan ruang dalam tata letak, dan membutuhkan minimal dua nilai: seberapa jauh ia digeser secara horizontal dan vertikal.

Sintaksnya

box-shadow: [inset] <offset-x> <offset-y> [<blur>] [<spread>] [<color>];
NilaiArtiDefault
insetMenggambar bayangan di dalam kotak, seperti area yang tertekan ke dalamDi luar
offset-xPositif bergeser ke kanan, negatif ke kiriWajib
offset-yPositif bergeser ke bawah, negatif ke atasWajib
blurSeberapa lembut tepinya; tidak boleh negatif0 (tepi tajam)
spreadMemperbesar (positif) atau memperkecil (negatif) bayangan0
colorWarna apa pun; hitam semi transparan biasanya terlihat paling bagusWarna teks

Jumlah nilai panjang menentukan artinya: dua adalah offset, tiga menambahkan blur, empat menambahkan spread. Coba sendiri:

Coba 0 0 0 4px #f59e0b (sebuah cincin), inset 0 0 12px #2563eb, dan -8px -8px 0 #16a34a.

Spread: cincin dan bayangan satu sisi

Spread mengubah ukuran bayangan sebelum di-blur. Dari situ muncul dua pola:

  • Cincin: tanpa offset, tanpa blur, hanya spread. Berbeda dengan border, cincin ini tidak mengubah ukuran elemen, jadi cocok sebagai indikator fokus (:focus-visible { box-shadow: 0 0 0 3px #2563eb; }).
  • Cincin dengan celah: tumpuk spread putih di bawah spread berwarna yang lebih besar.
  • Satu sisi saja: geser bayangan ke bawah dan kecilkan dengan spread negatif, sehingga hanya mengintip di bagian bawah.

Bayangan bertumpuk untuk kedalaman yang realistis

Bayangan sungguhan punya bagian gelap dan tajam yang dekat dengan benda, serta bagian lembut dan samar yang lebih jauh. Dua atau tiga lapisan meniru hal itu jauh lebih baik daripada satu blur besar:

Bayangan pertama di daftar dilukis paling atas. Gunakan warna bayangan hitam semi transparan atau versi gelap dari warna background, jangan pernah abu-abu murni, supaya bayangan menggelapkan apa pun yang ada di bawahnya.

Bayangan inset

inset menggambar bayangan di dalam padding box, seolah-olah permukaannya tertekan ke dalam. Cocok untuk input teks, area cekung, dan tombol yang sedang ditekan:

input {
  box-shadow: inset 0 1px 3px rgb(0 0 0 / 20%);
}
button:active {
  box-shadow: inset 0 3px 6px rgb(0 0 0 / 30%);
}

Bayangan inset digambar di atas background tetapi di bawah konten. Bayangan yang mengikuti bentuk huruf, bukan kotak, adalah text-shadow.

Kesalahan umum

  • Bayangan hitam pekat yang sepenuhnya tidak transparan. Hasilnya terlihat seperti garis tepi gelap. Pakai alpha 10% sampai 30%.
  • Satu blur raksasa untuk kedalaman. Tumpuk bayangan kecil yang tajam dengan bayangan besar yang lembut.
  • Bayangan terpotong di tepi. Leluhur dengan overflow: hidden memotongnya; tambahkan padding pada leluhur itu atau pindahkan aturan overflow-nya.
  • Blur negatif. Nilai ini tidak valid dan seluruh deklarasinya diabaikan.
  • Menganimasikan box-shadow pada banyak elemen. Browser melukis ulang di setiap frame. Untuk halaman yang berat, animasikan opacity dari pseudo-element yang membawa bayangan lebih besar sebagai gantinya.

Pertanyaan yang sering diajukan

Bagaimana sintaks box-shadow?

box-shadow: offset-x offset-y blur spread color;, misalnya box-shadow: 0 4px 12px 0 rgb(0 0 0 / 15%);. Hanya dua offset yang wajib; tambahkan inset untuk menggambar bayangan di dalam kotak.

Apa fungsi spread di box-shadow?

Spread memperbesar (positif) atau memperkecil (negatif) bayangan sebelum di-blur. Bayangan tanpa offset, tanpa blur, dan dengan spread 3px adalah cincin pekat setebal 3px di sekeliling elemen.

Bagaimana cara memberi bayangan hanya di bagian bawah?

Geser bayangannya ke bawah dan kecilkan dengan spread negatif agar sisi-sisinya hilang: box-shadow: 0 8px 6px -6px rgb(0 0 0 / 40%);.

Apakah box-shadow memengaruhi tata letak?

Tidak. Bayangan tidak memakan ruang dan tidak menggeser elemen lain, itulah sebabnya bayangan cocok untuk menambahkan focus ring atau efek terangkat saat hover tanpa pergeseran tata letak. Bayangan bisa terpotong oleh overflow: hidden milik leluhurnya.

Bisakah saya memakai beberapa box shadow?

Bisa, pisahkan dengan koma. Bayangan pertama digambar paling atas. Menumpuk bayangan kecil yang tajam dengan bayangan besar yang lembut terlihat lebih alami daripada satu bayangan besar.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai