有没有办法让阴影只落在底部?我有一个菜单,两个图像彼此相邻。我不想要一个正确的阴影,因为它重叠了正确的图像。我不喜欢使用图像,所以有没有一种方法只把它放在底部,比如:
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');
你需要知道每个值是什么:
/* 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>
在这里和这里阅读更多
你也可以使用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>
另一个想法是基于@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>
你需要知道每个值是什么:
/* 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>
在这里和这里阅读更多
如果你在背景上有一个固定的颜色,你可以用两个背景颜色相同的掩蔽阴影来隐藏侧影效果,并且blur = 0,示例:
box-shadow:
-6px 0 white, /*Left masking shadow*/
6px 0 white, /*Right masking shadow*/
0 7px 4px -3px black; /*The real (slim) shadow*/
注意,黑色阴影必须是最后一个,并且有一个负扩散(-3px),以防止它延伸到角落之外。
这里是小提琴(改变掩蔽阴影的颜色,看看它是如何工作的)。
div {
宽度:100 px;
身高:100 px;
边框:1px纯粉色;
Box-shadow: -6px 0白色,6px 0白色,0 7px 5px -2px黑色;
}
< div > < / div >