我正在尝试在两个元素上添加一个盒子阴影,每个元素的宽度都是可变的。我想要的结果如下所示:
我一直试图用一个覆盖重叠框阴影的伪元素来达到这个结果,但是因为它们需要具有透明度,我似乎无法找到一个解决方案,其中框的边缘既没有小的重叠伪元素也不会调整到正确的宽度。顶框也不一定需要顶边框来解决我的问题。
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 准备好时,脚本会判断顶部元素是否大于底部元素,并分别为其添加“大”或“小”类。通过知道这一点,我们知道伪元素的宽度应该继承哪个元素。只要不以会改变哪个元素更大的方式调整元素的大小,就可以正常工作。
还有一个更简洁的解决方案,不需要 JS 和一个伪元素,以防只需要 box-sizing blur 而不需要传播。
小提琴:
最终结果并不完美,正如您在此屏幕截图中看到的那样,所有白色背景都被替换为黑色:
当您查看左侧框的左上角时,您可以看到边框阴影有轻微的曲线。无论如何,它离我很近。
如果有人仅使用 css 找到与第一个小提琴类似的结果的解决方案,我将不胜感激。