任何方法都可以在没有黑客或图像的情况下在左右(水平?)两侧获得盒子阴影。我在用:
box-shadow: 0 0 15px 5px rgba(31, 73, 125, 0.8);
但它给周围的阴影。
我没有围绕元素的边界。
注意:我建议在下面查看@Hamish 的答案;它不涉及此处描述的解决方案中不完美的“掩蔽”。
你可以接近多个盒子阴影;每边一个
box-shadow: 12px 0 15px -4px rgba(31, 73, 125, 0.8), -12px 0 8px -4px rgba(31, 73, 125, 0.8);
编辑
再为顶部和底部添加 2 个盒子阴影,以掩盖渗出的阴影。
box-shadow: 0 9px 0px 0px white, 0 -9px 0px 0px white, 12px 0 15px -4px rgba(31, 73, 125, 0.8), -12px 0 15px -4px rgba(31, 73, 125, 0.8);
我对 Deefour 解决方案中阴影的圆形顶部和底部不满意,因此创建了我自己的解决方案。
inset
box-shadow
创建一个很好的均匀阴影,顶部和底部被切断。
要在元素的侧面使用此效果,请创建两个伪元素:before
并:after
绝对定位在原始元素的侧面。
div:before, div:after {
content: " ";
height: 100%;
position: absolute;
top: 0;
width: 15px;
}
div:before {
box-shadow: -15px 0 15px -15px inset;
left: -15px;
}
div:after {
box-shadow: 15px 0 15px -15px inset;
right: -15px;
}
div {
background: #EEEEEE;
height: 100px;
margin: 0 50px;
width: 100px;
position: relative;
}
<div></div>
编辑
根据您的设计,您可能可以使用clip-path
,如@Luke 的回答所示。但是,请注意,在许多情况下,这仍会导致阴影在顶部和底部逐渐变细,如您在此示例中所见:
div {
width: 100px;
height: 100px;
background: #EEE;
box-shadow: 0 0 15px 0px #000;
clip-path: inset(0px -15px 0px -15px);
position: relative;
margin: 0 50px;
}
<div></div>
CSS box-shadow使用 4 个参数h-shadow, v-shadow, blur, spread
:
box-shadow: 10px 0 8px -8px black;
该blur
参数添加了渐变效果,但也在顶部和底部边框上添加了一点阴影。为了摆脱这种副作用,我们可以使用:
Negativespread
减少所有边框上的阴影:您可以尝试使用它来尝试移除那个小的垂直阴影,而不会过多地影响侧面的阴影(对于 5 到 10px 的小阴影更容易。)
遮蔽与背景颜色相同的阴影(在本例中为白色),这允许出现自动收报机阴影。请注意,此遮罩阴影需要 blur = 0 才能完全覆盖副作用。
这里举两个例子,第二个使用Masking shadow:
div{
width: 100px;
height: 100px;
border: 1px solid green;
margin: 10px;
float: left;
}
#example1{
box-shadow: -10px 0 8px -8px black, 10px 0 8px -8px black;
}
#example2{
box-shadow:
0 -6px white,
0 6px white,
-7px 0 4px -3px black,
7px 0 4px -3px black;
}
<div id="example1"></div>
<div id="example2"></div>
如果这些方法都不适合您的需求,您还可以在任何现有 div 的一侧添加绝对 div。
只要记住将容器 div 设置为position: relative
这样,这个绝对 div 就会留在里面。
#example3 {
position: relative;
width: 100px;
height: 100px;
margin: 10px;
border: 1px solid green;
}
.shadow {
position: absolute;
height: 100%;
width: 4px;
left: 0px;
top: 0px;
box-shadow: -4px 0 3px black;
}
<div id="example3">
content here
<div class="shadow"></div>
</div>
试试这个,它对我有用:
box-shadow: -5px 0 5px -5px #333, 5px 0 5px -5px #333;
clip-path
现在(2020 年)是我发现在元素的特定侧面实现盒子阴影的最佳方法,尤其是当所需的效果是特定边缘的“干净切割”阴影时,如下所示:
.shadow-element {
width: 100px;
height: 100px;
background-color: #FFC300;
box-shadow: 0 0 10px 5px rgba(0,0,0,0.75);
clip-path: inset(0px -15px 0px -15px);
/* position and left properties required to bring element out from edge of parent
so that shadow can be seen; margin-left would also achieve the same thing */
position: relative;
left: 15px;
}
<div class="shadow-element"></div>
...与像这样的衰减/减少/变薄阴影相反:
.shadow-element {
width: 100px;
height: 100px;
background-color: #FFC300;
box-shadow: 15px 0 15px -10px rgba(0,0,0,0.75), -15px 0 15px -10px rgba(0,0,0,0.75);
/* position and left properties required to bring element out from edge of parent
so that shadow can be seen; margin-left would also achieve the same thing */
position: relative;
left: 15px;
}
<div class="shadow-element"></div>
只需将以下 CSS 应用于相关元素:
box-shadow: 0 0 Xpx Ypx [hex/rgba]; /* note 0 offset values */
clip-path: inset(Apx Bpx Cpx Dpx);
在哪里:
Apx
设置顶部边缘的阴影可见性Bpx
对Cpx
底部Dpx
剩下为应隐藏阴影的任何边缘输入值 0,为应显示阴影的任何边缘输入负值(与模糊半径 + 散布值 - 的组合结果相同Xpx + Ypx
)。
另一种方法是overflow-y:hidden
在父级上使用填充:
body {
padding: 30px;
}
#wrap {
overflow-y: hidden;
padding: 0 10px;
}
#wrap > div {
width: 100px;
height: 100px;
box-shadow: 0 0 20px -5px red;
}
<div id="wrap">
<div></div>
</div>
这适用于所有浏览器:
-webkit-box-shadow: -7px 0px 10px 0px #000, 7px 0px 10px 0px #000;
-moz-box-shadow: -7px 0px 10px 0px #000, 7px 0px 10px 0px #000;
box-shadow: -7px 0px 10px 0px #000, 7px 0px 10px 0px #000;
您必须使用多个box-shadow;
. inset
属性使它看起来很漂亮和内部:
div {
box-shadow: inset 0 12px 15px -4px rgba(31, 73, 125, 0.8), inset 0 -12px 8px -4px rgba(31, 73, 125, 0.8);
width: 100px;
height: 100px;
margin: 50px;
background: white;
}
<div></div>
要在图像或任何其他内容的右侧和左侧获得漂亮的嵌入阴影,请以这种方式使用它(z-index:-1
在显示带有插图的图像或内部对象时,这是一个很好的技巧):
.shadowcontainer{
display:inline-flex;
box-shadow: inset -40px 0px 30px -30px rgba(0,0,0,0.9),inset 40px 0px 30px -30px rgba(0,0,0,0.9);
}
.innercontent{
z-index:-1
}
<div class="shadowcontainer">
<img src="https://www.google.es/images/srpr/logo11w.png" class="innercontent" style="with:100%"/>
</div>
在某些情况下,您可以通过另一个容器隐藏阴影。例如,如果在带有阴影的 DIV 上方和下方都有一个 DIV,则可以position: relative; z-index: 1;
在周围的 DIV 上使用。
仅对于水平,您可以box-shadow
在其父 div 上欺骗 using 溢出:
.parent{
overflow:hidden;
}
.box-shadow{
box-shadow: box-shadow: 0 5px 5px 0 #000;
}
<div class="parent">
<div class="box-shadow">content</div>
</div>
另一个想法可能是创建一个最终具有透明度的深色模糊伪元素来模仿阴影。使其高度略低,宽度略大 ig
您可以在其中使用 1 个 div 来“擦除”阴影:
.yourdiv{
position:relative;
width:400px;
height:400px;
left:10px;
top:40px;
background-color:white;
box-shadow: 0px 0px 1px 0.5px #5F5F5F;
}
.erase{
position:absolute;
width:100%;
top:50%;
height:105%;
transform:translate(0%,-50%);
background-color:white;
}
你可以玩“身高:%;” 和“宽度:%;” 抹去你想要的影子。
这对我有用:
box-shadow: 0 5px 5px 0 #000;
我试图在右侧复制引导程序 shadow-sm,这是我的代码:
.shadow-rs{
box-shadow: 5px 0 5px -4px rgba(237, 241, 235, 0.8);
}
如果您希望您的 div 顶部有一个箭头,请使用以下命令:
box-shadow: -1px -1px 1px rgba(0, 0, 0, 0.1);