HTML5之SVG 2D入门4—笔画与填充


Posted in HTML / CSS onJanuary 30, 2013

前面我们重点都在总结各类形状,文本和图片,接下来,我们还是和讨论canvas一样,总结一下颜色处理,也就是填充和边框效果;你会发现这里的内容与canvas基本上是一致的。这些属性既可以以属性的形式写在元素中,也可以以CSS的形式保存(这是与canvas不一样的地方)。
填充色 - fill属性
这个属性使用设置的颜色填充图形内部,使用很简单,直接把颜色值赋给这个属性就可以了。看例子:

复制代码
代码如下:

<rect x="10" y="10" width="100" height="100" stroke="blue" fill="red"
fill-opacity="0.5" stroke-opacity="0.8"/>

上面例子中画了一个红色蓝边的矩形。注意几点:
1. 如果不提供fill属性,则默认会使用黑色填充,如果要取消填充,需要设置成none。
2. 可以设置填充的透明度,就是fill-opacity,值的范围是0到1。
3. 稍微复杂一点的是fill-rule属性。这个属性定义了判断点是不是属于填充范围的算法;除了inherit这个值外,还有两个取值: nonzero:这个值采用的算法是:从需要判定的点向任意方向发射线,然后计算图形与线段交点的处的走向;计算结果从0开始,每有一个交点处的线段是从左到右的,就加1;每有一个交点处的线段是从右到左的,就减1;这样计算完所有交点后,如果这个计算的结果不等于0,则该点在图形内,需要填充;如果该值等于0,则在图形外,不需要填充。看下面的示例:

HTML5之SVG 2D入门4—笔画与填充

evenodd:这个值采用的算法是:从需要判定的点向任意方向发射线,然后计算图形与线段交点的个数,个数为奇数则改点在图形内,需要填充;个数为偶数则点在图形外,不需要填充。看下图的示例:

HTML5之SVG 2D入门4—笔画与填充

边框色 - stroke属性
上面的例子中已经用到了stroke属性,这个属性使用设置的值画图形的边框,使用起来也很直接,把颜色值赋给它就可以了。注意:
1. 如果不提供stroke属性,则默认不绘制图形边框。
2. 可以设置边的透明度,就是stroke-opacity,值的范围是0到1。
实际上,边的情况比图形内部稍微复杂一点,因为边除了颜色,还有"形状"需要定义。

线的端点 - stroke-linecap属性

这个属性定义了线段端点的风格,这个属性可以使用butt,square,round三个值。看例子:

复制代码
代码如下:

<svg width="160" height="140">
<line x1="40" x2="120" y1="20" y2="20" stroke="black" stroke-width="20" stroke-linecap="butt"/>
<line x1="40" x2="120" y1="60" y2="60" stroke="black" stroke-width="20" stroke-linecap="square"/>
<line x1="40" x2="120" y1="100" y2="100" stroke="black" stroke-width="20" stroke-linecap="round"/>
</svg>

HTML5之SVG 2D入门4—笔画与填充

这段代码绘制了3条使用不同风格线端点的线,

从左面的图中我们可以很容易看出3中风格的不同。

线的连接 - stroke-linejoin属性
这个属性定义了线段连接处的风格,这个属性可以使用miter,round,bevel三个值。看例子:

复制代码
代码如下:

<svg width="160" height="280">
<polyline points="40 60 80 20 120 60" stroke="black" stroke-width="20"
stroke-linecap="butt" fill="transparent" stroke-linejoin="miter"/>

<polyline points="40 140 80 100 120 140" stroke="black" stroke-width="20"
stroke-linecap="round" fill="transparent" stroke-linejoin="round"/>

<polyline points="40 220 80 180 120 220" stroke="black" stroke-width="20"
stroke-linecap="square" fill="transparent" stroke-linejoin="bevel"/>
</svg>

HTML5之SVG 2D入门4—笔画与填充

从左面的图中我们很容易看到3中风格的不同。

线的虚实 - stroke-dasharray属性

这个属性可以设置线段采用何种虚实线。看例子:

复制代码
代码如下:

<svg width="200" height="150">
<path d="M 10 75 Q 50 10 100 75 T 190 75" stroke="black"
stroke-linecap="round" stroke-dasharray="5,10,5" fill="none"/>
<path d="M 10 75 L 190 75" stroke="red"
stroke-linecap="round" stroke-width="1" stroke-dasharray="5,5" fill="none"/>
</svg>

HTML5之SVG 2D入门4—笔画与填充

这个属性是设置一些列数字,不过这些数字必须是逗号隔开的。

属性中当然可以包含空格,但是空格不作为分隔符。每个数字

定义了实线段的长度,分别是按照绘制、不绘制这个顺序循环下去。

所以左面的例子中绘制的线是画5单位的实线,留5单位的空格,

再画5单位的实线...这样一直下去。

除了这些常用的属性,还有下列属性可以设置:
stroke-miterlimit:这个和canvas中的一样,它处理什么时候画和不画线连接处的miter效果。
stroke-dashoffset:这个属性设置开始画虚线的位置。

使用CSS展示数据
HTML5强化了DIV+CSS的思想,所以展示数据的部分还可以交给CSS处理。与普通HTML元素相比,只不过是 background-color和border换成了fill和stroke。其他的大多都差不多。简单看个例子:

复制代码
代码如下:

#MyRect:hover {
stroke: black;
fill: blue;
}

是不是很熟悉,就是这么简单的。

实用参考:
脚本索引:http://msdn.microsoft.com/zh-cn/library/ff971910(v=vs.85).aspx
开发中心:https://developer.mozilla.org/en/SVG
热门参考:http://www.chinasvg.com/
官方文档:http://www.w3.org/TR/SVG11/

HTML / CSS 相关文章推荐
css3 响应式媒体查询的示例代码
Sep 25 HTML / CSS
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
May 07 HTML / CSS
CSS3中线性颜色渐变的一些实现方法
Jul 14 HTML / CSS
使用CSS3中的calc()属性来以算式表达尺寸数值
Jun 06 HTML / CSS
CSS3实现酷炫的3D旋转透视效果
Nov 21 HTML / CSS
CSS 3.0 结合video视频实现的创意开幕效果
Jun 01 HTML / CSS
HTML5的video标签的浏览器兼容性增强方案分享
May 19 HTML / CSS
HTML5 创建canvas元素示例代码
Jun 04 HTML / CSS
HTML5实现预览本地图片
Feb 17 HTML / CSS
html5中canvas图表实现柱状图的示例
Nov 13 HTML / CSS
Web前端:CSS最强总结 附详细代码
Mar 31 HTML / CSS
CSS三大特性继承性、层叠性和优先级详解
Jan 18 HTML / CSS
利用html5 canvas破解简单验证码及getImageData接口应用
Jan 25 #HTML / CSS
利用HTML5中Geolocation获取地理位置调用Google Map API在Google Map上定位
Jan 23 #HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(三)
Jan 21 #HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(二)
Jan 21 #HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(一)
Jan 21 #HTML / CSS
HTML5中Canvas与SVG的画图原理比较
Jan 16 #HTML / CSS
html5 svg 中元素点击事件添加方法
Jan 16 #HTML / CSS
You might like
人族 Terran 魔法与科技
2020/03/14 星际争霸
逐步提升php框架的性能
2008/01/10 PHP
PHP面向对象程序设计之类与反射API详解
2016/12/02 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
广告代码静态化js通用函数
2007/05/09 Javascript
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
jquery插件NProgress.js制作网页加载进度条
2015/06/05 Javascript
JavaScript实现标题栏文字轮播效果代码
2015/10/24 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
2018/04/21 Javascript
微信小程序商品详情页的底部弹出框效果
2020/11/16 Javascript
微信小程序上传多图到服务器并获取返回的路径
2019/05/05 Javascript
js利用递归与promise 按顺序请求数据的方法
2019/08/30 Javascript
js实现中文实时时钟
2020/01/15 Javascript
apache部署python程序出现503错误的解决方法
2017/07/24 Python
分享Pycharm中一些不为人知的技巧
2018/04/03 Python
python3获取两个日期之间所有日期,以及比较大小的实例
2018/04/08 Python
pymongo中聚合查询的使用方法
2019/03/22 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
2021/01/26 Python
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
2016/03/14 HTML / CSS
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2014/09/09 面试题
创建索引时需要注意的事项
2013/05/13 面试题
违反课堂纪律检讨书
2014/01/19 职场文书
工作评语大全
2014/04/26 职场文书
授权委托书(完整版)
2014/09/10 职场文书
政风行风评议整改方案
2014/09/15 职场文书
法制教育主题班会
2015/08/13 职场文书
大学生党课心得体会
2016/01/07 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书