• 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" … />

  • 相关阅读:
    wzplayer for android界面
    player stop处理
    wzplayer for android界面
    android屏幕监控上下左右滑动
    OpenGL + C++ + Java
    player stop处理
    EGLHelper
    Android NDK学习 <五> C++ 支持
    【认识之初】
    Java调用windows exe程序
  • 原文地址:https://www.cnblogs.com/cacti/p/4689455.html
Copyright © 2020-2023  润新知