友好提示框的主要实现难点就是哪个尖角的问题,其实只要搞清楚三角形的实现原理,实现这种效果也并不难,下面介绍两种实现方法,一种是通过边框实现的三角形通过叠加实现,另一种是通过正方形旋转实现
首先我们讲述一下如何通过边框实现三角形,首先现创建一个div元素,设置宽高为0。
.tri{
width:0px;
height:0px;
}
<div class="tri"></div>
把宽高设置为0,那还怎么构成三角形呢?回看我们的目的-利用边框即border构建三角形,我们添加样式:
.tri {
width: 0px;
height: 0px;
border-right: 20px solid red;
border-left: 20px solid red;
border-top: 20px solid black;
border-bottom: 20px solid black;
}
从结果可以看出每个边框是构成一个三角形的,这些三角形都是组合在一起的,怎么拆开呢?其实很简单,只要把其余的边框设置为透明即transparent,修改样式,我们只留下底边框的颜色,其余设置为透明。
.tri {
width: 0px;
height: 0px;
border-right: 50px solid transparent;
border-left: 50px solid transparent;
border-top: 50px solid transparent;
border-bottom: 50px solid black;
}
结果达到了目的,但是时候我们用到的并不是等腰直角三角形,而是变形的其他三角形,这时候我们就要想到,什么在决定边框三角形的—边框宽度,修改样式,这个样式实现普通直角三角形。
.tri{
width:0px;
height:0px;
border-right: 100px solid red;
border-left: 0px solid black;
border-top: 50px solid transparent;
border-bottom: 0px solid black;
}
修改样式,实现不规则三角形
.tri{
width:0px;
height:0px;
border-bottom: 100px solid red;
border-left: 200px solid transparent;
border-right: 50px solid transparent;
border-top: 50px solid transparent;
}
其实总结一下就是根据所需要的三角形的水平边所对的顶点的位置,调整相应的边框的宽度。也许有人会问,没有水平边怎么办?2D旋转可以很好的解决你的问题。
接下来进入正题,如何实现友好提示框呢?正如我们前面所说,实现难点是尖角的问题,我们先来观察一下尖角如何实现。现构建两个div
<div class="up"></div>
<div class="down"></div>
现在我们把下面那个三角形设置为白色,通过定位移动down,修改样式
.up {
width: 0px;
height: 0px;
border-bottom: 20px solid black;
border-left: 20px solid transparent;
border-right: 20px solid transparent;
border-top: 20px solid transparent;
}
.down {
position: relative;
bottom: 38px;
width: 0px;
height: 0px;
border-bottom: 20px solid #fff;
;
border-left: 20px solid transparent;
border-right: 20px solid transparent;
border-top: 20px solid transparent;
}
从结果可以看出,下面的白色三角形把上面的黑色三角形覆盖了部分,从而实现了圆角的效果,接下来把其与一个div框拼接就形成了友好提示框
.simple-tip-box{
position: relative;
margin-top: 100px;
width: 100px;
border: 1px solid #cccccc;
background:transparent;
}
.simple-tip-box a{
display: block;
text-align: center;
}
.up,down{
position: absolute;
left: 20px;
width:0px;
height:0px;
}
.up{
top:-19px;
border-bottom: 10px solid black;
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-top: 10px solid transparent;
}
.down{
top: -18px;
border-bottom: 10px solid #fff;;
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-top: 10px solid transparent;
}
<div class="simple-tip-box">
<div class="up"></div>
<div class="down"></div>
<a>我的任务</a>
<a>我的百科</a>
<a>我的词条</a>
<a>账号设置</a>
<a>退出</a>
<div class="clearfix"></div>
友好提示框就完成了,颜色有点不太和谐,纯属练习使用。在实际实现时其实可以不用构建两个创建三角形的div,::before,::after是很好的选择,其实就是把.up 和.down改成simpe-tip-box::before和simpe-tip-box::after,这里就不额外示范了。
接下来简要讲述一下怎么利用矩形实现友好提示框,主要讲述如何实现尖角,因为实现了尖角之后就是定位了,跟第一种方法是一样的。我们先构建一个div.
.sq-tri {
border: 2px solid black;
width: 20px;
height: 20px;
}
<div class="sq-tri"></div>
结果是一个正方形,那我们怎么得到尖角呢?显然去掉任意两条相邻边就行,这有用到前面讲到的方法–设置透明即transparent,修改样式
.sq-tri {
border: 2px solid black;
width: 30px;
height: 30px;
border-left-color: transparent;
border-bottom-color: transparent;
}
尖角雏形已经实现出来,但是好像跟我们的预期不一样,我们需要的尖角的顶点向上的,那怎么把顶点方向调整为向上?2D旋转很好的能解决这个问题。根据数学知识可知,逆时针旋转45°可以实现该效果,修改样式
.sq-tri {
border: 2px solid black;
width: 30px;
height: 30px;
border-left-color: transparent;
border-bottom-color: transparent;
transform: rotate(-45deg);
}
我们想要的尖角已经实现出来,接下来的定位跟第一种实现的方法一样,这里就不一一赘述了。跟前面一样,这种方法也不需要额外构建div元素,可以利用::before元素。
欢迎大家访问笔者的github:https://github.com/delin10/web-里面有一些笔者模仿制作的网页。笔者能力有限,如有纰漏还望指正。
转载自原文链接, 如需删除请联系管理员。
原文链接:HTML实现友好提示框(带尖角的框),转载请注明来源!