Generator Bayangan Kotak CSS

Berikutnya

Buat satu aturan box-shadow dalam satu waktu: atur offset horizontal dan vertikal, blur, spread, warna, serta inset opsional, lalu salin hasilnya. Bayangan sungguhan biasanya membutuhkan dua atau tiga lapisan, jadi hasilkan setiap lapisan secara terpisah dan gabungkan aturan-aturannya dengan koma.

Cara merancang bayangan kotak

  1. 1

    Atur nilai bayangan

    Offset horizontal, offset vertikal, jari-jari blur, spread, serta warna dengan tingkat opasitas.

  2. 2

    Alihkan ke inset

    Ubah bayangan menjadi inset untuk mendapatkan bayangan dalam, berguna untuk tombol yang ditekan dan efek rongga.

  3. 3

    Pilih warna bayangan

    Hitam dengan opasitas rendah adalah pilihan klasik. Bayangan berwarna (sesuai warna elemen dan lebih gelap) terlihat lebih alami.

  4. 4

    Salin CSS

    Salin aturan bayangan tunggal dan tempel di stylesheet Anda. Untuk bayangan berlapis, hasilkan setiap lapisan terpisah lalu gabungkan aturannya dengan koma.

Sintaks box-shadow

box-shadow: <x-offset> <y-offset> <blur> <spread> <colour> [inset];
  • x-offset: nilai positif = ke kanan, nilai negatif = ke kiri.
  • y-offset: nilai positif berarti ke bawah, nilai negatif berarti ke atas.
  • Blur: 0 = tepi tajam; nilai yang lebih tinggi = tepi yang lebih lembut. Ukuran yang terlihat kira-kira 1,5 kali nilai blur di luar elemen.
  • Spread: ukuran tambahan di luar elemen. Nilai positif memperbesar bayangan, sedangkan nilai negatif memperkecilnya (berguna untuk menghasilkan efek halo yang halus).
  • warna: mendukung semua warna CSS. rgba(0, 0, 0, 0.15) merupakan pilihan utama yang paling umum digunakan.
  • inset: kata kunci yang membalikkan bayangan di dalam elemen.

Bayangan berlapis terlihat nyata

Generator ini menghasilkan satu aturan bayangan dalam satu waktu; untuk membuat bayangan berlapis, hasilkan setiap lapisan terpisah lalu gabungkan aturannya dengan koma.

Satu bayangan dengan 0 0 40px terlihat kabur. Dua bayangan, yakni bayangan kecil yang tajam di dekat elemen dan bayangan lebih besar yang lembut di sekitarnya, menggambarkan cara cahaya nyata tersebar.

box-shadow:
  0 1px 2px rgba(0, 0, 0, 0.08),
  0 4px 12px rgba(0, 0, 0, 0.08);

Baris pertama menampilkan bayangan kontak yang padat, sedangkan baris kedua menampilkan lingkungan sekitar yang lebih lembut. Pola tunggal ini mencakup 80% dari antarmuka tipe kartu.

Sistem elevasi

Material Design menggunakan enam tingkat elevasi, masing-masing dengan susunan bayangan yang berbeda. Secara sederhana:

Elevasi Bayangan
1 (dalam keadaan istirahat) 0 1px 3px rgba(0,0,0,.12), 0 1px 2px rgba(0,0,0,.24)
2 0 3px 6px rgba(0,0,0,.16), 0 3px 6px rgba(0,0,0,.23)
3 0 10px 20px rgba(0,0,0,.19), 0 6px 6px rgba(0,0,0,.23)
4 (ditinggikan) 0 14px 28px rgba(0,0,0,.25), 0 10px 10px rgba(0,0,0,.22)
5 (mengapung) 0 19px 38px rgba(0,0,0,.30), 0 15px 12px rgba(0,0,0,.22)

Pilih satu untuk setiap peran elevasi dan gunakan secara konsisten.

Bayangan berwarna terlihat lebih alami

Bayangan hitam murni terasa tidak alami karena bayangan sebenarnya memiliki warna yang ditentukan oleh permukaan di bawahnya. Coba:

box-shadow: 0 12px 24px rgba(40, 80, 120, 0.18);
  • warna biru-abu yang sejuk, bukan hitam murni. Pada latar belakang hangat, gunakan nuansa yang lebih hangat.

Kinerja

Bayangan kotak dibuat setiap kali dilakukan penggambaran ulang. Bayangan yang besar dan tebal pada banyak elemen dapat memperlambat proses gulir. Langkah-langkah mitigasi:

  • Gunakan transform: translateZ(0) pada elemen untuk memaksa pembuatan lapisan komposit.
  • Gantilah bayangan kompleks dengan filter: drop-shadow() hanya jika Anda memerlukan bayangan yang mengikuti clip-path (prosesnya umumnya lebih lambat).
  • Batasi bayangan pada elemen yang sering dirender ulang.

Inset untuk keadaan ditekan

.button:active {
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.12);
}

Bayangan inset memberikan kesan cekungan ke dalam permukaan, tombol terlihat seolah-olah ditekan ke dalamnya. Gabungkan dengan transform: translateY(1px) kecil ke bawah untuk mendapatkan sensasi klik yang terasa nyata.

Pertanyaan yang Sering Diajukan

Umumnya hal ini terjadi karena tingkat blur terlalu rendah atau nilai spread terlalu tinggi. Bayangan dengan tepi tegas yang tidak memiliki efek blur akan tampak seperti elemen duplikat. Tingkatkan nilai blur (20–30px merupakan titik awal yang umum digunakan), dan pertahankan nilai spread pada angka 0 atau nilai negatif yang sangat kecil.

Box-shadow mengikuti batas elemen, termasuk nilai border-radius, sehingga kartu yang berbentuk bulat akan memiliki bayangan yang secara otomatis menjadi halus dan bulat. Untuk bentuk dengan kliping, box-shadow tidak mengikuti area yang diklip; gunakan filter: drop-shadow() sebagai penggantinya.

Atur bayangan secara signifikan ke arah yang ditentukan, lalu gunakan efek penyebaran negatif untuk menyembunyikan sisi seberlawanan. Atau gunakan dua bayangan: satu yang terlihat di sisi target, dan satu lagi dengan efek penyebaran negatif untuk menutupi bagian yang tidak diinginkan dari penyebaran cahaya.

Tidak ada batasan kaku, tetapi setiap bayangan merupakan satu tahap pelapisan cat tambahan. Tiga hingga empat lapisan merupakan batas maksimal yang praktis; jika melebihi itu, sebaiknya gunakan gambar latar belakang atau file SVG sebagai pengganti.

Alat Terkait