Cara kerja text-shadow
text-shadow menggambar salinan teks di belakangnya, digeser dan dikaburkan. Kamu memberinya offset horizontal, offset vertikal, blur yang opsional, dan sebuah warna.
3px 3px 0 #f59e0b berarti 3px ke kanan (secara fisik, di arah tulisan apa pun), 3px ke bawah, tanpa blur, berwarna kuning. Bayangan kedua dikaburkan 6px dan memakai hitam semi-transparan, resep yang umum untuk efek kedalaman yang halus.
Sintaks
text-shadow: <offset-x> <offset-y> <blur-radius>? <color>?;
| Nilai | Wajib | Arti |
|---|---|---|
| offset-x | Ya | Positif menggeser bayangan ke kanan, negatif ke kiri |
| offset-y | Ya | Positif menggesernya ke bawah, negatif ke atas |
| blur-radius | Tidak (default 0) | Seberapa lembut tepinya, nilai negatif tidak valid |
| color | Tidak (default warna teks) | Bisa ditulis di awal atau di akhir |
text-shadow: none menghapus bayangan yang diwariskan. Ubah nilai-nilai di bawah untuk melihat efek masing-masing:
Coba -4px -4px 0 #16a34a, 0 0 10px red, dan dua bayangan yang dipisahkan koma.
Beberapa bayangan: glow, outline, dan 3D
Koma menumpuk bayangan, dan bayangan pertama digambar paling atas. Tiga efek berasal dari satu aturan itu:
- Glow: offset nol, blur yang makin besar, di atas latar gelap.
- Outline: empat bayangan tegas, satu untuk setiap arah diagonal. Cara ini cocok untuk outline tipis. Untuk outline yang lebih tebal dan rata,
-webkit-text-stroke: 2px #111827(didukung di semua browser versi terbaru meskipun memakai prefix) menggambar garis di tepi huruf. - 3D: serangkaian bayangan tegas yang masing-masing bergeser 1px lebih jauh, sehingga hurufnya terlihat timbul.
Menjaga teks tetap terbaca di atas latar yang ramai
Teks putih di atas foto atau pola kehilangan tepinya di bagian latar yang terang. Bayangan gelap yang lembut mengembalikan tepinya tanpa kotak yang terlihat:
Bayangan memang membantu, tetapi tidak menjamin kontras. Untuk teks panjang di atas gambar, tambahkan juga lapisan warna solid atau gradien di belakang teksnya.
text-shadow vs box-shadow
| text-shadow | box-shadow | |
|---|---|---|
| Mengikuti | Bentuk huruf | Kotak elemen (dan border radius-nya) |
| Nilai spread | Tidak | Ya |
inset | Tidak | Ya |
| Beberapa sekaligus, dipisahkan koma | Ya | Ya |
Untuk bayangan pada kartu dan tombol, lihat box-shadow.
Kesalahan yang sering terjadi
- Bayangan tebal dan gelap pada teks paragraf. Bayangan seperti itu mengaburkan bentuk huruf. Pakai bayangan untuk judul dan label pendek saja.
- Lupa offset kedua.
text-shadow: 2px #000tidak valid, karena kedua offset wajib ada. - Blur negatif. Nilai ini tidak valid, dan seluruh deklarasinya dibuang.
- Mengira bayangan memakan ruang. Bayangan hanya digambar, jadi bayangan besar bisa menimpa baris berikutnya atau terpotong oleh
overflow: hidden. - Efek glow di atas latar terang. Glow terang di atas putih tidak terlihat. Glow butuh latar yang gelap.
Pertanyaan yang sering diajukan
Bagaimana sintaks text-shadow?
text-shadow: offset-x offset-y blur-radius color;, misalnya text-shadow: 2px 2px 4px rgb(0 0 0 / 40%);. Kedua offset wajib diisi, blur default-nya 0, dan warna default-nya mengikuti warna teks.
Bagaimana cara menambahkan lebih dari satu text shadow?
Pisahkan bayangannya dengan koma: text-shadow: 0 0 4px #fff, 0 0 12px #2563eb;. Bayangan pertama digambar di atas bayangan-bayangan setelahnya.
Bagaimana cara membuat efek glow pada teks?
Pakai bayangan tanpa offset dengan blur, sering kali beberapa bayangan dengan blur yang makin besar: text-shadow: 0 0 4px #60a5fa, 0 0 12px #2563eb;. Di atas latar gelap, hasilnya terlihat seperti cahaya neon.
Apakah text-shadow punya nilai spread seperti box-shadow?
Tidak. text-shadow tidak punya spread dan tidak punya kata kunci inset. Untuk menebalkan bayangan di sekitar huruf, tumpuk beberapa bayangan atau pakai -webkit-text-stroke untuk outline.
Apakah text-shadow memengaruhi layout?
Tidak. Bayangannya hanya digambar, tidak memakan ruang dan tidak menggeser konten di sekitarnya, jadi bayangan yang besar bisa menimpa elemen di dekatnya.