【问题标题】:Cannot remove overlapping box-shadow无法删除重叠的盒子阴影
【发布时间】:2014-12-28 19:20:12
【问题描述】:

更具体地说,我使用的是聚合物纸影。

我正在尝试删除 paper-shadow 框的两侧以创建一个简单的箭头框,但我似乎无法摆脱它。我试过删除position: absolute,但这似乎并没有消除重叠行为。

这是我的 html/css 的样子:

HTML:

  <div class="content-container">
    <paper-shadow z="1">
      <div class="content">
        <h1>{{heading}}</h1>
        <content></content>
      </div>
      <paper-shadow class="triangle" z="1"> </paper-shadow>
    </paper-shadow>
  </div>

CSS:

.content-container
  flex: 3 0 45%
  order: 1
  position: relative

  .content, .triangle
    background-color: #fafafa

  .content
    padding: 20px

  .triangle
    position: absolute
    height: 20px
    width: 20px
    top: 50%
    left: 100%
    transform: translate(-50%, -50%) rotate(-45deg)

box-shadow 来自paper-shadowhttps://www.polymer-project.org/docs/elements/paper-elements.html#paper-shadow

【问题讨论】:

  • 您还没有显示您的 box-shadow 代码。也要小心制作自己的 HTML 元素。不推荐,也不太支持。您可以降低小方块上的 z-index 以隐藏它的一半。
  • 对不起。忘了提,box-shadow 来自shadow-paper。并尝试过,但它不起作用。
  • 您需要发布实际代码的演示。
  • 前几天有一个类似的问题,我想我的回答可能对你有用;)stackoverflow.com/questions/27607200/…

标签: html css polymer


【解决方案1】:

您尝试做的事情无法使用 CSS 完成,或者至少不能以您认为可以完成的方式完成。如果您有两个带有 box-shadow 重叠的元素,那么其中一个元素需要在另一个之上(z-index),并且您无法从比方说 - 一半元素中删除重叠部分。

但是,有一种“hacky”方法可以做到这一点,即按原样渲染盒子阴影,然后用一个简单的矩形覆盖它以覆盖重叠的阴影。伪类最好这样做,但只有当您使用的两个元素的背景颜色相同并且您需要在元素中有足够的填充以使这个人造矩形不会与您的内容重叠时,它才有效。

jsFiddle

示例 HTML:

<div class="box">
    <div class="triangle"></div>
</div>

还有 CSS:

.box {
    background:white;
    width:200px;
    height:100px;
    box-shadow:0px 0px 15px rgba(0, 0, 0, 0.4);
    position:relative;
    padding:25px;
}
.triangle {
    position: absolute;
    height: 20px;
    width: 20px;
    top: 50%;
    left: 100%;
    transform: translate(-50%, -50%) rotate(-45deg);
    background: white;
    box-shadow:0px 0px 15px rgba(0, 0, 0, 0.4);
}
.box:after {
    position:absolute;
    content:'';
    background: white;
    height:40px;
    width:25px;
    right:0;
    top:50%;
    margin-top:-20px;
}

【讨论】:

  • 酷,这行得通:) 知道为什么更改.contentz-index 没有解决它吗? (.content.triangle 是重叠的兄弟节点)。
  • 他们都有阴影,所以通过改变 z-index 你只能决定哪个元素与女巫重叠,但无论如何它仍然不是你想要的。看看这两种可能性:postimg.org/image/9pusu1hfb 和这里:postimg.org/image/yp1jeda9b
  • 糟糕,为错误的命名道歉 :)。我应该澄清一下:DOM 是 .content-container 包含 .content.triangle 作为直接子级。但只有.triangle(和.content-container)有盒子阴影。我最初的策略是增加.contentz-index 以便它覆盖.triangle 的左侧,但这并没有做任何事情。但是,就像您建议的那样,更改 .content-containerz-index 会改变重叠的工作方式。
【解决方案2】:

或者你也可以只使用pseudo元素beforeafter作为三角形和阴影使用:before添加三角形和:after添加shadow

body {
  background-color: #eee;
  padding: 20px;
}
.box {
  background: white;
  width: 200px;
  height: 100px;
  box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.4);
  position: relative;
  padding: 25px;
}
.box:after {
  content: '';
  position: absolute;
  height: 31px;
  width: 31px;
  top: 50%;
  left: 100%;
  transform: translate(-50%, -50%) rotate(-45deg);
  background: white;
  box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.4);
  z-index: -1;
}
.box:before {
  content: '';
  position: absolute;
  height: 0px;
  width: 0px;
  top: 50%;
  left: 100%;
  transform: translate(-50%, -50%) rotate(-45deg);
  background: white;
  border-width: 30px 30px 0px 0px;
  border-color: transparent white;
  border-style: solid;
}
&lt;div class="box"&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse placerat pellentesque placerat.&lt;/div&gt;

【讨论】:

  • 这确实是一个非常好的解决方案,但由于我们同时使用afterbefore 作为一个箭头(右),因此无法添加另一个箭头(左)如果需要的话,同时到盒子里。但是,如果作者只需要一个箭头,那么这就是要走的路。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-03
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 1970-01-01
  • 2012-09-10
相关资源
最近更新 更多