Shadow CSS: box-shadow dan text-shadow Dijelaskan Tuntas

Bayangan bikin halaman terasa berdimensi dan rapi. Pelajari box-shadow dan text-shadow sampai tuntas — tiap nilai dijelaskan, inset shadow, bayangan berlapis, efek glow, dan pola di balik kartu, tombol, serta efek elevasi.

Diterbitkan 12 Agustus 202611 menit bacaOleh ACY Partner Indonesia
Shadow CSS — box-shadow dan text-shadow untuk efek kedalaman
300 × 250Slot Iklan TersediaPasang iklan Anda di sini

Coba perhatikan antarmuka yang menurutmu enak dilihat — sebuah kartu yang seakan melayang sedikit di atas halaman, tombol yang terangkat saat kamu arahkan kursor ke atasnya, atau modal yang jelas-jelas berada paling depan menutupi yang lain. Apa yang membuat elemen-elemen itu terasa berdimensi? Hampir selalu jawabannya satu: bayangan. Bayangan adalah trik paling ampuh untuk membuat layar yang sebenarnya datar terasa berlapis, dan CSS memberimu kendali penuh atasnya lewat dua property.

Dua property itu adalah box-shadow, yang menebarkan bayangan di sekeliling kotak sebuah elemen, dan text-shadow, yang melakukan hal serupa untuk teks. Keduanya berangkat dari ide dasar yang sama — sebuah offset, blur, dan warna — jadi begitu satu nyantol, yang satunya ikut paham dengan sendirinya. Di akhir panduan ini kamu bakal bisa membaca nilai bayangan apa pun cuma dengan sekali lihat, dan menulis sendiri dengan percaya diri. Yuk mulai.

Cara kerja box-shadow

box-shadow menggambar bayangan di sekeliling kotak persegi sebuah elemen — dan dia ikut mengikuti border-radius-nya, jadi sudut yang membulat akan menghasilkan bayangan yang membulat juga. Sintaks lengkapnya menerima beberapa nilai dengan urutan yang sudah baku:

.card {
  box-shadow: 0 4px 12px 0 rgba(0, 0, 0, 0.15);
}

Satu baris itu sudah menutup kasus yang paling umum: bayangan halus yang duduk persis di bawah sebuah kartu. Tapi supaya kamu bisa mengatur bayangan sesuka hati, kamu perlu paham tiap angka itu sebenarnya sedang mengatur apa. Urutannya adalah offset horizontal, offset vertikal, blur radius, spread radius, warna:

Nilai Yang diatur
0 Offset horizontal — menggeser bayangan ke kiri (negatif) atau kanan (positif)
4px Offset vertikal — menggesernya ke atas (negatif) atau bawah (positif)
12px Blur radius — seberapa lembut dan menyebar tepinya (makin besar = makin lembut)
0 Spread radius — memperbesar (positif) atau memperkecil (negatif) seluruh bayangan
rgba(0,0,0,0.15) Warna — biasanya hitam yang setengah transparan

Yuk kita bahas satu per satu, karena memahaminya secara terpisah inilah yang membuat kamu bisa mendesain bayangan, bukan sekadar menyalin dari internet lalu berharap hasilnya pas.

Offset: ke mana bayangannya jatuh

Dua angka pertama menentukan ke arah mana bayangan dilemparkan. Anggap saja keduanya menggambarkan posisi sumber cahaya. Offset vertikal yang positif mendorong bayangan ke bawah, yang otak kita baca sebagai cahaya datang dari atas — persis seperti perilaku cahaya di dunia nyata, dan itulah kenapa bayangan ke bawah terlihat alami:

/* bayangan tepat di bawah — cahaya dari atas */
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.2);

/* bayangan ke bawah dan ke kanan — cahaya dari kiri atas */
box-shadow: 4px 4px 12px rgba(0, 0, 0, 0.2);

Mayoritas bayangan di UI memakai offset horizontal 0 dan offset vertikal positif, jadi muncul kesan rapi “disinari dari atas”. Menggesernya ke samping juga boleh kalau kamu mau efek cahaya menyudut yang lebih dramatis — asal konsisten di seluruh desainmu, supaya semuanya terlihat seperti disinari matahari yang sama.

Blur radius: lembut atau tajam

Angka ketiga adalah blur. Saat nilainya 0, bayangannya punya tepi yang keras dan tegas seperti bentuk solid. Makin besar nilainya, makin lembut dan menyebar tepinya:

box-shadow: 0 4px 0 rgba(0, 0, 0, 0.3);    /* tepi keras, tanpa blur */
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); /* lembut, menyebar halus */

Blur adalah nilai yang paling menentukan seberapa nyata sebuah bayangan terasa. Bayangan di dunia nyata hampir tidak pernah setajam silet; tepinya selalu memudar. Jadi untuk kesan kedalaman yang alami, biasanya kamu butuh blur yang cukup besar — sering kali lebih besar daripada offset-nya sendiri. Offset kecil dipadu blur besar menghasilkan efek “melayang” lembut yang terlihat premium, seperti pada kartu-kartu yang didesain rapi.

Spread radius: lebih besar atau lebih kecil

Angka keempat, spread, memperbesar atau memperkecil seluruh bayangan sebelum blur diterapkan. Nilai positif membuatnya lebih lebar dari elemennya; nilai negatif menariknya jadi lebih rapat:

/* bayangan sedikit lebih besar dari kotaknya */
box-shadow: 0 4px 12px 4px rgba(0, 0, 0, 0.15);

/* bayangan ditarik masuk, jadi cuma mengintip di bagian bawah */
box-shadow: 0 8px 12px -6px rgba(0, 0, 0, 0.3);

Spread itu nilai yang sering dilupakan orang, padahal diam-diam berguna. Spread negatif termasuk trik favorit: dia mengecilkan bayangan supaya cuma tampak di sisi tempat offset mendorongnya keluar, sehingga bayangannya rapat dan terkontrol — menempel pada elemen, bukan meluber ke segala arah.

Spread itu opsional — dan separuh dari ini juga opsional

Kamu cuma perlu menuliskan nilai yang benar-benar kamu butuhkan. box-shadow: 0 4px 12px black (offset, blur, warna) sudah sah kok — spread-nya otomatis dianggap 0. Versi paling minimnya adalah dua offset dan satu warna: box-shadow: 2px 2px black. Selebihnya cuma penyesuaian halus. Jadi nggak usah merasa wajib menghafal mantra empat angka; mulai saja dari offset dan blur, lalu tambahkan sisanya kalau desainmu memang memerlukannya.

Warna: jaga tetap halus

Nilai terakhir adalah warna bayangan. Kesalahan paling umum yang dilakukan pemula adalah memakai hitam pekat (#000), yang hasilnya terlihat berat dan palsu. Bayangan nyata itu transparan — dia menggelapkan apa yang ada di belakangnya, bukan mengecat gumpalan abu-abu solid. Jadi hampir selalu pakai rgba() dengan alpha yang rendah:

box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);  /* enak dilihat */
box-shadow: 0 4px 12px #000000;              /* berat, hindari */

Nilai alpha antara 0.1 sampai 0.25 sudah cukup untuk hampir semua kasus. Di atas background gelap kamu boleh sedikit lebih pekat; di atas background terang, sedikit lebih lembut. Kalau kamu masih belum pede soal rgba() dan format warna, panduan kami soal warna dan background membahasnya tuntas.

Inset shadow: bayangan di bagian dalam

Semua yang kita bahas sejauh ini menebarkan bayangan ke luar elemen. Tambahkan kata kunci inset, dan bayangannya berbalik ke dalam, membuat elemen tampak seperti ditekan masuk atau dicekungkan, alih-alih timbul ke atas:

.input {
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1);
}

Inilah rahasia di balik kesan “cekung” halus pada kolom isian form, tombol yang sedang ditekan, dan tombol geser. Bayangan dari dalam membuat permukaannya terasa masuk ke dalam, seperti lubang fisik yang nyata. Property-nya sama, nilainya sama — cuma inset yang membalik di sisi mana bayangannya muncul.

/* tombol yang tampak tertekan saat diklik */
.button:active {
  box-shadow: inset 0 3px 6px rgba(0, 0, 0, 0.2);
}

Padukan bayangan luar pada keadaan diam dengan inset shadow pada :active, dan kamu dapat tombol yang benar-benar terasa amblas saat diklik. Tambahkan transition singkat, dan efeknya jadi terasa sangat “kena di jari”.

Nah, di sinilah bayangan jadi benar-benar bertenaga: kamu bisa memasang beberapa bayangan sekaligus, dipisahkan koma, dan semuanya menumpuk dari depan ke belakang. Ini peningkatan paling besar yang bisa kamu lakukan, karena kedalaman di dunia nyata tidak pernah berupa satu bayangan datar — selalu beberapa bayangan lembut yang berlapis-lapis:

.card {
  box-shadow:
    0 1px 2px rgba(0, 0, 0, 0.08),
    0 4px 8px rgba(0, 0, 0, 0.08),
    0 12px 24px rgba(0, 0, 0, 0.08);
}

Kartu itu punya tiga bayangan: satu rapat dan dekat, satu sedang, dan satu lebar yang menyebar. Digabung, ketiganya meniru cara cahaya sebenarnya berhambur, menghasilkan kesan elevasi yang jauh lebih kaya dan meyakinkan ketimbang satu bayangan tunggal. Teknik “bayangan berlapis” inilah pembeda antara bayangan yang terlihat dirancang dan yang terlihat asal tempel.

Sistem elevasi yang sederhana

Desainer memandang bayangan sebagai elevasi — seberapa tinggi sebuah elemen melayang di atas halaman. Triknya gampang: tentukan beberapa level lalu pakai ulang. Kartu dalam keadaan diam bisa duduk di elevasi rendah, lalu naik ke elevasi lebih tinggi saat di-hover:

.card {
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  transition: box-shadow 0.2s ease;
}
.card:hover {
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
}

Kartunya terlihat jelas “terangkat” ke arahmu saat di-hover. Tentukan tiga atau empat level seperti ini sekali saja, dan seluruh antarmukamu langsung punya kesan kedalaman yang konsisten dan profesional.

Efek glow dan bayangan berwarna

Nggak ada aturan yang bilang bayangan harus abu-abu. Pakai nilai berwarna yang transparan, dan bayangan itu berubah jadi cahaya glow — pas banget buat focus ring, efek neon, dan menarik perhatian ke elemen yang sedang aktif:

/* glow cyan lembut di sekeliling input yang sedang fokus */
.input:focus {
  box-shadow: 0 0 0 4px rgba(0, 184, 230, 0.4);
  outline: none;
}

Perhatikan, di sini kedua offset-nya 0 dan blur-nya juga 0 — dengan hanya mengandalkan spread, bayangannya menjadi cincin yang merata di seluruh tepi elemen, dan persis begitulah cara membuat highlight fokus kustom. Naikkan nilai blur-nya, dan cincin itu melembut jadi glow sungguhan:

.button {
  box-shadow: 0 0 20px rgba(0, 184, 230, 0.6);
}

Jangan hapus outline fokus tanpa menggantinya

Memang menggoda menulis outline: none untuk menghilangkan cincin fokus bawaan yang digambar browser. Tapi cincin itulah yang membuat pengguna keyboard tahu mereka sedang di posisi mana pada halaman — menghapusnya tanpa memberi pengganti merusak aksesibilitas dengan parah. Kalau kamu memasang outline: none, kamu wajib menyediakan penanda fokus yang terlihat sendiri, dan cincin box-shadow seperti contoh di atas adalah cara yang bagus untuk itu. Jangan pernah mencopot gaya fokus lalu membiarkan elemen tanpa indikator fokus sama sekali.

text-shadow: ide yang sama, untuk teks

Begitu box-shadow sudah masuk akal, text-shadow nyaris tanpa pelajaran tambahan. Dia menebarkan bayangan di belakang teksnya sendiri, dan sintaksnya adalah versi yang lebih sederhana — offset horizontal, offset vertikal, blur, warna:

.heading {
  text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4);
}

Nggak ada spread, nggak ada inset — cuma dua offset, blur, dan warna. Bayangan tunggal itu mengangkat teks sedikit dari background, yang bisa membantu keterbacaan saat teks berada di atas gambar yang ramai. Dipakai secukupnya, dia menambah sentuhan rapi:

/* angkatan halus untuk judul hero di atas foto */
.hero-title {
  color: #ffffff;
  text-shadow: 0 2px 8px rgba(0, 0, 0, 0.5);
}

Dan sama seperti box-shadow, kamu bisa menumpuk beberapa text-shadow dengan koma untuk membangun efek — outline dengan menumpuk bayangan ke segala arah, atau tampilan neon yang menyala:

/* judul bergaya neon yang menyala */
.neon {
  color: #ffffff;
  text-shadow:
    0 0 8px rgba(0, 184, 230, 0.9),
    0 0 20px rgba(0, 184, 230, 0.6);
}

Bikin text-shadow tetap ringan

Bayangan teks gampang banget dipakai berlebihan. Bayangan gelap yang tebal di belakang teks isi justru bikin susah dibaca, bukan makin jelas — blur-nya membuat bentuk hurufnya jadi belepotan. Simpan text-shadow untuk judul, teks hero di atas gambar, atau efek dekoratif yang memang disengaja, dan jaga blur serta opacity-nya tetap lembut. Untuk paragraf biasa di atas background solid, justru tanpa text-shadow sama sekali hampir selalu jadi pilihan paling tepat.

Contoh nyata: kartu yang rapi

Sekarang kita gabungkan box-shadow, penumpukan, dan transition hover jadi sebuah kartu yang benar-benar layak kamu pakai di proyek nyata:

.card {
  background: #ffffff;
  border-radius: 12px;
  padding: 24px;
  box-shadow:
    0 1px 3px rgba(0, 0, 0, 0.06),
    0 6px 16px rgba(0, 0, 0, 0.08);
  transition: box-shadow 0.25s ease, transform 0.25s ease;
}

.card:hover {
  transform: translateY(-4px);
  box-shadow:
    0 2px 6px rgba(0, 0, 0, 0.08),
    0 16px 32px rgba(0, 0, 0, 0.12);
}
<div class="card">
  <h3>ACY Partner Indonesia</h3>
  <p>Kartu melayang dengan bayangan berlapis yang terangkat saat di-hover.</p>
</div>

Saat diam, kartunya punya bayangan dua lapis yang lembut sehingga terlihat melayang sedikit di atas halaman. Saat di-hover, dia naik empat piksel dan bayangannya jadi lebih dalam serta lebih lebar — efek klasik “terangkat mendekat ke arahmu”. Transition-nya menghaluskan keseluruhan gerakannya. Kalau kamu mau mendalami gerakan halus itu, panduan kami soal CSS transition membahasnya lengkap.

Bayangan bisa membebani performa kalau dianimasikan sembarangan

Menganimasikan box-shadow langsung di tiap frame bisa mahal, karena browser harus menggambar ulang blur-nya setiap saat. Untuk efek angkat saat hover, menganimasikan transform (seperti di atas) itu ringan dan mulus; perubahan bayangannya cukup kecil dan jarang sehingga biasanya aman. Tapi kalau kamu membuat sesuatu yang menganimasikan bayangan blur tebal terus-menerus, awasi frame rate-nya — trik andalan yang sering dipakai adalah memudarkan lapisan bayangan terpisah yang sudah digambar lebih dulu memakai opacity.

Penutup

Bayangan adalah cara tercepat menambah kedalaman dan kerapian pada antarmuka, dan sekarang kedua property bayangan sudah kamu kuasai:

  • box-shadow menebarkan bayangan di sekeliling elemen: offset horizontal, offset vertikal, blur, spread, warna.
  • Mayoritas bayangan UI memakai offset horizontal 0, offset vertikal positif, blur yang cukup besar, dan warna rgba() yang transparan — bukan hitam pekat.
  • Spread memperbesar atau memperkecil bayangan; spread negatif menjaganya tetap rapat dan terkontrol.
  • inset membalik bayangan ke dalam elemen untuk kesan tertekan atau cekung.
  • Tumpuk beberapa bayangan dengan koma untuk meniru cahaya nyata yang berhambur dan membangun sistem elevasi.
  • Bayangan berwarna yang transparan berubah jadi glow — bagus untuk focus ring, tapi jangan pernah menghapus outline fokus tanpa menggantinya.
  • text-shadow adalah ide yang sama untuk teks — offset, blur, warna, tanpa spread — dan paling bagus kalau dijaga tetap halus.

Dengan bayangan, kamu bisa membuat elemen apa pun melayang, tenggelam, atau menyala. Berikutnya kita bahas property yang melukis dengan warna lewat cara yang sama sekali berbeda — memadukan satu warna ke warna lain secara mulus di sepanjang permukaan: gradient CSS, yang menyulap background-mu dari datar jadi hidup.

Tag:cssfrontendbox-shadowtext-shadowmenengah
728 × 90Slot Iklan TersediaPasang iklan Anda di sini

Artikel Terkait

Lihat Semua Artikel

Artikel yang Mungkin Kamu Suka

Apa Itu Framework Frontend? — chip kode dengan tag komponen
Frontend / Dasar

Apa Itu Framework Frontend?

Penjelasan ramah untuk pemula tentang apa itu framework frontend, kenapa mereka ada, masalah apa yang mereka selesaikan dibanding JavaScript biasa, dan kapan kamu memang sebaiknya memakainya.

20 Sep 20268 menit baca
Sampul fundamentals frontend bertuliskan Apa Itu Frontend dan HTML + CSS + JS
Frontend / Dasar

Apa Itu Frontend Development?

Panduan ramah pemula tentang frontend development: bagian website yang kamu lihat dan klik secara langsung. Pahami cara kerja HTML, CSS, dan JavaScript, serta bedanya frontend dengan backend.

20 Sep 20268 menit baca
Ilustrasi sampul untuk Apa yang Dikerjakan Frontend Developer
Frontend / Dasar

Apa yang Dikerjakan Frontend Developer: Panduan untuk Pemula

Penjelasan ramah pemula tentang apa yang sebenarnya dikerjakan frontend developer setiap hari: mengubah desain jadi antarmuka yang berfungsi, membangun UI yang bisa dipakai ulang, sampai urusan responsif, aksesibilitas, dan kecepatan.

20 Sep 20269 menit baca
Kartu judul bertuliskan Styling dan Interaktivitas di atas latar biru gelap ACY Partner
Frontend / Dasar

Cara Kerja Styling dan Interaktivitas

Penjelasan ramah pemula soal bagaimana CSS menyulap HTML polos jadi tampilan rapi, dan bagaimana JavaScript menambahkan perilaku — pola berpikir struktur, gaya, perilaku saat membangun halaman web.

20 Sep 20268 menit baca
Tiga lapisan front-end menyatu di satu halaman web
Frontend / Dasar

Cara HTML, CSS, dan JavaScript Bekerja Bersama

Panduan praktis untuk pemula: bikin satu tombol kecil, beri struktur dengan HTML, tampilan dengan CSS, dan perilaku dengan JavaScript, lalu lihat ketiga lapisan ini bekerja sama di halaman nyata.

20 Sep 20268 menit baca
Sampul ikhtisar praktik terbaik frontend
Frontend / Dasar

Ikhtisar Praktik Terbaik Frontend

Peta ringkas tentang apa itu frontend yang baik — HTML bermakna, CSS rapi, JavaScript secukupnya, desain responsif, performa, dan progressive enhancement, lengkap dengan arahan untuk mendalaminya.

20 Sep 20268 menit baca