css绘制三角形原理-border

三角形例子

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

.triangle {
    width: 0;
    height: 0;
    border: 40px solid;
    border-color: transparent transparent red;
    position: relative;
}

效果展示如下:


三角形

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

实现原理

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

.t2 {
  width: 50px;
  height: 50px;
  border: 2px solid orange;
}
普通border

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

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

.t2 {
  width: 100px;
  height: 100px;
  border: 40px solid;
  border-color: orange blue red green;
}

效果图:


不同颜色的border

我们可以看到明显的四条边不是长方形,而是梯形,很像相框的四条边。
梯形的底是div对应的height或者width,梯形的高是对应border的宽度,梯形的顶边长度取决于div的内部空间。
我们进一步把div的高宽都改为0,梯形的顶边宽度变成了0,则可以得到对应的三角形了。

.t2 {
  width: 0;
  height: 0;
  border: 40px solid;
  border-color: orange blue red green;
}

效果图:

高度为0的四条边不同色

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

.t2 {
  width: 0;
  height: 0;
  border: 40px solid;
  border-color: orange transparent transparent;
}

效果图:


只保留top-border

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

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

.t2 {
  width: 0;
  height: 0;
  border-width: 40px 40px 0;
  border-style: solid;
  border-color: orange transparent transparent;
}

转载自 CSS绘制三角形—border法。有修改

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

推荐阅读更多精彩内容