SVG
SVG,即可缩放矢量图形(Scalable Vector Graphics),是一种 XML 应用,可以以一种简洁、可移植的形式表示图形信息。目前,人们对 SVG 越来越感兴趣。大多数现代浏览器都能显示 SVG 图形,并且大多数矢量绘图软件都能导出 SVG 图形。SVG 主要可以概括为以下几点:
- SVG 指可伸缩矢量图形
- SVG 用来定义网络的基于矢量的图形
- SVG 使用 XML 格式定义图形
- SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失
- SVG 是万维网联盟的标准
- SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体
SVG 与 Canvas 区别
创建 SVG 图像
1 | <svg width="10" height="10"> |
SVG 元素
最常用的:
text
: 创建一个 text 元素circle
: 创建一个圆rect
: 创建一个矩形line
: 创建一条线path
: 在两点之间创建一条路径textPath
: 在两点之间创建一条路径,并创建一个链接文本元素polygon
: 允许创建任意类型的多边形g
: 单独的元素
坐标从绘图区域左上角的 0,0 开始,并 从左到右表示
x
,从上到下表示y
。
1 | <!-- text 元素添加文本。可以使用鼠标选择文本。x 和 y 定义文本的起始点 --> |
SVG viewport 和 viewBox
viewport:SVG 相对于其容器的大小由 svg
元素的 width
和 height
属性设置。这些单位默认为像素,但您可以使用任何其他常用单位,如 %
或 em
。
viewBox:它允许您在 SVG 画布中定义一个新的坐标系统。
假设在 200x200px SVG 中有一个简单的圆:
1 | <svg width="200" height="200"> |
通过指定 viewBox ,您可以选择 只显示此 SVG 的一部分。例如,您可以从 0,0 点开始,只显示一个 100 x 100 px 画布:
1 | <svg width="200" height="200" viewBox="0 0 100 100"> |
如果应用的时候需要设置 viewport 宽高,可以通过 viewbox 来辅助控制大小
1 | <svg width="100" height="100"> |
1 | <svg width="100" height="100" viewBox="0,0,200,200"> |
在 Web 网页中插入 SVG
最常见的是:
- 带有
img
标签
1 | <img src="flag.svg" alt="Flag" /> |
- 带有 CSS
background-image
属性
1 | <style> |
- 在 HTML 中内联
1 | <svg |
- 带有
object
、iframe
或embed
标签
1 | <object data="flag.svg" type="image/svg+xml"></object> |
样式元素
任何 SVG 元素都可以接受 style
属性,就像 HTML 标签一样。并非所有的 CSS 属性都能像您预期的那样工作。例如,要更改文本元素的颜色,请使用 fill
而不是 color
。
1 | <svg> |
其他公共属性包括
fill-opacity
,背景颜色不透明度stroke
,定义边框颜色stroke-width
,设置边框宽度
CSS 可以针对 SVG 元素,就像您以 HTML 标签为目标一样:
1 | rect { |
使用 CSS 或 JavaSCript 与 SVG 交互
SVG 图像可以使用 CSS 进行样式化,或者使用 JavaScript 编写脚本,这种情况下:
- 当 SVG 在 HTML 中内联
- 通过
object
、embed
或iframe
标签加载图像时
CSS 嵌入 SVG
将 CSS 加至 CDATA:
1 | <svg> |
SVG 文件还可以包括外部样式表
1 | <?xml version="1.0" standalone="no"?> |
JavaScript 嵌入 SVG
你可以将 JavaScript 放在第一个位置上,并包装在一个 load
事件中,以便在页面完全加载并在 DOM 中插入 SVG 时执行它:
1 | <svg> |
或者如果您将 JS 放在其他 SVG 代码的末尾,可以避免添加事件监听,确保当 SVG 出现在页面时 JavaSCript 会执行。
1 | <svg> |
与 HTML 元素一样,SVG 元素也可以有 id
和 class
属性。
1 | <svg> |
SVG 外部的 JavaScript
如果可以与 SVG 交互(SVG 在 HTML 中是内联的),则可以使用 JavaScript 更改任何 SVG 属性,
1 | document.getElementById('my-svg-rect').setAttribute('fill', 'black') |
SVG 外部的 CSS
1 | <style> |
SVG 符号
符号使您可以定义一次 SVG 图像,并在多个地方重用它。如果您需要重用一个图像,这是一个很大的帮助,可能只是改变一点它的一些属性
您可以通过添加一个 symbol
元素并分配一个 id
属性来完成此操作:
1 | <svg class="hidden"> |
如何使用:
1 | <svg> |
(xlink:href
用于 Safari 支持,即使它是一个已废弃的属性)
如果您希望对这两个矩形使用不同的样式,例如,对每个矩形使用不同的颜色?您可以使用CSS 变量.
1 | <svg class="hidden"> |
1 | <svg class="blue"> |