【问题标题】:How to have two elements share a box shadow如何让两个元素共享一个盒子阴影
【发布时间】:2016-11-15 07:53:13
【问题描述】:

所以我处于一个棘手的情况:我有一个外部 div 包装器,其中包含一个内部 div 和一个 ul,如下所示:

<div id="wrapper">
    <div id="box"></div>
    <ul id="list">...</ul>
</div>

#list 必须绝对定位在#box 的正下方,但不能在它出现和消失时移动它和页面周围的其他元素。

由于它是绝对定位的,如果我在#wrapper 周围添加边框,它只会在#box 周围。 box-shadow 当然也一样。问题是,我需要一个能够无缝环绕两个元素的阴影。

我在搜索 google/stackoverflow 时遇到的三个解决方案是:

  1. 给两个元素自己的阴影,然后使用-webkit-clip-path 去除#list 上的顶部阴影,使其看起来像一个阴影围绕组。 虽然这工作时,阴影相遇的部分有一种奇怪的剪辑效果。所以这个方法行得通,但看起来不太好。 Link to answer describing solution.

  2. 使用等于模糊负值的散布,然后使用 3 个阴影,#list 的每一侧各一个。 理论上不错,但实际上是两侧的阴影现在不要沿着全长走。 Link to answer describing solution。这是我尝试的jsfiddle

  3. 使用:before:after 伪元素来掩盖重叠的阴影。 这对于类似颜色的框非常有效,但我的uldiv其中包含无法覆盖的内容! Link to answer describing solution

我有点困惑,因为我真的很想在#box#list 周围有一个阴影,但似乎找不到适合我的特殊情况的解决方案。任何建议都会非常有帮助!

注意:我实际上使用的是 Electron 框架,因此该解决方案必须在 Chrome 上运行,但它只有必须在 Chrome 上运行铬!

【问题讨论】:

  • @JamesBrown 问题是,我需要 #list 绝对定位。如果不是,当它再次出现时,它会推动一切。我想在不改变流程的情况下显示为其他所有内容的弹出窗口。不幸的是,这阻止了#wrapper 实际包装它,使这变得不平凡,但我希望那里有一些很棒的 CSS hack,一些大师会给予帮助:)
  • 这是一个图像实际上非常有用的情况。这听起来很可能 - 所以也许我错过了一些东西。这一切都取决于布局的项目 - 阴影颜色 - 下面的东西等 - 以及它如何转换。

标签: html css shadow box-shadow


【解决方案1】:

你可以使用css-filter:

#box {
  filter: drop-shadow(0 0 5px black)
}

【讨论】:

  • 它在 MDN 上说 drop-shadow 基本上类似于 box-shadow 但具有硬件加速。语法好像也差不多,怎么用?
  • 为我工作了一个元素及其 :after 伪元素。谢谢
  • 我不知道为什么,但这很好用!谢谢楼主
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
相关资源
最近更新 更多