使用CSS绘制三角形
2016-03-31 13:41
633 查看
今天有个同学询问了我关于使用CSS制作三角形的问题,我也没有怎么想考虑,直接给了源码。然后她询问了一系列的问题,我才意识到,这类代码网上一般都有,缺的是制作的原理,于是就有了编写博客的想法。
下面我们先来看一下效果:
![](https://img-blog.csdn.net/20160331134600502?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
接下来我们看一下源代码:
下面我们来分析绘制三角形的原理:
首先我们知道css是采用盒子模型:所谓盒子模型,就是元素的内容(content)外层包裹补丁(padding),边框(border),再加上一层边距(margin)。你可以想象成有一个纸盒子,里面存放的东西就是元素的内容(content),而盒子的纸板就是边框(border),补丁(padding)就是纸板和东西之间的空隙,如果有多个盒子,那么盒子与盒子之间的空隙就是margin。当然,css的盒子模型并不是那么简单,有兴趣的读者可以查询的其他资料。
话归正题,我们来解释三角形的绘制原理:
当一个div的外层包裹了一层border,我们不妨将它的border宽度设置为一个极大的数,如110px(虽然我们平时并不经常这样做),并且把它上下左右边框设置为不同的颜色,另外我们将div的宽高设置成一个较小的数,如50px,见下面代码:
现在我们再来看效果:
![](https://img-blog.csdn.net/20160331141513888?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
同时,我们发现,border-right的绘制范围,图中梯形abcd的部分。其中ab是border最外围的顶点,cd是content以及padding(图中padding为0)组成的矩形的顶点。事实上,border也是这样绘制的。
我们可以想象,随着div的高度不断减小,cd的长度也将不断减少,当div的高度变为0时,这时,cd也成了一个点,这时border-right成了一个三角形,如下图所示:
![](https://img-blog.csdn.net/20160331142437158?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
如果,div此时的width也变为0px,我们可以想象,这个div将会变成一个由4个三角形组成的矩形。这个时候,如果我们把border-top以及border-bottom,border-letf颜色设置为透明,将会看到什么?不错,一个向左朝向的三角形,至此,我们绘制三角形的原理讲完。
下面是利用border的每一边绘制绘制范围的原理,绘制一些其他的图形。
![](https://img-blog.csdn.net/20160331145606935?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
最后,由于这是本人第一次写博客,经验有限,而且本人网页知识有限,理解不深,如果有错误,请不吝赐教。谢谢
下面我们先来看一下效果:
接下来我们看一下源代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <style> div{ width: 0; height: 0; border-left: 110px solid red; border-right: 110px solid yellow; border-top: 110px solid black; border-bottom: 110px solid black; display: inline-block; } .triangle{ border-right: 0; border-top: 110px solid transparent; border-bottom: 110px solid transparent; } </style> <body> <div></div> <div class="triangle"></div> </body> </html>
下面我们来分析绘制三角形的原理:
首先我们知道css是采用盒子模型:所谓盒子模型,就是元素的内容(content)外层包裹补丁(padding),边框(border),再加上一层边距(margin)。你可以想象成有一个纸盒子,里面存放的东西就是元素的内容(content),而盒子的纸板就是边框(border),补丁(padding)就是纸板和东西之间的空隙,如果有多个盒子,那么盒子与盒子之间的空隙就是margin。当然,css的盒子模型并不是那么简单,有兴趣的读者可以查询的其他资料。
话归正题,我们来解释三角形的绘制原理:
当一个div的外层包裹了一层border,我们不妨将它的border宽度设置为一个极大的数,如110px(虽然我们平时并不经常这样做),并且把它上下左右边框设置为不同的颜色,另外我们将div的宽高设置成一个较小的数,如50px,见下面代码:
div{ width: 50px; height: 50px; border-left: 110px solid red; border-right: 110px solid yellow; border-top: 110px solid black; border-bottom: 110px solid black; display: inline-block; }
现在我们再来看效果:
同时,我们发现,border-right的绘制范围,图中梯形abcd的部分。其中ab是border最外围的顶点,cd是content以及padding(图中padding为0)组成的矩形的顶点。事实上,border也是这样绘制的。
我们可以想象,随着div的高度不断减小,cd的长度也将不断减少,当div的高度变为0时,这时,cd也成了一个点,这时border-right成了一个三角形,如下图所示:
如果,div此时的width也变为0px,我们可以想象,这个div将会变成一个由4个三角形组成的矩形。这个时候,如果我们把border-top以及border-bottom,border-letf颜色设置为透明,将会看到什么?不错,一个向左朝向的三角形,至此,我们绘制三角形的原理讲完。
下面是利用border的每一边绘制绘制范围的原理,绘制一些其他的图形。
.arc{ width: 0px; height:0px; border-left: 110px solid yellow; border-right: 0; border-top: 110px solid transparent; border-bottom: 110px solid transparent; display: inline-block; border-radius: 50% } .trapezoid{ width: 0px; height:50px; border-left: 110px solid yellow; border-right: 0; border-top: 110px solid transparent; border-bottom: 110px solid transparent; display: inline-block; } .circle { width: 50px; height: 50px; border-left: 110px solid yellow; border-right: 110px solid yellow; border-top: 110px solid red; border-bottom: 110px solid black; display: inline-block; border-radius: 50%; } .ellipse{ width: 0px; height:50px; border-left: 110px solid yellow; border-right: 110px solid yellow; border-top: 110px solid yellow; border-bottom: 110px solid yellow; display: inline-block; border-radius: 50% } .label{ width: 0px; height:50px; border-left: 20px solid #f67a81; border-right: 20px solid #f67a81; border-top: 20px solid #f67a81; border-bottom: 20px solid transparent; display: inline-block; }图形:
最后,由于这是本人第一次写博客,经验有限,而且本人网页知识有限,理解不深,如果有错误,请不吝赐教。谢谢
相关文章推荐
- Web布局连载——两栏固定布局(五)
- [div+css]晒晒最新制作专题推广页模板
- 盒子模型
- CSS选择器
- CSS样式优先权
- [css] line-height 百分比单位和数值单位的区别
- Apple官网研究之使用Justify布局导航
- 设计更快的网页(三):字体和 CSS 调整
- 纯CSS制作的新闻网站中的文章列表
- 10条影响CSS渲染速度的写法与使用建议第1/3页
- 二级域名原理以及程序
- BS项目中的CSS架构_仅加载自己需要的CSS
- 很不错的 CSS Hack 又学了一招
- 发一个css比较清爽的写法
- CSS expression控制图片自动缩放效果代码[兼容 IE,Firefox]
- css布局网页水平居中常用方法
- CSS经典技巧十则第1/2页
- css 兼容性问题this.style.cursor=''hand''
- IE6不能正常解析CSS文件问题的解决方法及原因分析
- 欲练CSS ,必先解决IE的一些细节分析