小编典典

如何仅在元素的一侧创建阴影?

all

有没有办法只在底部放置阴影?我有一个菜单,其中有 2
张图像并排放置。我不想要正确的阴影,因为它与正确的图像重叠。我不喜欢为此使用图像,所以有没有办法将其仅放在底部,例如:

box-shadow-bottom: 10px #FFF;或类似的?

-moz-box-shadow: 0px 3px 3px #000;
-webkit-box-shadow: 0px 3px 3px #000;
box-shadow-bottom: 5px #000;
/* For IE 8 */
-ms-filter: "progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=180, Color='#000000')";
/* For IE 5.5 - 7 */
filter: progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=180, Color='#000000');

阅读 191

收藏
2022-05-16

共1个答案

小编典典

更新 4

与更新 3 相同,但具有现代 css(=更少规则),因此不需要对伪元素进行特殊定位。

#box {
    background-color: #3D6AA2;
    width: 160px;
    height: 90px;
    position: absolute;
    top: calc(10% - 10px);
    left: calc(50% - 80px);
}

.box-shadow:after {
    content:"";
    position:absolute;
    width:100%;
    bottom:1px;
    z-index:-1;
    transform:scale(.9);
    box-shadow: 0px 0px 8px 2px #000000;
}


<div id="box" class="box-shadow"></div>

更新 3

我之前的所有答案都是使用额外的标记来创建这种效果,这不是必需的。我认为这是一个
清洁的解决方案......唯一的技巧是使用这些值来获得正确的阴影定位以及阴影的正确强度/不透明度。这是一个新的小提琴,使用伪元素

http://jsfiddle.net/UnsungHero97/ARRRZ/2/

HTML

<div id="box" class="box-shadow"></div>

CSS

#box {
    background-color: #3D6AA2;
    width: 160px;
    height: 90px;
    margin-top: -45px;
    margin-left: -80px;
    position: absolute;
    top: 50%;
    left: 50%;
}

.box-shadow:after {
    content: "";
    width: 150px;
    height: 1px;
    margin-top: 88px;
    margin-left: -75px;
    display: block;
    position: absolute;
    left: 50%;
    z-index: -1;
    -webkit-box-shadow: 0px 0px 8px 2px #000000;
       -moz-box-shadow: 0px 0px 8px 2px #000000;
            box-shadow: 0px 0px 8px 2px #000000;
}

更新 2

显然,正如其他人刚刚指出的那样,您只需在 box-shadow CSS 中添加一个额外的参数即可做到这一点。这是演示:

http://jsfiddle.net/K88H9/821/

CSS

-webkit-box-shadow: 0 4px 4px -2px #000000;
   -moz-box-shadow: 0 4px 4px -2px #000000;
聽 聽     box-shadow: 0 4px 4px -2px #000000;

这将是一个更好的解决方案。添加的额外参数描述为:

第四个长度是传播距离。正值会使阴影形状在所有方向上扩展指定的半径。负值会导致阴影形状收缩。

更新

查看 jsFiddle 的演示:http: //jsfiddle.net/K88H9/4/

我所做的是创建一个“阴影元素”,它将隐藏在您想要拥有阴影的实际元素后面。我使“阴影元素”的宽度比实际元素的宽度精确地小了您指定的阴影的 2
倍;然后我正确对齐它。

HTML

<div id="wrapper">
    <div id="element"></div>
    <div id="shadow"></div>
</div>

CSS

#wrapper {
    width: 84px;
    position: relative;
}
#element {
    background-color: #3D668F;
    height: 54px;
    width: 100%;
    position: relative;
    z-index: 10;
}
#shadow {
    background-color: #3D668F;
    height: 8px;
    width: 80px;
    margin-left: -40px;
    position: absolute;
    bottom: 0px;
    left: 50%;
    z-index: 5;
    -webkit-box-shadow: 0px 2px 4px #000000;
       -moz-box-shadow: 0px 2px 4px #000000;
            box-shadow: 0px 2px 4px #000000;
}

原始答案

是的,您可以使用您提供的相同语法来执行此操作。第一个值控制水平定位,第二个值控制垂直定位。因此,只需将第一个值设置为0px,将第二个值设置为您想要的任何偏移量,如下所示:

-webkit-box-shadow: 0px 5px #000000;
   -moz-box-shadow: 0px 5px #000000;
        box-shadow: 0px 5px #000000;

有关框阴影的更多信息,请查看以下内容:

我希望这有帮助。

2022-05-16