¿Cómo crear una sombra de cuadro insertada solo en un lado?

109

¿Es posible de alguna manera tener solo una sombra de cuadro insertada en un lado de un div? Tenga en cuenta que estoy hablando de una sombra de caja insertada aquí, no de la sombra de caja exterior normal.

Por ejemplo, en el siguiente JSFiddle, verá que la sombra insertada aparece en los 4 lados, en diversos grados.

¿Cómo hago para que se muestre SOLO en la parte superior? ¿O como mucho SOLO arriba y abajo?

JSFiddle: http://jsfiddle.net/ahmadka/KFrun/

.box {
  -webkit-box-shadow: inset 0px 5px 10px 1px #000000;
  box-shadow: inset 0px 5px 10px 1px #000000;
}

.text {
  padding: 20px;
}
<div class="box">
  <div class="text">
    Lorem ipsum ....
  </div>
</div>

Ahmad
fuente
3
Una forma alternativa (y totalmente personalizable) sería un degradado de fondo ...
vals

Respuestas:

237

Esto es lo que buscas. Tiene ejemplos para cada lado que quieras con una sombra.

.top-box
{
    box-shadow: inset 0 7px 9px -7px rgba(0,0,0,0.4);
}
.left-box
{
    box-shadow: inset 7px 0 9px -7px rgba(0,0,0,0.4);
}
.right-box
{
    box-shadow: inset -7px 0 9px -7px rgba(0,0,0,0.4);
}
.bottom-box
{
    box-shadow: inset 0 -7px 9px -7px rgba(0,0,0,0.4);
}

Consulte el fragmento para ver más ejemplos:

Gordon Tucker
fuente
13

El truco es un segundo .box-innerinterior, que es más ancho que el original .box, y box-shadowse aplica a eso.

Luego, agregue más relleno para .textcompensar el ancho adicional.

Así es como se ve la lógica:

lógica de caja

Y así es como se hace en CSS:

Use el ancho máximo para .inner-boxno hacer .boxque se ensanche y overflowpara asegurarse de que el resto esté recortado:

.box {
    max-width: 100% !important;
    overflow: hidden;
}

110% es más ancho que el padre, que es 100% en el contexto de un niño (debería ser el mismo cuando el padre .boxtiene un ancho fijo, por ejemplo). Los márgenes negativos compensan el ancho y hacen que el elemento esté centrado (en lugar de que solo se oculte la parte derecha):

.box-inner {
    width: 110%;
    margin-left:-5%;
    margin-right: -5%;
    -webkit-box-shadow: inset 0px 5px 10px 1px #000000;
    box-shadow: inset 0px 5px 10px 1px #000000;
}

Y agregue un poco de relleno en el eje X para compensar el ancho .inner-box:

.text {
    padding: 20px 40px;
}

Aquí hay un violín que funciona.

Si inspecciona el Fiddle, verá:

.caja .box-inner .texto

casraf
fuente
¿Cómo puedes publicar el enlace para jugar sin el código? : O
Mohammad Areeb Siddiqui
¡Hombre! ¡Eso es un truco TAN! Genial: P
Mohammad Areeb Siddiqui
En mi Firefox no puedo ver el texto en el borde derecho e izquierdo. El texto simplemente se corta. (Aquí está la captura de pantalla goo.gl/aO8ZX ) Lo probé yo mismo y usé un poco más divpara ocultar la sombra ... jsfiddle.net/KFrun/19
Fabian
Sí, uso jsfiddle.net/KFrun/6/ ¿Es posible que haya algún problema con la versión de Firefox? Yo uso Firefox 21.0 para Ubuntu ...
Fabian N.
Pero todavía hay una sombra debajo
Cody Guldner
8

Bastante tarde, pero aquí se puede encontrar una respuesta duplicada que no requiere alterar el relleno o agregar divs adicionales: Tiene un problema con el recuadro de sombra Solo en la parte inferior . Dice: "Use un valor negativo para la cuarta longitud que define la distancia de propagación. Esto a menudo se pasa por alto, pero es compatible con todos los navegadores principales".

Del violín del contestador :

box-shadow: inset 0 -10px 10px -10px #000000;
drkario
fuente
7

Esto se acerca un poco.

.box
{
    -webkit-box-shadow: inset -1px 10px 5px -3px #000000;
    box-shadow: inset -1px 10px 5px -3px #000000;
}
mohkhan
fuente
¡Eso es lo que intenté! ¡Pero él no quería eso, así que no lo publicó como la respuesta! :(
Mohammad Areeb Siddiqui
Grande como. Gracias ❤️
mghhgm
Puede haber una respuesta más simple que esta (al menos por el momento). Gracias
Gendrith
1

pruébalo, quizás útil ...

box-shadow: 0 0 0 3px rgb(255,255,255), 0 7px 3px #cbc9c9;
                    -webkit-box-shadow: 0 0 0 3px rgb(255,255,255), 0 7px 5px #cbc9c9;
                    -o-box-shadow: 0 0 0 3px rgb(255,255,255), 0 7px 5px #cbc9c9;
                    -moz-box-shadow: 0 0 0 3px rgb(255,255,255), 0 7px 5px #cbc9c9;  

arriba CSSporque tienes una sombra de caja en la parte inferior.
puedes rojo más aquí

Hamid Talebi
fuente
1

Puede que esto no sea exactamente lo que está buscando, pero puede crear un efecto muy similar si lo usa rgbaen combinación con linear-gradient:

  background: linear-gradient(rgba(0,0,0,.5) 0%, rgba(0,0,0,0) 30%);

Esto crea un gradiente lineal de negro con 50% de opacidad ( rgba(0,0,0,.5)) a transparente ( rgba(0,0,0,0)) que comienza a ser competente 30% transparente desde la parte superior. Puede jugar con esos valores para crear el efecto deseado. Puede tenerlo en un lado diferente agregando un valor de grado ( linear-gradient(90deg, rgba(0,0,0,.5) 0%, rgba(0,0,0,0) 30%)) o cambiando los colores. Si desea sombras realmente complejas como diferentes ángulos en diferentes lados, incluso podría comenzar a aplicar capas linear-gradient.

Aquí hay un fragmento para verlo en acción:

.box {
  background: linear-gradient(rgba(0,0,0,.5) 0%, rgba(0,0,0,0) 30%);
}

.text {
  padding: 20px;
}
<div class="box">
  <div class="text">
    Lorem ipsum ....
  </div>
</div>

Leonheess
fuente
0

¿Insertar caja de sombra solo en la parte superior?

#box {
            background: #CCC;
            -webkit-box-shadow: inset 0 20px 20px -20px rgba(0,0,0,0.8);
            -moz-box-shadow: inset 0 20px 20px -20px rgba(0,0,0,0.8);
            box-shadow: inset 0 20px 20px -20px rgba(0,0,0,0.8);
            font: bold 18px/1.2em sans-serif;
            height: auto;
            margin: 15px auto;
            padding: 75px 15px 25px;
            text-align: center;
            width: 80%;
        }
Piyush
fuente