Cómo funciona text-shadow
text-shadow pinta detrás del texto una copia desplazada y desenfocada. Le das un desplazamiento horizontal, un desplazamiento vertical, un desenfoque opcional y un color.
3px 3px 0 #f59e0b significa 3px a la derecha (físicos, en cualquier dirección de escritura), 3px hacia abajo, sin desenfoque y en ámbar. La segunda sombra tiene un desenfoque de 6px y usa un negro semitransparente, la receta habitual para un efecto de profundidad sutil.
La sintaxis
text-shadow: <offset-x> <offset-y> <blur-radius>? <color>?;
| Valor | Obligatorio | Significado |
|---|---|---|
| offset-x | Sí | Positivo mueve la sombra a la derecha, negativo a la izquierda |
| offset-y | Sí | Positivo la mueve hacia abajo, negativo hacia arriba |
| blur-radius | No (0 por defecto) | Qué tan suave es el borde; los valores negativos son inválidos |
| color | No (por defecto, el color del texto) | Puede ir al principio o al final |
text-shadow: none quita una sombra heredada. Cambia los valores de abajo para ver el efecto de cada uno:
Prueba -4px -4px 0 #16a34a, 0 0 10px red y dos sombras separadas por una coma.
Varias sombras: brillo, contorno y 3D
Las comas apilan sombras; la primera se dibuja encima. De esa sola regla salen tres efectos:
- Brillo: desplazamientos en cero, desenfoque creciente, sobre un fondo oscuro.
- Contorno: cuatro sombras nítidas, una por diagonal. Sirve para contornos finos; para un contorno más grueso y uniforme,
-webkit-text-stroke: 2px #111827(compatible con todos los navegadores actuales a pesar del prefijo) dibuja un trazo en los bordes de las letras. - 3D: una serie de sombras nítidas, cada una 1px más lejos, para que las letras parezcan extruidas.
Texto legible sobre un fondo recargado
El texto blanco sobre una foto o un patrón pierde sus bordes donde el fondo es claro. Una sombra oscura y suave los recupera sin una caja visible:
Una sombra ayuda, pero no garantiza el contraste. Para un texto largo sobre una imagen, agrega además una capa sólida o un degradado detrás del texto.
text-shadow vs box-shadow
| text-shadow | box-shadow | |
|---|---|---|
| Sigue | La forma de las letras | La caja del elemento (y su border-radius) |
| Valor de expansión | No | Sí |
inset | No | Sí |
| Varias, separadas por comas | Sí | Sí |
Para sombras en tarjetas y botones, consulta box-shadow.
Errores comunes
- Sombras oscuras y pesadas en el texto del cuerpo. Desdibujan la forma de las letras. Deja las sombras para títulos y etiquetas cortas.
- Olvidar el segundo desplazamiento.
text-shadow: 2px #000es inválido; los dos desplazamientos son obligatorios. - Un desenfoque negativo. Es inválido y se descarta toda la declaración.
- Esperar que la sombra ocupe espacio. Solo se pinta; las sombras grandes pueden superponerse a la línea siguiente o quedar recortadas por
overflow: hidden. - Efectos de brillo sobre fondos claros. Un brillo claro sobre blanco es invisible. Los brillos necesitan un fondo oscuro.
Preguntas frecuentes
¿Cuál es la sintaxis de text-shadow?
text-shadow: offset-x offset-y blur-radius color;, por ejemplo text-shadow: 2px 2px 4px rgb(0 0 0 / 40%);. Los dos desplazamientos son obligatorios; el desenfoque vale 0 por defecto y el color es el del texto.
¿Cómo agrego más de una sombra al texto?
Separa las sombras con comas: text-shadow: 0 0 4px #fff, 0 0 12px #2563eb;. La primera sombra se dibuja encima de las que vienen después.
¿Cómo hago un efecto de brillo en el texto?
Usa sombras sin desplazamiento y con desenfoque, a menudo varias con un desenfoque creciente: text-shadow: 0 0 4px #60a5fa, 0 0 12px #2563eb;. Sobre un fondo oscuro se ve como un brillo neón.
¿text-shadow tiene un valor de expansión como box-shadow?
No. text-shadow no tiene spread ni la palabra clave inset. Para engrosar la sombra alrededor de las letras, apila varias sombras o usa -webkit-text-stroke para un contorno.
¿text-shadow afecta el layout?
No. La sombra solo se pinta; no ocupa espacio ni mueve el contenido de alrededor, así que una sombra grande puede superponerse a los elementos cercanos.