Respuestas:
NOTA: Sugiero revisar la respuesta de @ Hamish a continuación; no implica el "enmascaramiento" imperfecto en la solución descrita aquí.
Puedes acercarte con múltiples sombras de caja; uno para cada lado
box-shadow: 12px 0 15px -4px rgba(31, 73, 125, 0.8), -12px 0 8px -4px rgba(31, 73, 125, 0.8);
Editar
Agregue 2 sombras de cuadro más para la parte superior e inferior al frente para enmascarar el sangrado.
box-shadow: 0 9px 0px 0px white, 0 -9px 0px 0px white, 12px 0 15px -4px rgba(31, 73, 125, 0.8), -12px 0 15px -4px rgba(31, 73, 125, 0.8);
No estaba satisfecho con la parte superior e inferior redondeadas de la sombra presente en la solución de Deefour, así que creé la mía.
inset
box-shadow
crea una agradable sombra uniforme con la parte superior e inferior cortadas.
Para usar este efecto en los lados de su elemento, cree dos pseudo elementos :before
y :after
colóquelos absolutamente a los lados del elemento original.
div:before, div:after {
content: " ";
height: 100%;
position: absolute;
top: 0;
width: 15px;
}
div:before {
box-shadow: -15px 0 15px -15px inset;
left: -15px;
}
div:after {
box-shadow: 15px 0 15px -15px inset;
right: -15px;
}
div {
background: #EEEEEE;
height: 100px;
margin: 0 50px;
width: 100px;
position: relative;
}
<div></div>
Editar
Dependiendo de su diseño, puede usarlo clip-path
, como se muestra en la respuesta de @ Luke. Sin embargo, tenga en cuenta que, en muchos casos, esto todavía hace que la sombra se reduzca en la parte superior e inferior, como puede ver en este ejemplo:
div {
width: 100px;
height: 100px;
background: #EEE;
box-shadow: 0 0 15px 0px #000;
clip-path: inset(0px -15px 0px -15px);
position: relative;
margin: 0 50px;
}
<div></div>
:after
necesidades top: 0
también.
display: inline-block
a pseudo clases para que tu ejemplo funcione. En definitiva: buena solución. +1
not
requiere <div>
elementos auxiliares . :-)
Prueba esto, está funcionando para mí:
box-shadow: -5px 0 5px -5px #333, 5px 0 5px -5px #333;
CSS box-shadow utiliza 4 parámetros: h-shadow, v-shadow, blur, spread:
box-shadow: 10px 0 8px -8px black;
La sombra v ( verical) se establece en 0.
El parámetro de desenfoque agrega el efecto de degradado, pero también agrega una pequeña sombra en los bordes verticales (del que queremos deshacernos).
negativo propagación reduce la sombra en todos los bordes: puedes jugar con ella tratando de eliminar esa pequeña sombra vertical sin afectar demasiado a la de los lados (es más fácil para sombras pequeñas, de 5 a 10 píxeles).
Aquí un ejemplo de violín .
Agregue un div vacío en su elemento y estilícelo con un posicionamiento absoluto para que no afecte el contenido del elemento.
Aquí el violín con un ejemplo de sombra izquierda.
<div id="container">
<div class="shadow"></div>
</div>
.shadow{
position:absolute;
height: 100%;
width: 4px;
left:0px;
top:0px;
box-shadow: -4px 0 3px black;
}
Si tiene un fondo fijo, puede ocultar el efecto de sombra lateral con dos sombras de enmascaramiento que tengan el mismo color de fondo y desenfoque = 0, por ejemplo:
box-shadow:
0 -6px white, // Top Masking Shadow
0 6px white, // Bottom Masking Shadow
7px 0 4px -3px black, // Left-shadow
-7px 0 4px -3px black; // Right-shadow
He agregado nuevamente una extensión negativa (-3px) a la sombra negra, para que no se extienda más allá de las esquinas.
Aquí el violín .
Esto funciona bien para todos los navegadores:
-webkit-box-shadow: -7px 0px 10px 0px #000, 7px 0px 10px 0px #000;
-moz-box-shadow: -7px 0px 10px 0px #000, 7px 0px 10px 0px #000;
box-shadow: -7px 0px 10px 0px #000, 7px 0px 10px 0px #000;
Debes usar el múltiplo box-shadow;
. La propiedad insertada hace que se vea bien y por dentro
div {
box-shadow: inset 0 12px 15px -4px rgba(31, 73, 125, 0.8), inset 0 -12px 8px -4px rgba(31, 73, 125, 0.8);
width: 100px;
height: 100px;
margin: 50px;
background: white;
}
Otra forma es con: overflow-y:hidden
en el padre con relleno.
#wrap {
overflow-y: hidden;
padding: 0 10px;
}
#wrap > div {
width: 100px;
height: 100px;
box-shadow: 0 0 20px -5px red;
}
clip-path
ahora es (2020) la mejor manera que he encontrado para lograr sombras de caja en lados específicos de elementos, especialmente cuando el efecto requerido es una sombra de "corte limpio" en bordes particulares , como este:
.shadow-element {
width: 100px;
height: 100px;
background-color: #FFC300;
box-shadow: 0 0 10px 5px rgba(0,0,0,0.75);
clip-path: inset(0px -15px 0px -15px);
/* position and left properties required to bring element out from edge of parent
so that shadow can be seen; margin-left would also achieve the same thing */
position: relative;
left: 15px;
}
<div class="shadow-element"></div>
... a diferencia de una sombra atenuada / reducida / adelgazante como esta:
.shadow-element {
width: 100px;
height: 100px;
background-color: #FFC300;
box-shadow: 15px 0 15px -10px rgba(0,0,0,0.75), -15px 0 15px -10px rgba(0,0,0,0.75);
/* position and left properties required to bring element out from edge of parent
so that shadow can be seen; margin-left would also achieve the same thing */
position: relative;
left: 15px;
}
<div class="shadow-element"></div>
Simplemente aplique el siguiente CSS al elemento en cuestión:
box-shadow: 0 0 Xpx Ypx [hex/rgba]; /* note 0 offset values */
clip-path: inset(Apx Bpx Cpx Dpx);
Dónde:
Apx
establece la visibilidad de sombra para el borde superiorBpx
DerechaCpx
fondoDpx
izquierdaIngrese un valor de 0 para cualquier borde donde la sombra debe estar oculta y un valor negativo (el mismo que el resultado combinado del radio de desenfoque + valores de dispersión - Xpx + Ypx
) a cualquier borde donde se debe mostrar la sombra.
clip-path
ejemplo? Hay 2 fragmentos de código. El primero usa clip-path
y tiene un corte completamente limpio sin "esquinas superiores e inferiores curvadas", muy parecido a su solución (pero con mucho menos CSS requerido). El segundo fragmento de código es un ejemplo simplemente para comparación: muchas soluciones dan como resultado una sombra de cuadro dispersa que a menudo no es lo que la gente quiere lograr.
box-shadow
propiedad a algo así 0 0 10px 5px rgba(0,0,0,0.75);
. Tenga en cuenta el spread
valor agregado y reducido blur-radius
.
box-shadow: 0 5px 5px 0 #000;
Funciona de mi lado. Espero que te ayude.
Para una bonita sombra insertada en los lados derecho e izquierdo de las imágenes, o cualquier otro contenido, úselo de esta manera
*** El índice z: -1 hace un buen truco al mostrar imágenes u objetos internos con inserciones
<html>
<div class="shadowcontainer">
<img src="https://www.google.es/images/srpr/logo11w.png" class="innercontent" style="with:100%"/>
</div>
<style>
.shadowcontainer{
display:inline-flex;
box-shadow: inset -40px 0px 30px -30px rgba(0,0,0,0.9),inset 40px 0px 30px -30px rgba(0,0,0,0.9);
}
.innercontent{
z-index:-1
}
</style>
</html>
Solo para horizontal, puede engañar a la sombra de cuadro utilizando el desbordamiento en su div principal:
<div class="parent">
<div class="box-shadow">content</div>
</div>
.parent{
overflow:hidden;
}
.box-shadow{
box-shadow: box-shadow: 0 5px 5px 0 #000;
}
Puedes usar 1 div dentro de eso para "borrar" la sombra:
.yourdiv{
position:relative;
width:400px;
height:400px;
left:10px;
top:40px;
background-color:white;
box-shadow: 0px 0px 1px 0.5px #5F5F5F;
}
.erase{
position:absolute;
width:100%;
top:50%;
height:105%;
transform:translate(0%,-50%);
background-color:white;
}
Puedes jugar con "height:%;" y "ancho:%;" para borrar la sombra que quieres.
Por alguna razón, las respuestas proporcionadas aquí simplemente no funcionarían en mi caso. Entonces, me puse creativo. Aquí hay una nueva solución para todos los que utiliza linear-gradient()
en lugar de box-shadow
.
p {
padding: 1rem;
background-color: #b55;
color: white;
background-image: linear-gradient(90deg, rgba(0,0,0,0.5), rgba(0,0,0,0) .5rem, rgba(0,0,0,0), rgba(0,0,0,0.0) calc(100% - .5rem), rgba(0,0,0,0.5));
}
<p>Testing</p>
Aunque no estoy buscando discutir el punto, esta no es realmente una "caja" que usted (nosotros) estamos tratando de formar, así que supongo que podría decirse que box-shadow
no tenía sentido para empezar.
Traté de copiar el bootstrap shadow-sm justo en el lado derecho, aquí está mi código:
.shadow-rs{
box-shadow: 5px 0 5px -4px rgba(237, 241, 235, 0.8);
}