利用CSS border实现三角形图标效果及原理解释

在日常开发中,经常会用到各种形状的三角形,我们可以通过图标来实现自己先要的效果,但如何用样式快速写出一个适合自己的三角形呢,如果你不太明白请看接下例子。

div{
    width: 0px;
    height: 0px;
    border:100px solid transparent;
}
.demo1{
    border-right: 100px solid red;
}
.demo2{
    border-left: 100px solid red;
}
.demo3{
    border-top: 100px solid red;
}
.demo4{
    border-bottom: 100px solid red;
}

<div class="demo1"></div>
<div class="demo2"></div>
<div class="demo3"></div>
<div class="demo4"></div>

结果如下:



这样简单的4个不同方位的三角形就做好了,其实实现三角形很简单,为了更直观的看到三角形实现原理我们来看接下来的例子。

.demo5{
    width: 0px;
    height: 0px;
    border-right: 20px solid red;
    border-left: 20px solid yellow;
    border-top: 20px solid blue;
    border-bottom: 20px solid pink;
}
<div class="demo5"></div>

结果如下


从图上我们可以清晰的看出,当我们给DOM元素设置宽高为0的时候,此时设置边框,上、下、左、右、将以上图右中圆心散开往外扩展(圆心标点是方便观察点的,真实是不存在的),最终形成一个由四个相同三角形组成的,宽度是border宽度2倍的正方向,每一个三角形正是我们设置的不同方位的border边框。看到这里其实我们想要的三角形效果已经完后,但是还不够完美,细心的小伙伴可能会有疑问。为什么我设置的宽度是20px,但是却生成了一个宽度为40的正方形?那我们就再看一下图例:
图100px;

.demo6{
    width: 200px;
    height:200px;
    border-right:100px solid red;
    border-left: 100px solid yellow;
    border-top: 100px solid blue;
    border-bottom:100px solid pink;
}
.demo7{
    width: 200px;
    height:200px;
    border-right:50px solid red;
    border-left: 50px solid yellow;
    border-top: 50px solid blue;
    border-bottom:50px solid pink;
}
.demo8{
    width: 200px;
    height:200px;
    border-right:1px solid red;
    border-left: 1px solid yellow;
    border-top: 1px solid blue;
    border-bottom:1px solid pink;
}
<div class="demo6"></div>
<div class="demo7"></div>
<div class="demo8"></div>
结果
图解

上图中我们给div设置了宽高,当此的变宽分别变成了一个梯形,在border宽度逐渐缩小的过程中,边框逐渐趋于直线,直到小到肉眼看不清相邻边框拼接处的结合,就成了我们眼中所谓的直线。
反过来亦是如此,让我们的边框设置的很宽的时候,相邻边框相交部位将按照对角线分别形成两个三角形,填充变宽(不然相交处出现空白,4个边框分别外延也就没有边框的意义了),
这也就是为什么我们生成的正方向的宽度是边框2倍的原因。

提到上面一点还想就是提醒小伙伴们,在平时用css绘制三角形的时候,为了避免多占空间,我们可以省去对边边框的设置。

.demo9{
    border-right:100px solid red;
    border-left: 100px solid yellow;
    border-top: 100px solid blue;
}

<div class="demo9"></div>

上图例子图像设置除了没有设置下边框,其余的和demo5均相同,我们可看到,箭头依然完好无损,但图标实际占用空间却节省了一半,所有在平时开发中我们要注意这个隐藏的小坑

好啦,利用css绘制三角形就说到这里,相信小伙伴们早就一目了然,只要把其中的一条边框的color设置成固定颜色,其他边框color设置透明,就可以画出自己心仪的三角形了。通过设置宽度的不同,还可以画出其他不一样的效果哦,是不是很简单,赶紧动手试试吧!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。