前端开发的时候,悬停弹出层经常会有小箭头。分享两种常见箭头实现方式。
1. 用边框做类似
.arrow1 { width: 0; height: 0; overflow: hidden; zoom: 1; border: 8px solid transparent; border-top-color: #FFF; }
将元素大小设为0,将边框色设为透明只设置其中一个边的颜色,即可实现一个三角形。
2. 用css旋转正方式,用来画有边框的三角形
.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旋转滤镜参数。
附实例代码:
<!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>