zoukankan      html  css  js  c++  java
  • SVG实战开发学习(五)——装饰SVG图形

    之前介绍过<defs>元素,它允许我们自定义图形元素。在本章中将要使用这个元素来定义SVG图形的色彩渐变、模式填充、剪裁和遮罩,还将介绍如何在svg中使用css样式表。

    【色彩渐变】

    svg中有两种色彩渐变:线性渐变和反射渐变。它们的渐变格式都被定义在<defs>元素中,然后在需要的SVG图元中引用它。

    线性渐变——是沿着直线方向的色彩渐变过度,使用<linearGradient>元素来定义。

    基本属性:

    id="GradientName":<linearGradient>元素的标识ID,也就是它的名字,取值是字符串,用来被需要渐变效果的图形引用。

    x1:表示渐变矢量起点的X轴坐标,默认值为0%;

    y1:表示渐变矢量起点的Y轴坐标,默认值为0%;

    x2:表示渐变矢量终点的X轴坐标,默认值为100%;

    y2:表示渐变矢量终点的Y轴坐标,默认值为0%;

    (特别说明:上述4个坐标值的取值既可以是数字也可以是百分比,而且可以全部选择默认。选择默认时渐变矢量处于水平向右的方向,但其具体的位置取决于下面将要介绍的"gradientUnits")属性的值。

    其实色彩属性不在<linearGradient>元素中定义,而是在其子元素<stop>中定义,<stop>元素同时"服侍二主",也是反射渐变的子元素。<stop>元素定义了色彩渐变的关键点的色彩和位置,而且每个<linearGradient>元素下可以有若干个<stop>元素,也就是可以拥有若干个渐变关键点:如果有若干个<stop>元素,那么它们的排列顺序必须严格遵循"offset"属性值的大小。

    基本属性:

    offset:表示渐变关键点的位置,通常用百分比来表示,因为可能无法知道渐变矢量的具体位置,只给出一个相对的位置。0%代表起点,100%代表终点,取值大于1取1,小于0取0.对于线性渐变,该属性表示沿着渐变矢量方向的关键点位置;而对于放射渐变,则表示从点(fx,fy)到外圆圆周各方向上的某个比例处的点,这些点构成了一条包围点(fx,fy)的曲线。

    stop-color:表示渐变关键点的颜色值,默认是黑色。

    stop-opacity:表示渐变关键点渲染时的透明度,取值从0到1,即透明到不透明,默认值为1.

    【放射渐变】

    svg使用<radialGradient>元素来定义。放射渐变除了渐变矢量的定义与线性渐变不同外,其他属性都基本一样。

    基本属性

    cx:定义圆心的X轴坐标,默认值是50%,即中心点(中心放射)。这个属性和下面要介绍的"cy"属性都是为了帮助放射渐变定义一个圆,这个圆内部分就是色彩的渐变区域。

    cy:定义圆心的Y轴坐标,默认值是50%。

    r:定义圆的半径,默认值是50%。

    fx:

    fy:

    【带色彩渐变效果的箭头】

    svg中绘制箭头的元素<maker>元素,<maker>元素通常也在<defs>元素中定义。

    【模式填充】

    模式填充与色彩渐变类似,也需要在<defs>中事先定义模板效果。

    基本属性:

    id:<pattern>元素的标识ID,也就是它的名字。取值是字符串,用来被需要模式填充效果的图形引用。

    x:定义模式填充的矩形模板左上角的X轴坐标,默认值是0%,其长度单位由下文的"patternUnits"属性决定。

    y:定义模式填充的矩形模板左上角的Y轴坐标,其他同X属性。

    width:定义模式填充的矩形模板的宽度,非负,0为不渲染。

    height:定义模式填充的矩形模板的高度,非负,0为不渲染。

    patternUnits:" userSpaceOnUse | objectBoundingBox "定义上述的大小、位置属性的长度单位。其定义与上一节模式识别中介绍的" gradientUnits "属性相似。

    viewBox=" x1 y1 x2 y2 "定义图元在模板矩形内的位置时所使用的内部坐标系。这个属性与<svg>元素中的" viewbox "属性的意义是一样的,是一个相对坐标系,而上述的" x,y,width,height "属性定义的是模板矩形在所引用的元素中位置。

    具体效果参见书P93

    【svg中的CSS】

    svg中几乎所有所有的可视化图形元素都具有" style "属性,它定义了如何渲染这些图形元素,svg有很多样式属性与css和XSL是相同的,但也拥有一些专门为SVG设立的属性,svg的css样式涵盖字体、文字、滤镜效果、交互、绘图等几大类,使用的方法与HTML中的css有类似之处。

     【内嵌CSS】

    直接把CSS样式表定义在svg文档中,它是通过在<defs>元素中定义<style>元素来实现的,但这与使用"style"属性是不同的。<style>元素允许大家把CSS样式表直接嵌入在svg文档中。

    <defs>

      <style type="text/css"><![CDATA[

      rect{ fill:red;

      stroke:blue;

      stroke-3;

     }

      ]]>

      </style>

    </defs>

    <rect x="200" width="300" height="100"/>

    以上实例就是定义的css样式表。使用了实体嵌入标记"<![CDATA[]]>",这样即使样式表中有不符合XML语法的语句也不会对SVG文档的解析造成影响。因为SVG解析器不会对这个实体标记内的字符数据流进行XML规范检查。

    【外部CSS】

    与内部css方式相对应的是引用外部的css样式表,这种方式使得css代码更易维护,并且可重用性更好,不同的svg文档可以共享同一个css文件。这种引用方式同HTML中引用css样式表的方式很相似。下面举例说明,外部css文件名为"svg.css"。

    【style属性常用参数一览】

    css样式在svg中的另外一个用法就是把"style"属性写入在某些元素下,使得这些元素按照"style"属性的定义进行渲染。有时可以在<g>元素内定义"style"属性,其下的元素都会自动继承这个样式,如果这些元素对一些样式不匹配的话,svg会自动识别而抛弃,下面列举的参数中有些已经出现在之前的章节中,这里只对常用的参数做一个归纳。

    1、绘图类参数

    "fill":是否填充及填充色。

    "fill-opacity":填充透明度。

    "fill-rule":填充的的规则。

    "marker":引用箭头标记。

    "marker-start":在路径起点绘制一个箭头。

    "marker-mid":在路径中点绘制一个箭头。

    "marker-end":在路径终点绘制一个箭头。

    "stroke":是否描边及描边色。

    " stroke-width ":描边宽度。

    "stroke-dasharray":描边所用的线型。

    "stroke-dashoffset":描边所用的线型的线条间的偏移量。

    "stroke-linecap":路径线条端点的绘制样式。

    "stroke-linejoin":线条交叉处的过度形状。

    "stroke-miterlimit":路径端点是"miter"时的大小限制。

    "stroke-opacity":描边的透明度。

    "stroke-rendering":描边时的渲染规则。

    2、字体类参数

    "font-family":字体名称。

    "font-size":字号大小。

    "font-size-adjust":字号大小细微调整时的规则。

    "font-stretch":字体拉升时的规则。

    "font-style":字体额外的样式。

    "font-variant":字体的变体方式。

    "font-weight":字体是否是粗体或者粗体的程度。

    3、文字类参数

    "direction":文字排列方向。

    "letter-spacing":文字间距。

    "text-decoration":文字的修饰效果。

    "unicode-bidi":文字使用Unicode编码方式。

    " word-spacing ":文字中的词的间距。

    "alignment-baseline":文字的基线排列方式。

    4、可视化媒体类参数

    "clip":仅用于最外层<svg>元素,说明剪裁方式。

    "color":颜色值。

    "cursor":鼠标光标的形状。

    "display":图像对象是否显示。

    "overflow":仅用于创建新视口的元素,说明该元素大小的处理方式。

    "visibility":图像对象是否可见。

    5、滤镜效果类参数

    "enable-background":滤镜渲染时是否考虑背景图像。

    "filter":滤镜参数细节。

    "flood-color":填充色彩。

    "flood-opacity":填充透明度。

    6、渐变类参数

    "stop-color":色彩渐变的起止颜色值。

    "stop-opacity":色彩渐变的透明度。

    7、交互类参数

    "pointer-events":该元素是否产生事件。

    【使用直接属性】

    css样式在svg中还有一个用法,就是把"style"属性的参数直接作为元素的属性值。在前面的章节中,也出现过这种用法。比如这样一个元素定义:

    <rect x="200" y="100" width="300" height="100" style="fill:red;stroke:black"/>

    这里使用"style"属性定义的方法,如果使用直接属性,那么应该这样定义:

    <rect x="200" y="100" width="300" height="100" fill="red" stroke="black"/>

     【使用class属性】

    如果我们在一个css文件中这样定义:

    .road{color:red}

    .company{color:yellow}

    .river{color:blue}

    要引用这些样式时就必须使用如下的语法:

    <path class="road" … />

  • 相关阅读:
    Atitit 集团与个人的完整入口列表 attilax的完整入口 1. 集团与个人的完整入口列表 1 2. 流量入口概念 2 3. 流量入口的历史与发展 2 1.集团与个人的完整入口列表
    atitit 每季度日程表 每季度流程 v3 qaf.docx Ver history V2 add diary cyar data 3 cate V3 fix detail 3cate ,
    Atitit react 详细使用总结 绑定列表显示 attilax总结 1. 前言 1 1.1. 资料数量在百度内的数量对比 1 1.2. 版本16 v15.6.1 1 1.3. 引入js 2
    Atitit r2017 r3 doc list on home ntpc.docx
    Atitit r2017 ra doc list on home ntpc.docx
    Atiitt attilax掌握的前后技术放在简历里面.docx
    Atitit q2016 qa doc list on home ntpc.docx
    Atitit r7 doc list on home ntpc.docx 驱动器 D 中的卷是 p2soft 卷的序列号是 9AD0D3C8 D:\ati\r2017 v3 r01\
    Atitit 可移植性之道attilax著
    Atitit q2016 q5 doc list on home ntpc.docx
  • 原文地址:https://www.cnblogs.com/cacti/p/4689455.html
Copyright © 2011-2022 走看看