我想在两个元素上添加盒子阴影,每个元素的宽度都不同。我的期望结果如下:
我一直试图通过伪元素覆盖重叠的盒子阴影来达到这个结果,但是因为它们需要透明度,我似乎找不到既没有盒子边缘小重叠也伪元素调整到正确宽度的解决方案。
顶部框架也不一定需要顶部边框来解决我的问题。
HTML:
<div>
<p></p>
</div>
<div>
<p></p>
</div>
SCSS:
div {
display: inline-block;
margin: 75px;
width: 200px;
height: 50px;
position: relative;
p {
position: absolute;
top: 100%;
left: 0;
height: 300px;
width: 250px;
}
&, p {
background: #ededed;
}
}
div:last-child p {
width: 150px
}
div {
box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.2);
p {
box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.2);
}
}
编辑:
通常我不会考虑使用JS来进行布局,但在我的情况下,直到用户进行交互之前,这些框是不可见的,因此我使用了脚本来解决我的问题。当dom准备就绪时,脚本会计算出顶部元素是否比底部元素大,并分别向其添加“big”或“small”类。通过知道这一点,我们就知道了伪元素的宽度应该继承哪个元素。只要元素没有被调整大小以改变哪个元素更大,这个方法就可以正常工作。
如果只需要box-sizing模糊而没有扩散,也有一种更简洁的解决方案,无需使用JS并且少一个伪元素。
示例:
最终结果并不完美,如您在此截图中看到的,所有白色背景都被黑色取代:
当您查看左侧框的左上角时,您会发现边框阴影有轻微的曲线。无论如何,对我来说足够接近。
如果有人找到一个类似于第一个 fiddle 的仅使用 CSS 的解决方案,我会非常感激。
border
,它看起来几乎相同,实现更简单,并且性能更好(在移动设备上尤为明显)。如果你选择使用投影效果,我认为将顶部元素的z-index
放在较大元素后面应该可以让一切按照你想要的方式工作。 - Alexei Darmin