3. 文档结构

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

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

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

      <svg width="200px" height="200px" viewBox="0 0 200 200"><defs><style type="text/css"><![CDATA[circle {fill: #ffc;stroke: blue;stroke-width: 2;stroke-dasharray: 5 3}]]></style></defs><circle cx="20" cy="20" r="10"/><circle cx="20" cy="60" r="10" style="fill: #cfc"/>
      </svg>
      复制代码

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

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

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

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

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

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

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

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

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

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

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

translate(-centerX * (factor - 1), -centerY * (factor - 1))
scale(factor)
复制代码

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

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

原文链接:codesnote.com/svg_tutoria…

转载于:https://juejin.im/post/5a54b3d6518825732c536b56

《SVG精髓》笔记(二)相关推荐

  1. css中怎么加入立体模型,CSS学习笔记二:css 画立体图形

    继上一次学了如何去运用css画平面图形,这一次学如何去画正方体,从2D向着3D学习,虽然有点满,但总是一个过程,一点一点积累,然后记录起来. Transfrom3D 在这一次中运用到了一下几种属性: ...

  2. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

  3. oracle直查和call哪个更快,让oracle跑的更快1读书笔记二

    当前位置:我的异常网» 数据库 » <>读书笔记二 <>读书笔记二 www.myexceptions.net  网友分享于:2013-08-23  浏览:9次 <> ...

  4. 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍

    游戏开发笔记二十七 Direct3D 11入门级知识介绍 作者:毛星云    邮箱: happylifemxy@163.com    期待着与志同道合的朋友们相互交流 上一节里我们介绍了在迈入Dire ...

  5. [转载]dorado学习笔记(二)

    原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...

  6. PyTorch学习笔记(二)——回归

    PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...

  7. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数

    tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报  分类: tensorflow(4)  目录(?)[+] 本笔记目的 ...

  8. 趣谈网络协议笔记-二(第十九讲)

    趣谈网络协议笔记-二(第十九讲) HttpDNS:网络世界的地址簿也会指错路 自勉 勿谓言之不预也 -- 向为祖国牺牲的先烈致敬! 引用 dns缓存刷新时间是多久?dns本地缓存时间介绍 - 东大网管 ...

  9. 趣谈网络协议笔记-二(第十八讲)

    趣谈网络协议笔记-二(第十八讲) DNS协议:网络世界的地址簿 自勉 勿谓言之不预也 -- 向为祖国牺牲的先烈致敬! 正文 DNS用于域名解析,但也不仅仅是用于域名解析,不仅仅是将域名转换成IP. 在 ...

  10. 趣谈网络协议笔记-二(第十七讲)

    趣谈网络协议笔记-二(第十七讲) P2P协议:我下小电影,99%急死你 自勉 逃离舒适区! 正文 一. P2P协议 整个篇章讲的就是这两个协议之间的区别.P2P协议就是迅雷下载数据时所用的协议, 众所 ...

最新文章

  1. php运行ecshop,ecshop2.x代码执行
  2. 字符指针,字符数组,双引号的字符串的区别与联系
  3. REUSE_ALV_GRID_DISPLAY事件子过程和cl_gui_grid类的事件对应关系
  4. 聊一聊Flutter Engine线程管理与Dart Isolate机制
  5. [MySQL基础]MySQL语法规范介绍
  6. CentOS7 安装nginx
  7. 【分享-EasyRecovery】删除的文件找不回?不存在的!
  8. 关于phyton中print函数的问题
  9. Unity3d 利用 AvproVideo 播放带透明通道mov视频在部分电脑无法播放的解决方案
  10. python交互式和文件式区别_Python 运行.py文件和交互式运行代码的区别详解
  11. 实验四 201771010101 白玛次仁
  12. Emc服务器怎么用u盘装系统,用u盘装系统的具体方法
  13. Windows Sockets 规范及应用
  14. Python安装三方包
  15. Golang源码探究 —— 网络轮询器netpoller
  16. 【车牌识别】基于matlab GUI阈值分割车牌识别(带面板)【含Matlab源码 721期】
  17. 关于微信小程序开发里,数据动态绑定,显示改变,值不改变的记录
  18. R语言差异检验:t检验
  19. javascript常用的小技巧
  20. 全身MRI与临床检查在检测早期中轴脊柱关节病患者附着点炎方面一致性差-来自ESTHER临床试验基线水平的...

热门文章

  1. python怎么安装jieba库-python环境jieba分词的安装
  2. 基于android os 5.1,Android 5.1.1版氢OS快速体验
  3. LeetCode 450 Delete Node in a BST(二叉搜索树中的删除结点)
  4. LeetCode Minimum Height Trees(拓扑排序)
  5. LeetCode Shortest Unsorted Continuous Subarray
  6. mysql中表名为关键字的处理方法
  7. 题目1159:坠落的蚂蚁
  8. css3关键帧动画以及兼容性策略
  9. 「BZOJ 3994」「SDOI 2015」约数个数和「莫比乌斯反演」
  10. 改进筛法- 质数中的质数(质数筛法)