我需要在一些块元素上创建一个box-shadow,但只是(例如)在它的右侧。我的方法是用box-shadow将内部元素包装成带有padding-right和overflow:hidden的外部元素;所以阴影的其他三面是不可见的。
有没有更好的方法来实现这个目标?喜欢box-shadow-right吗?
编辑:我的意图是只创建阴影的垂直部分。与规则background:url(shadow.png) 100% 0% repeat-y完全相同。
我需要在一些块元素上创建一个box-shadow,但只是(例如)在它的右侧。我的方法是用box-shadow将内部元素包装成带有padding-right和overflow:hidden的外部元素;所以阴影的其他三面是不可见的。
有没有更好的方法来实现这个目标?喜欢box-shadow-right吗?
编辑:我的意图是只创建阴影的垂直部分。与规则background:url(shadow.png) 100% 0% repeat-y完全相同。
当前回答
这是我做的一个小技巧。
<div id="element"><!--element that I want an one-sided inset shadow from the bottom--></div>
<div class="one_side_shadow"></div>
1. 创建一个<div class="one_side_shadow"></div>在我想创建的单面框阴影的元素下面(在这种情况下,我想为id="element"从底部来一个单面插入阴影)
2. 然后我用负的垂直偏移量创建了一个常规的盒子阴影,将阴影向上推到一边。
`box-shadow: 0 -8px 20px 2px #DEDEE3;`
其他回答
为了获得最多两面的剪裁效果,你可以使用带有背景渐变的伪元素。
header::before, main::before, footer::before, header::after, main::after, footer::after {
display: block;
content: '';
position: absolute;
width: 8px;
height: 100%;
top: 0px;
}
header::before, main::before, footer::before {
left: -8px;
background: linear-gradient(to left, rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0));
}
header::after, main::after, footer::after {
right: -8px;
background: linear-gradient(to right, rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0));
}
将在通常组成文档的元素的左右添加一个漂亮的阴影效果。
我要做的是为阴影创建一个垂直块,并将它放在我的块元素应该在的地方。然后这两个块被包装成另一个块:
<div id="wrapper">
<div id="shadow"></div>
<div id="content">CONTENT</div>
</div>
<style>
div#wrapper {
width:200px;
height:258px;
}
div#wrapper > div#shadow {
display:inline-block;
width:1px;
height:100%;
box-shadow: -3px 0px 5px 0px rgba(0,0,0,0.8)
}
div#wrapper > div#content {
display:inline-block;
height:100%;
vertical-align:top;
}
</style>
jsFiddle的例子。
以下是为每一方演示的代码依赖,或工作片段:
.boxes { display: flex; flex-wrap: wrap; } .box { margin: 20px; border: 1px solid #ccc; font-family: Helvetica Neue, Arial, sans-serif; font-weight: 100; letter-spacing: 2px; color: #999; display: flex; align-items: center; justify-content: center; text-align: center; flex: 1; padding: 40px; line-height: 1.4em; } .top { box-shadow: 0 -5px 5px -5px #333; } .right { box-shadow: 5px 0 5px -5px #333; } .bottom { box-shadow: 0 5px 5px -5px #333; } .left { box-shadow: -5px 0 5px -5px #333; } <div class="boxes"> <div class="box top">Top Only</div> <div class="box right">Right Only</div> <div class="box bottom">Bottom Only</div> <div class="box left">Left Only</div> </div>
以下是我的例子:
.box { 宽度:400 px; 身高:80 px; background - color: # C9C; text-align:中心; 字体:20px normal Arial, Helvetica, sans-serif; 颜色:# fff; 填充:100px 00 0; -webkit-box-shadow: 0 8px 6px黑色; -moz-box-shadow: 0 8px 6px黑色; Box-shadow: 0 8px 6px -6px黑色; } < div class = "盒子" > < / div >
我自制的解决方案很容易编辑:
HTML:
<div id="anti-shadow-div">
<div id="shadow-div"></div>
</div>
css:
#shadow-div{
margin-right:20px; /* Set to 0 if you don't want shadow at the right side */
margin-left:0px; /* Set to 20px if you want shadow at the left side */
margin-top:0px; /* Set to 20px if you want shadow at the top side */
margin-bottom:0px; /* Set to 20px if you want shadow at the bottom side */
box-shadow: 0px 0px 20px black;
height:100px;
width:100px;
background: red;
}
#anti-shadow-div{
margin:20px;
display:table;
overflow:hidden;
}
演示: http://jsfiddle.net/jDyQt/103