您的位置:首页 > Web前端 > CSS

CSS绘制三角形

2015-08-31 10:10 381 查看
无论在网页,还是在各种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;
}




当一个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;
}




可以看到,当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;
}


效果为:



border变成了三角形。

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

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




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

三、到此为止了吗?

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

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;
}




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;
}




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




四、实际应用

三角最好的出场位置,是在为元素上( :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