3. 文档结构

  • 在SVG中使用样式(四种方式,可以联想对照HTML样式方法)

    • 内联样式, 直接在标签里设置style属性

      1. <circle cx='20' cy='20' r='10' style='stroke: black; fill: blue;'/>
    • 内部样式表,可以同时为多个元素设置样式 demo

      1. <svg width="200px" height="200px" viewBox="0 0 200 200">
      2. <defs>
      3. <style type="text/css"><![CDATA[
      4. circle {
      5. fill: #ffc;
      6. stroke: blue;
      7. stroke-width: 2;
      8. stroke-dasharray: 5 3
      9. }
      10. ]]></style>
      11. </defs>
      12. <circle cx="20" cy="20" r="10"/>
      13. <circle cx="20" cy="60" r="10" style="fill: #cfc"/>
      14. </svg>

          这里使用了<![CDATA[...]]>块包裹<style>元素内的CSS代码(在XML文档中的所有文本都会被解析器解析,只有在CDATA部件之内的文本会被解析器忽略)

    • 外部样式表,将样式写在一个外部文件中,供一个或多个SVG文档使用

      1. <!-- ext_style.css -->
      2. * { fill: none; stroke: black; }
      3. rect { stroke-dasharray: 7 3;}
      4. .thick { stroke-width: 5; }
      1. <?xml-stylesheet href="ext_style.css" type="text/css"?>
      2. ...
      3. <rect x="10" y="20" width="40" height="30"/>
      4. <polygon class="thick" points="60 50, 60 80, 90 80"/>
      5. ...
    • 表现属性,SVG允许我们将style里面的声明直接当做SVG元素的属性使用。以下两段代码效果是相同的。

      1. <!-- 内联样式 -->
      2. <circle cx="10" cy="10" r="5" style="fill: red; stroke: black; stroke-width: 2;"/>
      1. <!-- 表现属性 -->
      2. <circle cx="10" cy="10" r="5" fill="red"; stroke="black"; stroke-width="2"/>

      表现属性是所有样式中优先级最低的,但会覆盖继承的样式。

  • SVG提供了一些元素,允许我们对元素进行分组,从而使文档更加结构化、更易理解。

    <g>元素
    <g>元素会将其所有子元素作为一个组合,通常组合还会有一个唯一的id作为名称。每个组合还可以拥有自己的<title><desc>。并为子元素提供一些注解,使得文档结构更为清晰。在<g>标签中定义的样式,会应用到所有子元素上。
    (元素g是用来组合对象的容器。添加到g元素上的变换会应用到其所有的子元素上。添加到g元素的属性会被其所有的子元素继承。此外,g元素也可以用来定义复杂的对象,之后可以通过<use>元素来引用它们。)

    <use>元素
    SVG使用<use>元素,为定义在<g>元素内的组合或任意独立图形元素提供了类似复制粘贴的能力。

    <defs>元素
    SVG 允许我们定义以后需要重复使用的图形元素。 建议把所有需要再次使用的引用元素定义在defs元素里面。这样做可以增加SVG内容的易读性和可访问性。 在defs元素中定义的图形元素不会直接呈现。 你可以在你的视口的任意地方利用 <use>元素呈现这些元素。 demo

    <symbol>元素
    symbol元素用来定义一个图形模板对象,它可以用一个<use>元素实例化。symbol元素对图形的作用是在同一文档中多次使用,添加结构和语义。结构丰富的文档可以更生动地呈现出来,类似讲演稿或盲文,从而提升了可访问性。注意,一个symbol元素本身是不呈现的。只有symbol元素的实例(亦即,一个引用了symbol的 <use>元素)才能呈现。 demo

    <image>元素
    image元素可以包含一个完整的SVG或者栅格文件。

4. 坐标系统变换

    可以对照CSS3的Transform属性学习理解。

变换 描述
translate(x, y) 按照指定的x和y值移动用户坐标系统。如果没有指定y值,则假定为0 demo
scale(xFactor, yFactor) 使用指定的xFactor和yFactor乘以所有的用户坐标系统。比例值可以是小数或则负数 demo
scale(factor) 和scale(factor, factor)相同
rotate(angle, centerX, centerY) 按照指定的angle旋转用户坐标。旋转中心由centerX和centerY指定 demo
skewX(angle) 根据指定的angle倾斜所有x坐标。从视觉上讲,这会让垂直线出现角度 demo
skewY(angle) 根据指定的angle倾斜所有y坐标。从视觉上讲,这会让水平线出现角度
matrix(a b c d e f) 指定一个六个值组成的矩阵变换

Tip: 如何围绕中心点缩放?

    要围绕某个点按照给定的比例缩放对象可以这么做:

  1. translate(-centerX * (factor - 1), -centerY * (factor - 1))
  2. scale(factor)

    还可以将stroke-width的值也除以缩放系数,从而让缩放后的轮廓保持同样的宽度。

  1. <!-- 缩放中心 -->
  2. <circle cx="50" cy="50" r="2" style="fill: black;"/>
  3. <!-- 未缩放的矩形 -->
  4. <g id="box" style="stroke: black; fill: none;">
  5. <rect x="35" y="40" width="30" height="20"/>
  6. </g>
  7. <use xlink:href="#box" transform="translate(-50, -50) scale(2)" style="stroke-width: 0.5;"/>
  8. <use xlink:href="#box" transform="translate(-75, -75) scale(2.5)" style="stroke-width: 0.4;"/>
  9. <use xlink:href="#box" transform="translate(-100, -100) scale(3)" style="stroke-width: 0.33;"/>

原文链接:http://codesnote.com/svg_tutorial_part1/

《SVG精髓》笔记(二)的更多相关文章

  1. CSS3 笔记二(Gradients)

    CSS3 Gradients Two types of gradients: Linear Gradients (goes down/up/left/right/diagonally) Radial ...

  2. 图解CSS3核心技术与案例实战(1)

    前言: 我买了一本<图解CSS3核心技术与案例实战>大漠写的,为了提高自己的自觉性呢,抓紧看书,把读书笔记放在这上面,跟大家一起分享,也为督促自己完成读书计划. 文末有微信公众号,感谢你的 ...

  3. 纯JS实现KeyboardNav(学习笔记)二

    纯JS实现KeyboardNav(学习笔记)二 这篇博客只是自己的学习笔记,供日后复习所用,没有经过精心排版,也没有按逻辑编写 这篇主要是添加css,优化js编写逻辑和代码排版 GitHub项目源码 ...

  4. 图解CSS3制作圆环形进度条的实例教程

    圆环形进度条制作的基本思想还是画出基本的弧线图形,然后CSS3中我们可以控制其旋转来串联基本图形,制造出部分消失的效果,下面就来带大家学习图解CSS3制作圆环形进度条的实例教程 首先,当有人说你能不能 ...

  5. 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  6. jQuery源码笔记(二):定义了一些变量和函数 jQuery = function(){}

    笔记(二)也分为三部分: 一. 介绍: 注释说明:v2.0.3版本.Sizzle选择器.MIT软件许可注释中的#的信息索引.查询地址(英文版)匿名函数自执行:window参数及undefined参数意 ...

  7. Mastering Web Application Development with AngularJS 读书笔记(二)

    第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...

  8. Python 学习笔记二

    笔记二 :print 以及基本文件操作 笔记一已取消置顶链接地址 http://www.cnblogs.com/dzzy/p/5140899.html 暑假只是快速过了一遍python ,现在起开始仔 ...

  9. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  10. webpy使用笔记(二) session/sessionid的使用

    webpy使用笔记(二) session的使用 webpy使用系列之session的使用,虽然工作中使用的是django,但是自己并不喜欢那种大而全的东西~什么都给你准备好了,自己好像一个机器人一样赶 ...

随机推荐

  1. 【原创】Linux基础之去掉windows中的\r

    linux换行为\n,windows换行为\r\n,windows环境编辑的shell脚本在linux下执行会报错: line 2: $'\r': command not found 查看 # cat ...

  2. 【题解】codevs 3044 矩形面积合并

    传送门 3044 矩形面积求并 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 输入n个矩形,求他们总共占地面积(也就是求一下 ...

  3. vue的使用与安装 npm -v报错

    1.先将node从官方文档下载下来,然后进行安装. 安装成功后,在dos命令中node -v.npm -v来测试,如果成功就可以安装cnpm(国内淘宝镜像比较快).这里我遇到一个bug,npm -v压 ...

  4. Windows live Writer Tips

    http://lehsys.blogspot.com/2013/03/windows-live-writer-how-to-change.html http://www.carlosag.net/to ...

  5. gyp ERR! stack Error: EACCES: permission denied, mkdir问题解决方案

    sudo npm i --unsafe-perm 原因还是权限问题 就是说 npm 出于安全考虑不支持以 root 用户运行,即使你用 root 用户身份运行了,npm 会自动转成一个叫 nobody ...

  6. 【转】关于 Error[Pe020]: identifier "HAL_StatusTypeDef" is undefined

    @2019-06-06 [小记] 这个bug比较常见,右键可以定位到相关头文件,但系统依旧报错,其实主要还是头文件的问题. 1.需要检查头文件中关于主程序所用到的部分是否已经使能,尤其是 “stm32 ...

  7. 【计算机网络】网络地址转换NAT

    网络地址转换NAT 要知道到每个IP使能的设备都需要一个IP地址.以一个家庭为例,假设当地的ISP已为该家庭分配过一块地址,但是后期家庭中的智能设备增加(智能手机.电脑等),这些都需要IP地址才可上网 ...

  8. Cubase如何进行音频移调

  9. Asp.Net MVC4 使用Unity 实现依赖注入

    项目创建参考 上一篇   <<Asp.Net  MVC5  使用Unity 实现依赖注入>>, 不同的是这里是 Unity.MVC4 装好后会出现 然后示例说在这里写对应关系 ...

  10. IMP-00058: ORACLE error 1882 encountered

    问题现象: IMP: ORACLE error encountered ORA: timezone region not found ORA: at "SYS.DBMS_EXPORT_EXT ...