如何仅在一侧创建插入框阴影?


109

是否有可能以某种方式仅在div的一侧上插入框阴影?请注意,我在这里谈论的是嵌入式盒形阴影,而不是普通的外部盒形阴影。

例如,在下面的JSFiddle中,您会看到插图阴影在所有4面上以不同的程度出现。

如何使其仅显示在顶部?还是最多只有顶部和底部?

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>


3
另一种(完全可自定义的)方式是背景渐变...
vals,

Answers:


237

这就是您要寻找的。它为您想要的每个侧面都有阴影的示例。

.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);
}

有关更多示例,请参见代码段:


13

诀窍是第二个.box-inner内部,其宽度大于原始的.box,并将box-shadow应用于该内部。

然后,在上添加更多填充以.text弥补增加的宽度。

这是逻辑外观:

盒逻辑

这是在CSS中的完成方式:

使用最大宽度.inner-box不会导致宽度.box变大,并overflow确保剩余部分被裁剪:

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

110%的宽度比父母的宽度(在孩子的上下文中为100%)(.box例如,当父母的宽度固定时,宽度应该相同)。负边距弥补了宽度,并使元素居中(而不是仅隐藏了正确的部分):

.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;
}

并在X轴上添加一些填充以弥补更宽的范围.inner-box

.text {
    padding: 20px 40px;
}

这是工作中的小提琴。

如果您检查小提琴,您将看到:

。框 .box-inner 。文本


您如何不使用代码就将链接发布到小提琴呢?:O
Mohammad Areeb Siddiqui 2013年

男子!那是一个骇客!酷:P
Mohammad Areeb Siddiqui

在我的Firefox中,我看不到左右边框的文本。文本被截断了。(以下是屏幕截图goo.gl/aO8ZX)我自己尝试了一下,并使用了一些额外的工具div来隐藏阴影... jsfiddle.net/KFrun/19
Fabian N.

是的,我使用jsfiddle.net/KFrun/6/可能是某些Firefox版本问题吗?我将Firefox 21.0用于Ubuntu ...
Fabian N.13年

但是下面仍然有阴影
Cody Guldner

8

有点晚了,但是可以在这里找到不需要更改填充或添加额外的div的重复答案:仅对box-shadow Inset bottom有问题。它说:“在第四个长度上使用负值来定义传播距离。通常会忽略这一点,但所有主流浏览器都支持该值”

从回答者的小提琴中

box-shadow: inset 0 -10px 10px -10px #000000;

7

这有点接近。

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

那就是我尝试过的!但是他不想要,所以没有将其发布为答案!:(
Mohammad Areeb Siddiqui 2013年

大喜欢。谢谢❤️–
mghhgm

有一个比这个答案最简单的答案(至少目前是这样)。谢谢
Gendrith

1

试试吧,也许有用...

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;  

上面的CSS原因是您的底部有一个框阴影。
你可以在这里多红色


1

这可能不是您要查找的确切内容,但是您可以通过rgba结合使用来创建非常相似的效果linear-gradient

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

这将创建一个线性渐变,从不透明度为50%的黑色(rgba(0,0,0,.5))到透明(rgba(0,0,0,0)),从顶部开始透明地变为30%。您可以使用这些值来创建所需的效果。您可以通过添加deg值(linear-gradient(90deg, rgba(0,0,0,.5) 0%, rgba(0,0,0,0) 30%))或切换颜色来将其放在另一侧。如果您想要真正复杂的阴影,例如不同侧面的不同角度,甚至可以开始分层linear-gradient

这是一个片段,可以看到它的实际效果:

.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>


0

插入框阴影仅在顶部?

#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%;
        }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.