如何使用 CSS 为对话泡泡创建曲线尾巴?
How to create a curve tail for speech bubble with CSS?
我正在用 CSS 创建一个对话泡泡,我已经走到这一步了。
.says{
width: 200px;
padding: 20px;
margin-right: 20px;
background: #BF7EF2;
color: #fff;
box-shadow: -3px 3px 5px #C1B9C8;
position: relative;
border-radius: 5px;
}
.says:before{
content: "";
position: absolute;
z-index: -1;
top: 14px;
right: -18px;
height: 20px;
border-right: 20px solid #BF7EF2;
border-bottom-right-radius: 25px 20px;
transform: translate(0, -4px);
box-shadow: -3px 3px 5px #C1B9C8;
}
.says:after{
content: "";
position: absolute;
z-index: -1;
top: 7px;
right: -18px;
width: 30px;
height: 30px;
background: #fff;
border-bottom-left-radius: 40px 35px;
transform: translate(0px, -20px);
}
<div class="says">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ratione aut facere cupiditate, sunt, nisi fugiat consectetur officiis veniam!</div>
基本上我使用了:before
和:after
伪class并应用了border-radius
。然后相互重叠,达到想要的效果。现在你可以看到,我在 :after
上使用 background: #fff
,因为当前 parent 的背景是白色的。这将在我的应用程序中遍历许多具有不同 bg 颜色的不同 div。这就是我现在遇到的问题。
示例-
我可以在 :after
上不使用背景 属性 来获得相同的 "speech-bubble" 尾巴吗?
^ 这一行说明它不是链接问题的重复。
或者通过任何其他完全不同的方式?
正如webtiki所说,你可以得到这个结果改编我之前的答案(尽管可能有点困难)
.container {
width:300px;
margin:5px;
}
.test
{
position: relative;
width: 300px;
height: 150px;
padding: 0px;
background: pink;
border-radius: 6px;
}
.test:after {
content: '';
top: 1px;
right: -29px;
position: absolute;
border: 0px solid;
display: block;
width: 38px;
height: 26px;
background-color: transparent;
border-bottom-left-radius: 50%;
border-bottom-right-radius: 50%;
box-shadow: -21px 9px 0px 8px pink;
}
<div class="container">
<div class="test"></div>
</div>
<img src="http://i.stack.imgur.com/MYlKY.png" alt="enter image description here">
我正在用 CSS 创建一个对话泡泡,我已经走到这一步了。
.says{
width: 200px;
padding: 20px;
margin-right: 20px;
background: #BF7EF2;
color: #fff;
box-shadow: -3px 3px 5px #C1B9C8;
position: relative;
border-radius: 5px;
}
.says:before{
content: "";
position: absolute;
z-index: -1;
top: 14px;
right: -18px;
height: 20px;
border-right: 20px solid #BF7EF2;
border-bottom-right-radius: 25px 20px;
transform: translate(0, -4px);
box-shadow: -3px 3px 5px #C1B9C8;
}
.says:after{
content: "";
position: absolute;
z-index: -1;
top: 7px;
right: -18px;
width: 30px;
height: 30px;
background: #fff;
border-bottom-left-radius: 40px 35px;
transform: translate(0px, -20px);
}
<div class="says">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ratione aut facere cupiditate, sunt, nisi fugiat consectetur officiis veniam!</div>
基本上我使用了:before
和:after
伪class并应用了border-radius
。然后相互重叠,达到想要的效果。现在你可以看到,我在 :after
上使用 background: #fff
,因为当前 parent 的背景是白色的。这将在我的应用程序中遍历许多具有不同 bg 颜色的不同 div。这就是我现在遇到的问题。
示例-
我可以在 :after
上不使用背景 属性 来获得相同的 "speech-bubble" 尾巴吗?
^ 这一行说明它不是链接问题的重复。
或者通过任何其他完全不同的方式?
正如webtiki所说,你可以得到这个结果改编我之前的答案(尽管可能有点困难)
.container {
width:300px;
margin:5px;
}
.test
{
position: relative;
width: 300px;
height: 150px;
padding: 0px;
background: pink;
border-radius: 6px;
}
.test:after {
content: '';
top: 1px;
right: -29px;
position: absolute;
border: 0px solid;
display: block;
width: 38px;
height: 26px;
background-color: transparent;
border-bottom-left-radius: 50%;
border-bottom-right-radius: 50%;
box-shadow: -21px 9px 0px 8px pink;
}
<div class="container">
<div class="test"></div>
</div>
<img src="http://i.stack.imgur.com/MYlKY.png" alt="enter image description here">