使用CSS border绘制箭头
2016-04-29 15:39
573 查看
在日常开发的过程中,一些小图标,例如小箭头,都是比较常用的,最近看到了一个用CSS绘制小箭头的方法,但是对其实现原理不是很清楚,于是就探究了一下:
先贴一下绘制箭头的代码:
HTML:
CSS:
其中可以通过border-width来控制箭头的大小,定义除了需要显示的一边border-style为solid其他都为dashed,这是为了使IE支持透明的边框(默默吐槽IE,称霸一时就跳的不行,问题一大堆)。
原理是因为IE中dotted与dashed显示都与容器的高宽(也就是边框的长度)有关,如果长度不够,dotted与dashed都不会显示(见下图),也就模拟了透明的效果,其中dotted要求长度是边框宽度的三倍以上,而dashed要求是边框宽度的五倍以上,所以我们选择范围更大的dashed来保证透明效果,这也是为什么要设置容器width:0 height:0的原因。
但为什么直的边框竟然可以模拟三角形呢?我们设置一下容器的宽高来看看当边框“特别宽”的时候是什么样子的:
只是当边框相对与容器特别小的时候我们才看起来是四条直线组成了边框,这也就是当容器宽高为0会呈现出三角形的原因。
有关dotted dashed区别的问题可以移步http://it.chinawin.net/application/article-180df.html,讲解的非常详细。
先贴一下绘制箭头的代码:
HTML:
<div class="container"> CSS模拟箭头: <div class="css-arrow"> <div class="arrow"></div><br> <div class="arrow-top"></div> <div class="arrow-right"></div> <div class="arrow-left"></div> <div class="arrow-bottom"></div> </div> </div>
CSS:
.arrow{ width: 0; height: 0; border-width: 20px; border-color: red #ddd red #ddd; border-style: solid; } .arrow-top{ width: 0; height: 0; border-width: 20px; border-color: red transparent transparent transparent; border-style: solid dashed dashed dashed; } .arrow-right{ width: 0; height: 0; border-width: 20px; border-color: transparent #ddd transparent transparent; border-style: dashed solid dashed dashed; } .arrow-bottom{ width: 0; height: 0; border-width: 20px; border-color: transparent transparent red transparent; border-style: dashed dashed solid dashed; } .arrow-left{ width: 0; height: 0; border-width: 20px; border-color: transparent transparent transparent #ddd; border-style: dashed dashed dashed solid; }效果:
其中可以通过border-width来控制箭头的大小,定义除了需要显示的一边border-style为solid其他都为dashed,这是为了使IE支持透明的边框(默默吐槽IE,称霸一时就跳的不行,问题一大堆)。
原理是因为IE中dotted与dashed显示都与容器的高宽(也就是边框的长度)有关,如果长度不够,dotted与dashed都不会显示(见下图),也就模拟了透明的效果,其中dotted要求长度是边框宽度的三倍以上,而dashed要求是边框宽度的五倍以上,所以我们选择范围更大的dashed来保证透明效果,这也是为什么要设置容器width:0 height:0的原因。
但为什么直的边框竟然可以模拟三角形呢?我们设置一下容器的宽高来看看当边框“特别宽”的时候是什么样子的:
只是当边框相对与容器特别小的时候我们才看起来是四条直线组成了边框,这也就是当容器宽高为0会呈现出三角形的原因。
有关dotted dashed区别的问题可以移步http://it.chinawin.net/application/article-180df.html,讲解的非常详细。
相关文章推荐
- 子元素使用float后使父元素有高度的方法
- tableView plain样式和group样式区别
- CSS3-01 简介
- CSS3 块级元素,文本溢出操作 -webkit-line-clamp
- css3 box-orient box-pack box-align
- CSS多列布局
- CSS垂直居中精华总结
- CSS-标准盒模型 & 怪异盒模型
- css sprites 图片精灵自动生成 插件
- CSS实现镂空遮罩引导层
- CSS3基础第三篇(布局相关,媒体查询,用户界面)
- CSS的margin塌陷(collapse)
- CSS颜色
- css img标签高度等于宽度.
- css类与伪类 .class:link{}
- 你们有关注过HTML标签的默认样式和浏览器默认样式吗?
- 160427、CSS3实战笔记--多列布局
- css3标签学习总结文章
- 如何创建 CSS
- CSS 属性选择器