css绘制三角形原理-border

html-css06

css绘制三角形原理-border,第1张

在css中可以使用border实现一个三角形,举个例子:

效果展示如下:

那么为什么将border的三个边设置为transparent透明以后能生产一个三角形呢?接下来我们一步步解析。

我们来看一个平时使用的border例子:

这是我们平常使用border最普遍的情况——往往只给border一个较小的宽度(通常为1-2px);然而这样的日常用法就会容易让大家对border的形成方式产生误解,即认为元素的border是由四个矩形边框拼接而成。

然而事实并不是这样。实际上,元素的border是由三角形(准确说也是等边梯形)组合而成,为了说明这个问题,我们可以增大border的宽度,并为各border边设置不同的颜色:

效果图:

我们可以看到明显的四条边不是长方形,而是梯形,很像相框的四条边。

梯形的底是div对应的height或者width,梯形的高是对应border的宽度,梯形的顶边长度取决于div的内部空间。

我们进一步把div的高宽都改为0,梯形的顶边宽度变成了0,则可以得到对应的三角形了。

效果图:

此时元素由上下左右4个三角形“拼接”而成;那么,为了实现最终的效果,即保留最s上方的三角形,还应该怎么做?很简单,我们只需要把其它border边的颜色设置为白色或透明色:

效果图:

最终的简单三角形就绘制出来了。同理,如果想要得到其它边上的三角形,只需要将剩余的border边颜色设置为白色或透明色即可。

不过,被“隐藏”的上border仍然占据着空间,要想使得绘制出的三角形尺寸最小化,还需要将上border的宽度设置为0(其它情况同理):

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

结果如下:

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

结果如下

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

图100px

上图中我们给div设置了宽高,当此的变宽分别变成了一个梯形,在border宽度逐渐缩小的过程中,边框逐渐趋于直线,直到小到肉眼看不清相邻边框拼接处的结合,就成了我们眼中所谓的直线。

反过来亦是如此,让我们的边框设置的很宽的时候,相邻边框相交部位将按照对角线分别形成两个三角形,填充变宽(不然相交处出现空白,4个边框分别外延也就没有边框的意义了),

这也就是为什么我们生成的正方向的宽度是边框2倍的原因。

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

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

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

当div宽度为0,高度为0的时候,只设置border的大小和四边不同颜色可看到下图,只保留一边的颜色,另外三边的颜色设置为transparent可得到一个方向的三角形。因此,可延伸出设置一边的border的颜色,相邻两边的border设置为transparent可得到一个方向的三角形。

border的大小的值为三角形底边上的高,三角形的底为相邻两边的border的高的和,如下图所示的红色锐角三角形

若想实现直角三角形的效果,如下图所示直角在左上的三角形,按原理可设置上border和左border的颜色,另外两条边的颜色为transparent,此样式可简写为只设置上border的颜色,另一条相邻的右border为transparent

你也许会遇到要画个奇怪三角形的时候,只要参考锐角三角形的方式,找到三角形底边和高,计算出三角形高和把相邻两条边的高相加作为底部,你可以画出各种各样的三角形,如果再加上角度旋转的css,你便啥三角形都能画!

此类三角形解决思路通常使用两个不同颜色的三角形做颜色叠加,比如做如上图所示的边框为1px的红色边框白色底三角形,就先画一个红色三角形,再画一个尺寸少2px的白色底三角形,然后设置两个三角形的position将三角形重叠,这里使用伪元素实现

1、向上正箭头

2、向下正箭头

3、向左正箭头

4、向右正箭头

5、向左上箭头

6、向右上箭头

7、向左下箭头

8、向右下箭头