CSS绘制三角形

时间:2022-01-22 04:44:23

无论在网页,还是在各种app里,小三角都十分常见。比如微信、qq聊天气泡两端的小三角,还是提醒框边上的箭头三角等等。

Html5中添加了canvas元素,功能强大,可以绘制各式图形。不过有些时候,这种装饰形的小三角,用CSS绘制起来,会更加方便。

一、原理:border的真面目。

CSS中的border属性,大家对它不能再熟悉更多,但是它真正的形状是什么呢?
是一条有宽度的直线?一个长矩形?

实践出真知,show you the code。

  <div></div>

上面是html。
下面是css。

   div{
        height: 100px;
        width: 100px;
        background-color: #3366cc;
        border-top:20px solid #444;
    }

CSS绘制三角形

当一个border没有相邻的边框时,它是一个矩形。

下面稍微更改一些css样式。

div{
        width:100px;
        height: 100px;
        border-top: 80px solid #444;
        border-bottom: 80px solid #666;
        border-left: 80px solid #888;
        border-right: 80px solid #aaa;
}

CSS绘制三角形

可以看到,当border有相邻时,它并不是一个矩形。此时为一个矩形。
1. 下底:div外边框的边长
2. 上底:div内容的边长。
3. 高:border的宽度。

也就是说,border会受到来自邻居边框的挤压。

二、画三角。

当上底为0的时候,也就是内容的边长为0时,border就变成了一个三角形。

------
<div></div>
------
div{
        width:0px;
        height:0px;
        border-top: 80px solid #444;
        border-bottom: 80px solid #666;
        border-left: 80px solid #888;
        border-right: 80px solid #aaa;
} 

效果为:
CSS绘制三角形

border变成了三角形。
距离答案已经很近了。我们只需要把其他三个边框的颜色继承父元素,视野中就会出现一个三角形。

   div{
        width:0px;
        height:0px;
        border-top: 80px solid transparent;
        border-bottom: 80px solid transparent;
        border-left: 80px solid #3366cc;
    }

CSS绘制三角形

注意:只需要设置三个边框:主边框(让我们这么称呼他),需要将其挤压的两个相邻边框。想要哪个方向的三角形,改变方向就可以了。

三、到此为止了吗?

这个是非常灵活的,我们可以通过控制主边框,以及挤压边框的宽度,来任意控制三角形的形状。

    div{
        width:0px;
        height:0px;
        border-top: 80px solid transparent;
        border-bottom: 80px solid #3366cc;
        border-left: 80px solid #3366cc;
        border-right: 80px solid transparent;
    }

CSS绘制三角形

   div{
       width:0px;
        height:0px;
        border-top: 50px solid transparent;
        border-bottom:50px solid #3366cc;
        border-left:100px solid #3366cc;
        border-right: 100px solid transparent;
    }

CSS绘制三角形

    div{
        width:0px;
        height:0px;
        border-top: 50px solid transparent;
        border-bottom:50px solid transparent;
        border-left:100px solid #3366cc;
    }

CSS绘制三角形

四、实际应用

三角最好的出场位置,是在为元素上( :after,:before),便于定位,灵活方便。
一个绘画气泡做例子吧。

    div{
        position: relative;
        width:200px;
        height:50px;
        border-radius:3px ;
        background-color: #3366cc;
    }

    div:before{
        position: absolute;
        right: -14px;
        top: 3px;
        content:"";
        border-left: 7px solid #3366cc;
        border-right: 7px solid transparent;
        border-top: 5px solid #3366cc;
        border-bottom:5px solid transparent;
    }

CSS绘制三角形