【问题标题】: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;
}
<div class="messagebox">Hello World!</div>