有没有办法让阴影只落在底部?我有一个菜单,两个图像彼此相邻。我不想要一个正确的阴影,因为它重叠了正确的图像。我不喜欢使用图像,所以有没有一种方法只把它放在底部,比如:

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');

当前回答

更新4

与更新3相同,但使用了现代css(=更少的规则),因此不需要在pseudo元素上进行特殊定位。

#箱{ background - color: # 3 d6aa2; 宽度:160 px; 身高:90 px; 位置:绝对的; 顶部:calc(10% - 10px); 左:calc(50% - 80px); } .box-shadow:{后 内容:“”; 位置:绝对的; 宽度:100%; 底部:1 px; z - index: 1; 变换:规模(。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

显然,你可以像其他人指出的那样,只需要一个额外的参数就可以做到这一点。下面是演示:

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;

要了解更多关于框阴影的信息,请查看这些:

http://www.css3.info/preview/box-shadow/ https://developer.mozilla.org/en/css/-moz-box-shadow#Browser_compatibility http://www.w3.org/TR/css3-background/#the-box-shadow

其他回答

另一个想法是基于@theengineear的回答,我将使用inset而不是polygon。它更容易,因为它的工作方式与边距或填充相同。我还将依靠CSS变量来轻松定义所有不同的情况。

.shadow { box-shadow: 0 0 8px 5px rgba(200, 0, 0, 0.5); clip-path:inset(var(--t,0) var(--r,0) var(--b,0) var(--l,0)) } .top { --t:-100%; } .right { --r:-100%;} .bottom { --b:-100%; } .left { --l:-100%;} /* layout for example */ .box { display: inline-block; vertical-align: top; background: #338484; color: #fff; width: 4em; height: 2em; margin: 1em; padding: 1em; } <div class="box">none</div> <div class="box shadow top right left bottom">all</div> <div class="box shadow top">top</div> <div class="box shadow right">right</div> <div class="box shadow bottom">bottom</div> <div class="box shadow left">left</div> <div class="box shadow bottom right">bottom right</div> <div class="box shadow bottom top">top bottom</div> <div class="box shadow left top right">top left right</div> <div class="box shadow left right"> left right</div>

我觉得这就是你想要的?

.shadow { -webkit-box-shadow: 0 0 0 0 4px白色,0 6px 4px黑色; -moz-box-shadow: 0 0 0 0 4px白色,0 6px 4px黑色; Box-shadow: 0 0 0 4px白色,0 6px 4px黑色; } < div class = "影子”> wefwefwef < / div >

你需要知道每个值是什么:

/* offset-x | offset-y | blur-radius | spread-radius | color */
box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, 0.2);

若要只在元素的一侧应用阴影效果,请将模糊值设置为正数,并将扩展值设置为相同大小,但带负号。根据你想要阴影在哪一边,设置偏移值如下:

顶部阴影:offset-x: 0和offset-y: -5px 右阴影:偏移-x: 5px和偏移-y: 0 底部阴影:偏移-x: 0和偏移-y: 5px 左阴影:偏移-x: -5px和偏移-y: 0

.box{ margin: 2rem; padding: 1rem; } .shadow-all{ box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, 0.2); } .shadow-top { box-shadow: 0 -5px 3px -3px #00000030; } .shadow-right { box-shadow: 5px 0 3px -3px #00000030; } .shadow-bottom { box-shadow: 0 5px 3px -3px #00000030; } .shadow-left { box-shadow: -5px 0 3px -3px #00000030; } <div class="box shadow-all"> Shadow All </div> <div class ="box shadow-top"> Shadow Top </div> <div class ="box shadow-right"> Shadow Right </div> <div class ="box shadow-bottom"> Shadow Bottom </div> <div class ="box shadow-left"> Shadow left </div>

在这里和这里阅读更多

如果你的背景是实心的(或者你可以使用CSS重现它),你可以这样使用线性渐变:

div { 背景-图像:线性梯度(到顶部,rgba(0,0,0,0) 0%, rgba(0,0,0,0.3) 5px, #fff 5px, #fff 100%) } < div > < p > Foobar < / p > < p > < / p >测试 < / div >

这将在元素底部生成5px的渐变,从不透明度30%的黑色到完全透明。元素的其余部分为白色背景。当然,改变线性渐变的最后2个色点,你可以使背景完全透明。

内阴影

.shadow { -webkit-box-shadow: inset 00 9px #000; -moz-box-shadow: inset 00 9px #000; 盒子阴影:插入00 9px #000; } < div class = "影子”> wefwefwef < / div >