前面我们重点都在总结各类形状,文本和图片,接下来,我们还是和讨论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,则在图形外,不需要填充。看下面的示例:

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

边框色 - 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>

这段代码绘制了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>

从左面的图中我们很容易看到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>

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

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

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

所以左面的例子中绘制的线是画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;
 }

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

转载于:https://www.cnblogs.com/dh-hui/p/3860550.html

SVG 2D入门4 - 笔画与填充相关推荐

  1. 突袭HTML5之SVG 2D入门1 - SVG综述

    位图与矢量图 以前,浏览器中显示的图形,例如jpeg.gif等,都是位图,这些图像格式是基于光栅的.在光栅图像中,图像文件定义了图像中每个像素的颜色值.浏览器需要读取这些值并做出相应行动.这种图像的再 ...

  2. html2d动画,HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用

    交互性 SVG拥有良好的用户交互性,例如: 1. SVG能响应大部分的DOM2事件. 2. SVG能通过cursor良好的捕捉用户鼠标的移动. 3. 用户可以很方便的通过设置svg元素的zoomAnd ...

  3. svg 绘制多边形渐变边框并填充渐变背景

    以六边形为例 绘制一个60*69像素的六边形 根据坐标  points="30,1 60,17 60,52 30,69 1,52 1,17" 设置边框大小 stroke-width ...

  4. android 动态生成直线,Android SVG技术入门:线条动画实现原理

    SVG技术入门:线条动画实现原理 这是一个有点神奇的技术:一副线条构成的画能自动画出自己,非常的酷.SVG 意为可缩放矢量图形(Scalable Vector Graphics),是使用 XML 来描 ...

  5. 教程 | 10分钟入门简笔画12(创意小插画)

    我的一家 很多宝宝说想学创作,今天跟大家分享简笔画中的联想小插画. 所谓联想小插画,就是想到哪里画到哪里.首先确定一个主题,抓住主要元素,然后用装饰性字体.元素.花边来丰富画面.我尝试创作了一张My ...

  6. python笔画教程_毛笔字入门基本笔画书写视频教程全集(18集)

    毛笔字入门基本笔画书写视频教程全集(18集)课程简介: 毛笔字入门基本笔画书写视频教程全集(18集)本毛笔字入门视频,全集教程课程内容共18集,课程系统性的讲解了毛笔字书写中常用的常用基本笔画的认知理 ...

  7. java 2d svg_SVG 2D入门1 - SVG综述

    位图与矢量图 以前,浏览器中显示的图形,例如jpeg.gif等,都是位图,这些图像格式是基于光栅的.在光栅图像中,图像文件定义了图像中每个像素的颜色值.浏览器需要读取这些值并做出相应行动.这种图像的再 ...

  8. SVG 图像入门教程

    http://www.ruanyifeng.com/blog/2018/08/svg.html 一.概述 SVG 是一种基于 XML 语法的图像格式,全称是可缩放矢量图(Scalable Vector ...

  9. UNITY 2D入门基础教程 (一)

    如果用以前版本的Unity做2D游戏,虽然能做,但是要费很多周折. 比如你可以将一张纹理赋予一个"面片"网格,然后用脚本控制它的动画调整它的位移.如果你要使用物理引擎,那么还要将这 ...

最新文章

  1. 使用了这个神器,让我的代码bug少了一半
  2. 浅谈SAP CRM开发——技术概念、与ECC 系列产品区别
  3. Trust is the most important thing to the team!
  4. LINQ to Entities 不识别方法“System.String ToString() 的解决方法
  5. php如何逐条读取数据库,php从数据库中读取特定的行(实例)
  6. MZOJ 1345 hero
  7. minio获取上传文件_Springboot集成Minio实现对象存储服务
  8. 添加.MSPX文件(VISTA下)
  9. php 域名方法,PHP获取域名方法
  10. Excel图表⑤—数据可视化的极简之美
  11. word转Html的实现方案
  12. redis命令之哈希表类型hget命令用法详情(不支持多field)
  13. 定量/高光谱遥感之——光谱分析技术
  14. linux移除硬盘命令,在Linux中在线添加及移除SCSI硬盘方法
  15. tar -zxvf是什么意思
  16. 贵州安顺:红色基因激活初心密码 为民服务谱写秀丽篇章
  17. 波士顿房价预测的TensorFlow实现(多元线性回归)
  18. 错误 1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 C:\Users\Administ
  19. python数据库开发 dga_dga域名生成算法
  20. 手撕神经网络(2)—— 将基本组件搭建成躯干

热门文章

  1. 双非硕士211,阿里(蚂蚁)技术四面:技术一面+技术二面+主管三面+HR面
  2. 百度地图画出手机GPS行驶轨迹——Web端
  3. [乡土民间故事_徐苟三传奇]第十二回_歪拐差役苦挑石磨
  4. HDMI转mipiCSI+Audio,东芝,TC358743,视频转换芯片
  5. 【使用两个队列实现栈】
  6. C语言rewind函数返回值为空,C语言rewind和fseek函数的用法详解(随机读写文件)...
  7. 1 区 IF:5+ | JGG 专刊征稿:人体微生物组
  8. style 标签中动态设置颜色
  9. (三)苏世民:我的经验和教训:追梦(3)
  10. 工业设计公司:从外观设计到软硬件设计