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

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

当前回答

另一个想法是基于@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>

其他回答

你也可以使用clip-path来剪辑(隐藏)所有溢出的边,除了你想要显示的那条:

.shadow {
  box-shadow: 0 4px 4px black;
  clip-path: polygon(0 0, 100% 0, 100% 200%, 0 200%);
}

参见clip-path (MDN)。polygon的参数是左上点、右上点、右下点和左下点。通过将底部边缘设置为200%(或任何大于100%的数字),可以将溢出限制在底部边缘。

例子:

.shadow { box-shadow: 0 0 8px 5px rgba(200, 0, 0, 0.5); } .shadow-top { clip-path: polygon(0% -20%, 100% -20%, 100% 100%, 0% 100%); } .shadow-right { clip-path: polygon(0% 0%, 120% 0%, 120% 100%, 0% 100%); } .shadow-bottom { clip-path: polygon(0% 0%, 100% 0%, 100% 120%, 0% 120%); } .shadow-left { clip-path: polygon(-20% 0%, 100% 0%, 100% 100%, -20% 100%); } .shadow-bottom-right { clip-path: polygon(0% 0%, 120% 0%, 120% 120%, 0% 120%); } /* 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 shadow-all">all</div> <div class="box shadow shadow-top">top</div> <div class="box shadow shadow-right">right</div> <div class="box shadow shadow-bottom">bottom</div> <div class="box shadow shadow-left">left</div> <div class="box shadow shadow-bottom-right">bottom right</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个色点,你可以使背景完全透明。

你也可以在底部做一个渐变——这对我很有帮助,因为我想要的阴影是在一个已经是半透明的元素上,所以我不必担心任何剪辑:

&:after {
      content:"";
      width:100%;
      height: 8px;
      position: absolute;
      bottom: -8px;
      left: 0;
      background: linear-gradient(to bottom, rgba(0,0,0,0.65) 0%,rgba(0,0,0,0) 100%);
    }

只需使“bottom”和“height”属性匹配,并设置你的rgba值为任何你想要它们在阴影的顶部/底部

插入顶部和底部的框影

.cont { 位置:相对; 边框:1px纯黑色; 保证金:0自动; 宽度:200 px; 身高:200 px; 溢出:隐藏; } .shadow { 位置:绝对的; 宽度:100%; 高度:100%; 框影:嵌入灰色0px 50px 15px 0px,嵌入灰色0px -50px 15px 0px; padding-right: 30 px; margin-left: -15 px; } < div class = cont > < div class =阴影> < / div > < / div >

我还需要一个阴影,但只是在一个图像下,并设置在稍微左和右。这招对我很管用:

.box-shadow {
   -webkit-box-shadow: 5px 35px 30px -25px #888888;
      -moz-box-shadow: 5px 35px 30px -25px #888888;
           box-shadow: 5px 35px 30px -25px #888888;
}

应用于的元素是一个页面宽的图像(980px x 300px)。

如果它有助于摆弄设置时,他们运行如下:

水平阴影,垂直阴影,模糊距离,扩散(即阴影大小)和颜色。