无法删除重叠的盒子阴影

时间:2014-12-28 07:56:07

标签: html css polymer

更具体地说,我使用聚合物纸张阴影。

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

overlap not working

这是我的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

2 个答案:

答案 0 :(得分:3)

您尝试做的事情无法使用CSS完成,或者至少不是您认为可以完成的方式。如果你有两个盒子阴影重叠的元素,而其中一个元素需要高于另一个元素(z-index),你就无法从一半的元素中删除重叠的部分。

然而,有一个&#34; hacky&#34;这样做的方法是将框阴影按原样渲染,然后用一个简单的矩形覆盖它以覆盖重叠的阴影。伪类最好这样做,但这只适用于你使用的背景颜色对于两个元素都相同而且你需要在你的元素中使用填充,这样这个人工矩形不会与你的内容重叠。

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;
}

答案 1 :(得分:2)

或者您也可以仅使用pseudo元素beforeafter作为三角形,阴影使用:before添加三角形,:after添加{{} 1}}

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;
}