Cajas con sombra

facebook-svg gplus-svg twitter-svg

Todo lo que sabemos acerca de text-shadow puede ser aplicado a box-shadow. Es como si fuera la misma propiedad con otro nombre. Sin embargo hay algunos toques especiales. Empecemos con la sintaxis.

box-shadow: desplazamiento horizontal desplazamiento vertical desenfoque extension color inset;

Para desplazamiento horizontal, desplazamiento vertical, desenfoque y color consulte por favor Texto con sombra.

Extension (spread)

Analicemos este ejemplo donde tanto el desplazamiento horizontal como el vertical tienen el valor 0. La sombra quedaría debajo de la caja, si no fuera por la extensión ( 1px en este caso ).

#caja1{box-shadow: 0px 0px 5px 1px black;}
#caja1

La extensión acepta valores negativas como en el siguiente ejemplo donde la #caja3 tiene el mismo estilo que la #caja2 pero con una extensión negativa (-6px) de la sombra.

#caja2{box-shadow: 0px 10px 10px black;}
#caja3{box-shadow: 0px 10px 10px -6px black;}
#caja2
#caja3
Sombra interior (inset)

También podemos aplicar una sombra interior a nuestra caja utilizando la palabra clave inset.

#caja4{box-shadow: 0px 0px 10px 0px #333 inset;}
#caja4

Ponle una sombra con drop-shadow

Pero no siempre tenemos cajas regulares. Pensemos un momento en un bocadillo ( como elemento de viñeta ). En el siguiente ejemplo para dibujar un bocadillo utilizamos una caja rectangular <div class="sombra_svg"> y un pseudo-elemento ::before para dibujar la flecha. Si queremos ponerle una sombra normal ( box- shadow:1px 1px 2px #333; ) la flecha queda sin sombra. Podemos darle una sombra al ::before, pero en este caso la sombra aparece marcada por encima del bocadillo :(. La solución: utilizar  filter: drop-shadow().

Lea más sobre filtros en CSS

Aunque la sintaxis se le parece, filter: drop-shadow() no es lo mismo que box-shadow.

filter:drop-shadow( desplazamiento horizontal desplazamiento vertical desenfoque color )

Mientras que box-shadow aplica la sombra al contorno del elemento, filter:drop-shadow() toma en cuenta las transparencias.

.sombra_svg {
	position: relative;
	margin:auto;
	display:-webkit-flex; 
	display: -ms-flexbox; 
	display: flex;
	-webkit-align-items: center;
    -ms-flex-align: center;
    align-items: center;
	box-sizing: border-box;
	width: 6em;
	height: 5em;
	background: #ff9;
	/*box-shadow:1px 1px 2px #333;*/
	-webkit-filter: drop-shadow(0px 0px 5px #333);
	filter: drop-shadow(0px 0px 5px #333);
	font-family:Georgia, "Times New Roman", Times, serif;
	font-size:16px;
	text-align: center;
	white-space: normal;
}

.sombra_svg span{ text-align:center;}
.sombra_svg::before {
	content: "";
	position: absolute;
	top: 4.5em;
	right: 2.5em;
	width: 1em;
	height: 1em;
	background-color: #ff9;
	transform : rotate(45deg);
	/*box-shadow:0px 0px 5px #333*/;
}
¡Soy un bocadillo!
¡Soy un bocadillo!

Otra aplicación practica sería utilizar sombras para oscurecer el fondo detrás de una ventana modal. En este caso queremos utilizar una sombra semitransparente ( rgba(0,0,0,.75) ) cuya extensión es de 50vmax ( 1vmax equivale a una centésima parte del lado más grande de la ventana )

.modal{ box-shadow: 0 0 0 50vmax rgba(0,0,0,.75);} 

See the Pen CSS modal by Gabi (@enxaneta) on CodePen.