简单介绍

三角形、箭头在页面菜单、导航、甚至进度条上使用的非常多。
今天在这里给出几种用css3做出来的样式

原理

元素的border属性,两端拐角其实是梯形连接,当元素的高与宽相等时可以明显看到四个梯形,当元素的高与宽相等且为0是,就形开了四个三角形,当设置其中一边与其它三条边不同颜色时(其它三边一般设置为透明或者同背景然),就可以看到一个三角形



代码分别为:

1
2
3
梯形:border: 20px solid blue;border-left-color: #f00; width: 20px;height: 20px;
三角形:border: 20px solid blue;border-left-color: #f00; width: 0px;height: 0px;
三角:border: 20px solid transparent;border-left-color: #f00; width: 0px;height: 0px;

可以看到,只要修改border-@-color,就可以得到一个对应方向的三角,@ 可以为top,left,right,bottom

任意的三角

通过上面的方法可以得到一个对应方向的三角,但是可以看到三角的顶角都是90度,那么只要改变三角形的三边就可以改变角度了,在这里只需要修改对应边的长度,如下:


代码分别为:
1
border: 20px solid transparent;border-left:80px solid #f00; width: 0px;height: 0px;

可以看到,只要修改border-@,对应的宽度,就可以得到一个对应方向的三角,@ 可以为top,left,right,bottom

使用css伪类三角

通过 :after 伪类来实现,点击此处演示,实现如下:

1
2
3
4
5
6
7
8
9
10
11
.left-ang{
position: relative;
}
.left-ang:after {
border: 10px solid transparent;
border-left: 10px solid #f00;
width: 0;
height: 0;
position: absolute;
content: ' '
}

也可以达到相同的效果。

实现箭头

方法也是通过伪类:after 不过要配合:before来实现,原理就是将:after与:before形成的三角形使用margin进行平移不同的数值。点击此处演示,实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.left_ang{
position: relative;
}
.left_ang:after, .left_ang:before {
border: 10px solid transparent;
border-left: 10px solid #fff;
width: 0;
height: 0;
position: absolute;
top: 0;
right: -20px;
content: ' '
}
.left_ang:before {
border-left-color: #f00;
right: -21px;
}

可以看出,将:after和:before先均向右移动20px,然后把:before重新设置成移动21px,这样就形成了1px的差值。

实际应用

1、进度条
2、仿对话框

注意事项

由于IE8上不支持rgba,所以如果要兼容到IE8,那么颜色值不能设置成rgba。

本文地址: http://wsdever.github.io/2017/02/15/css-angel/