【问题标题】:Remove shadow of triangle from overlapping area above content? [duplicate]从内容上方的重叠区域中删除三角形的阴影? [复制]
【发布时间】:2018-08-19 16:04:57
【问题描述】:

我想去掉盒子的内边框或盒子,如下图

下图:

注意:如果可能的话,我想保留我的代码并添加位

注意2:我不想删除element:after上的box-shadow

这是我的密码笔:https://codepen.io/anon/pen/wEwgRR

#messagebox,#messagebox2{
  width:400px;
  height:150px;
  background:red;
  margin: 0 auto;
  position:relative;
  color:#fff;
  padding:12px;
  font-size:18px;
  border-radius:3%;
  box-shadow:0px 8px 9px black;
  margin-top:80px;
}

#messagebox:after{
  content:'';
  position:absolute;
  width:50px;
  height:50px;
  background:red;
  bottom:-25px;
  right:65%;
  transform: rotate(45deg);
  color:#fff;
  box-shadow:0px 5px 9px black;
}

#messagebox2:after{
  content:'';
  position:absolute;
  width:50px;
  height:50px;
  background:yellow;
  bottom:-25px;
  right:65%;
  transform: rotate(45deg);
  color:#fff;
  box-shadow:0px 5px 9px black;
}
<div id="messagebox">
   hello world
</div>

<div id="messagebox2">
   hello world
</div>

请帮助我提前谢谢!!!!

【问题讨论】:

标签: javascript html css css-shapes


【解决方案1】:
  • 使用与父级宽度/高度相同的::before 伪元素创建另一个层。
  • 在该层而不是父元素上应用阴影。
  • 添加一些负的z-index 值,将其置于::after 伪元素(即箭头)下方。

演示:

.messagebox {
  width:400px;
  height:150px;
  background:red;
  margin: 0 auto;
  position:relative;
  color:#fff;
  padding:12px;
  font-size:18px;
  margin-top:80px;
}

.messagebox::before {
  box-shadow:0px 8px 9px black;
  position: absolute;
  border-radius:3%;
  content: '';
  z-index: -2;
  bottom: 0;
  right: 0;
  left: 0;
  top: 0;
}

.messagebox:after{
  content:'';
  position:absolute;
  width:50px;
  height:50px;
  background:red;
  bottom:-25px;
  right:65%;
  z-index: -1;
  transform: rotate(45deg);
  color:#fff;
  box-shadow:0px 5px 9px black;
}

.messagebox2:after{
  content:'';
  position:absolute;
  width:50px;
  height:50px;
  background:yellow;
  bottom:-25px;
  right:65%;
  transform: rotate(45deg);
  color:#fff;
  box-shadow:0px 5px 9px black;
}
<div class="messagebox">
   hello world
</div>

<div class="messagebox messagebox2">
   hello world
</div>

【讨论】:

    【解决方案2】:

    试试这个

    .messagebox {
      background: red;
      border-radius: 12px;
      box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 1);
      box-sizing: border-box;
      color: white;
      height: 150px;
      margin: 20px auto;
      max-width: 400px;
      padding: 16px;
      position: relative;
    }
    
    .messagebox:after {
      border: 16px solid black;
      border-color: transparent transparent red red;
      bottom: -30px;
      box-shadow: -4px 4px 4px 0 rgba(0, 0, 0, 1);
      box-sizing: border-box;
      content: "";
      height: 0;
      left: 50%;
      margin-left: -16px;
      position: absolute;
      transform: rotate(-45deg);
      transform-origin: 0 0;
      width: 0;
    }
    &lt;div class="messagebox"&gt;Hello World!&lt;/div&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      相关资源
      最近更新 更多