前端开发的时候,悬停弹出层经常会有小箭头。分享两种常见箭头实现方式。

1.用边框做类似

1
2
3
4
5
6
7
8
.arrow1 {
width: 0;
height: 0;
overflow: hidden;
zoom: 1;
border: 8px solid transparent;
border-top-color: #FFF;
}

将元素大小设为0,将边框色设为透明只设置其中一个边的颜色,即可实现一个三角形。

2.用css旋转正方式,用来画有边框的三角形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.arrow2 {
width: 10px;
height: 10px;
overflow:hidden;
zoom: 1;
position: absolute;
border-right: 1px solid #AAA;
border-bottom: 1px solid #AAA;
transform: rotate(45deg);
-o-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-webkit-transform: rotate(45deg);
background-color: #FFF;
}

通过css3旋转正方形,ie下可通过滤镜实现。需要注意的是如果当前系统安装的是ie9或ie10,通过模拟ie8来调试是看不到转滤镜的。

一个实例效果:

http://www.useragentman.com/IETransformsTranslator/ 一个在线转换的网址,用来生成IE旋转滤镜参数。

附实例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<!DOCTYPE html>
<html><!--[if lte IE 8]><html class="ie ltie9"><![endif]--><!--[if gte IE 9]><html class="ie ie9"><![endif]-->
<head>
<meta charset="UTF-8">
<title>css三角形</title>
<style>
.box1, .box2 {
width: 200px;
height: 200px;
padding: 20px;
float:left;
margin-right: 5px;
background-color: #a4edae;
position: relative;
}
.square1 {
background-color: #FFF;
width: 120px;
height: 60px;
display: block;
}
.arrow1 {
width: 0;
height: 0;
overflow: hidden;
zoom: 1;
border: 8px solid transparent;
_border-color:tomato;
_filter:chroma(color=tomato);
border-top-color: #FFF;
vertical-align: -7px;
*vertical-align: 0;
margin-left: 10px;
}
.square2 {
background-color: #FFF;
border: 1px solid #AAA;
width: 120px;
height: 60px;
position: absolute;
top: 20px;
left: 20px;
}
.arrow2 { width: 10px; height: 10px; overflow:hidden; zoom: 1; position: absolute; top: 76px; left: 40px; border-right: 1px solid #AAA; border-bottom: 1px solid #AAA; transform: rotate(45deg); -o-transform: rotate(45deg); -moz-transform: rotate(45deg); -webkit-transform: rotate(45deg); background-color: #FFF; }
.ltie9 .arrow2 { transform: rotate(0deg); top: 75px; filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.7071067811865474, M12=-0.7071067811865477, M21=0.7071067811865477, M22=0.7071067811865474, SizingMethod='auto expand'); }
</style>
</head>
<body>
<div class="box1">
<div class="square1"></div><i class="arrow1"></i>
</div>
<div class="box2">
<div class="square2"></div><i class="arrow2"></i>
</div>
</body>
</html>