我们知道,一般网页中的箭头大多是图片图标,字体图标流行以后也有很多改用字体图标。而实际上用CSS即可绘制出各种箭头,无需裁剪图片,甚至没有用到CSS3,所以浏览器兼容性良好。
基本原理
原理非常简单,通过截取border(边框)的部分“拐角”实现,几行CSS代码即可搞定。
绘制梯形
当元素宽、高和边框的宽相近(等)时,改变某一边的颜色可以看到一个梯形,不理解?我们来看实例:
<div id="demo11"></div> <style> #demo11 { border: 10px solid #000; border-left-color: #f00; width: 10px; height: 10px; } </style>
绘制三角形
实例宽高均为10像素,当元素宽、高为0,且其他边为透明或与背景颜色相同时,就可以形一个三角形,至此小箭头已成,来看实例:
<div id="demo12"></div> <style> #demo12 { border: 10px solid transparent; border-left-color: #f00; width: 0; height: 0; } </style>
改变各个边的宽度,即通过调整“边框”厚度则可以配置出任意角度,调整显示哪一条边框则可以决定箭头方向:
<div id="demo14"></div> <style> #demo14 { border: 10px solid transparent; border-right: 20px solid #f00; width: 0; height: 0; } </style>
如果不想改变原有的DOM结构和增加新的标签,三角形还可以通过伪元素绘制出:
<span id="demo15">原本内容</span> <style> #demo15{ position: relative; } #demo15:after { border: 10px solid transparent; border-left: 10px solid #f00; width: 0; height: 0; position: absolute; content: ' ' } </style>
既然用到了伪元素,那么我们就可以通过伪元素绘制出2个三角形,其中一个与背景色相同错开1个像素覆盖有颜色部分箭头,即可形成三角线,下面来看三角线分割的Tab页实例:
<ul id="demo17"> <li>文字内容 Tab1</li> <li>文字内容 Tab2</li> <li>文字内容 Tab3</li> </ul> <style> #demo17{ font-size: 10px; height: 24px; } #demo17 li { float: left; position: relative; list-style: none; margin: 0 20px 12px -19px; border-top: solid 1px #ddd; border-bottom: solid 1px #ddd; padding-left: 12px; } #demo17 li:after, #demo17 li:before { border: 10px solid transparent; border-left: 10px solid #fff; width: 0; height: 0; position: absolute; top: 0; right: -18px; content: ' ' } #demo17 li:before { border-left-color: #ddd; right: -19px; } </style>
最后再介绍一种组合效果,模仿聊天对话框,使用三角形跟矩形组合成提示框:
<div id="demo"></div> <style> #demo { width: 100px; height: 100px; background-color: #ccc; position: relative; border: 4px solid #333; } #demo:after, #demo:before { border: solid transparent; content: ' '; height: 0; left: 100%; position: absolute; width: 0; } #demo:after { border-width: 9px; border-left-color: #ccc; top: 15px; } #demo:before { border-width: 14px; border-left-color: #333; top: 10px; } </style>