前言

SVG对不少前端来说就是一个熟悉的陌生人,此篇博客是我学习完SVG后做的一个小总结,帮助我快速回忆SVG相关内容。

它不能帮你精通 SVG,但是可以帮你快速了解SVG的一些核心内容,不会迷失在一些细枝末节的设定中,让你对 SVG 有一个大概的认识。

基础

SVG全名 Scalable Vector Graphics,是可缩放的矢量图形,可以随意放大缩小并且不失真,最重要的是体积也很小。

SVG 是一种XML语言,由 svg 根元素和一些基本形状元素构成,另外还有一个 g 元素将基本形状元素编组,支持渐变、旋转、动画、滤镜等效果,且能与 js 进行交互。

通常我们使用的 SVG 指的是 SVG1.1,而不是 SVG2.0,因为它的浏览器支持度不够。

我们先给出一个 MDN 上的简单示例:

<svg version="1.1" baseProfile="full" width="300" height="200" xmlns="http://www.w3.org/2000/svg">
<rect width="100%" height="100%" fill="red" />
<circle cx="150" cy="100" r="80" fill="green" />
<text x="150" y="125" font-size="60" text-anchor="middle" fill="white">SVG</text>
</svg>

效果是:

svg 根元素上的这些除了宽高算是固定格式,下面的三个元素分别是矩形,圆和文字,每个元素上都有坐标定位,上面有些属性用来改变它的位置、大小和填充颜色。

svg 的基本图形元素有:

* rect 矩形
* circle 圆形
* ellipse 椭圆
* line 直线
* polyline 折线
* polygon 多边形
* path 路径

知道有这么多元素就行了,具体属性看相关文档,不用细究。

前 6 种元素全部可以用 path 实现,但是为了语义化容易读懂,可以尽量用前 6 种。

现在着重讲一下 path

路径 path

pathsvg 基础形状中最强大的一个,可以很容易绘制直线,曲线,弧线。

先给个示例:

<svg width="100px" height="100px" version="1.1" xmlns="http://www.w3.org/2000/svg">
<path d="M 10 10 H 90 V 90 H 10 L 10 10" fill="transparent" stroke="black"/>
</svg>

效果是:

示例中的 path 元素上,fillstroke 对前端来说应该容易理解,就是填充和线条颜色,但它定义形状的核心属性d看起来就很容易让人眼前一懵。

d表示一系列的路径命令,而SVG的六种路径命令类型如下:

  • 移动到:M、m
  • 画线至:L、l、H、h、V、v
  • 三次方贝塞尔曲线:C、c、S、s
  • 二次方贝塞尔曲线:Q、q、T、t
  • 椭圆曲线:A、a
  • 封闭路径:Z、z

操作就是使用移动命令移动到指定的点,然后使用剩下的几个路径来绘制线条。

然后我们解析一下上方的SVG例子:

  • 使用移动命令 M 10 10 将画笔移动到横坐标 10,纵坐标 10 的位置
  • 使用画线命令 H 90 向右横向绘制一条直线,这条直线的纵坐标不变,横坐标终点是 90,此时画笔的位置到了横坐标 90,纵坐标 10 的位置
  • 再使用画线命令 V 90 向下纵向绘制一条直线,这条直线的横坐标不变,纵坐标重点为 90,此时画笔的位置到了横坐标 90,纵坐标 90 的位置
  • 最后使用画线命令 L 10 10 ,从当前坐标位置绘制一条到横坐标 10,纵坐标 10 的直线。

最后我们得到的结果就是一个位于横坐标 10、纵坐标 10 位置的宽为 80 的正方形。

最后得提一下封闭路径 Z 这个特殊命令,它没有参数,作用是从当前路径绘制一条直线到路径的第一个点。

渐变和文字

渐变元素

  • linearGradient 线性渐变
  • radialGradient 径向渐变

用到自己看文档,了解有这么个东西就行了。

文字 text 元素 同理。

g 分组

元素g是用来组合对象的容器。添加到g元素的属性会被其所有的子元素继承。

也就是说你可以使用该元素对一批形状进行批量的上色和变换操作。

上个例子:

<svg width="100%" height="100%" viewBox="0 0 95 50"
xmlns="http://www.w3.org/2000/svg">
<g stroke="green" fill="white" stroke-width="5">
<circle cx="25" cy="25" r="15" />
<circle cx="40" cy="25" r="15" />
<circle cx="55" cy="25" r="15" />
<circle cx="70" cy="25" r="15" />
</g>
</svg>

patterns 图案

先来一个使用示例:

<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg" version="1.1">
<defs>
<linearGradient id="Gradient1">
<stop offset="5%" stop-color="white"/>
<stop offset="95%" stop-color="blue"/>
</linearGradient>
<linearGradient id="Gradient2" x1="0" x2="0" y1="0" y2="1">
<stop offset="5%" stop-color="red"/>
<stop offset="95%" stop-color="orange"/>
</linearGradient> <pattern id="Pattern" x="0" y="0" width=".25" height=".25">
<rect x="0" y="0" width="50" height="50" fill="skyblue"/>
<rect x="0" y="0" width="25" height="25" fill="url(#Gradient2)"/>
<circle cx="25" cy="25" r="20" fill="url(#Gradient1)" fill-opacity="0.5"/>
</pattern> </defs> <rect fill="url(#Pattern)" stroke="black" x="0" y="0" width="200" height="200"/>
</svg>

注意看,渐变元素和图案元素都需要放在 defs 元素内,相当于一个定义,然后实际使用的时候用 fill 属性。

patterns 元素可以认为是对多个图形元素的一个封装,主要是为了进行复用。

其他功能

还有一些其他功能,如:

  • 属性 transform ,类同与同名 CSS 属性,进行位移,缩放,旋转
  • 属性 fill 和 stroke,填充和边框
  • 裁剪元素 clipPath,遮罩元素 mask ,同样放在 defs 元素中
  • 滤镜元素 filter

这些功能不影响大多数情况的使用,用到了直接查文档即可。

SVG 动画的话 IE11 不支持,保险起见可以不用,不过还是列出来一下,它们一般都是被嵌套在形状元素中来使用:

  • animate 元素 定义一个元素的某个属性如何踩着时点改变
  • animateMotion 元素 定义了一个元素如何沿着运动路径进行移动,很像 path
  • animateTransform 元素 控制动画的转换、缩放、旋转或斜切。

至于其他的什么字体之类细枝末节的东西略过吧,平常如果涉及到这类处理我们可能就用 svg 图片了,而不是直接使用 svg。

总结

5 分钟速通 SVG 完毕,相信你已经对 SVG 有了一个稍微全面一点的了解。

通不通无所谓,你就说快不快吧。

5 分钟速通 SVG的更多相关文章

  1. 周根项《一分钟速算》全集播放&amp;下载地址

    点击图片就可以观看 ↓↓↓↓↓↓↓↓ 第1章:指算法 周根项<一分钟速算>第1章:指算法 第一节 对手的认识 周根项<一分钟速算>第1章:指算法 第二节 个位数比十位数大1乘以 ...

  2. Hive基础语法5分钟速览

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行. 其优点是学习成本低,可以通过 ...

  3. 一分钟速学 | NMS, IOU 与 SoftMax

    非极大抑制 NMS的英文是Non-maximum suppression的缩写. 简单的说,就是模型给出了多个重叠在一起的候选框,我们只需要保留一个就可以了.其他的重叠的候选框就删掉了,效果可见下图: ...

  4. JavaScript+svg绘制的一个动态时钟

    结果图: 代码如下: <!DOCTYPE html> <html> <head> <title>动态时钟</title> </head ...

  5. 字体图标-把SVG图标转换成所需要的字体图标

    小科普: 想必小伙伴们多少都了解或使用过字体图标,总体来说优点多于缺点,优点如下图: 任意缩放,图标不会失真: 可以改变图标颜色: 可以设置图标阴影: 可以设置透明效果: 主流浏览器都支持: 可以快速 ...

  6. 【应用】SVG动态 时钟

    没有做秒针,只做了分针和时针,5分钟以后来看应该可以看到效果╮(╯-╰)╭ <!DOCTYPE html> <html> <head> <title>& ...

  7. 液晶顯示器 LCD (Liquid Crystal Disply )

    常見的液晶顯示器按物理結構分為四種: (1)扭曲向列型(TN-Twisted Nematic): (2)超扭曲向列型(STN-Super TN): (3)雙層超扭曲向列型(DSTN-Dual Scan ...

  8. High Context とLow Context文化

    社会の様々な文化を分類するのに.Low context culture, High context cultureという分け方がある.ビジネススクールのグローバル・マーケティングの授業などでよく取り上 ...

  9. js获取后台数据

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  10. Linux学习笔记03

    一.Linux常见命令 file:查看文件类型(windows用扩展名识别文件类型) 语法:file [options] [args] -b:显示结果时,不显示文件名 -c:显示执行file命令的执行 ...

随机推荐

  1. C#使用Spire.Pdf包对PDF文档进行数字签名

    背景 对PDF文档进行数字签名的需求 对PDF文档添加水印的需求 网上资料版本不一或不全 本文章提到的Spire.Pdf均是使用的Spire.Pdf for .NET,除此之前还有其他语言的版本,如S ...

  2. KingbaseES V8R6 集群环境wal日志清理

    案例说明: 1.对于集群中的wal日志,除了需要在备库执行recovery外,在集群主备切换(switchover或failover)时,sys_rewind都要读取wal日志,将数据库恢复到一致性状 ...

  3. KingbaseES R3 集群修改system用户密码方案

    方案说明: 对于kingbaseES R3集群修改system密码相比单机环境有一定的复杂性,需要修改的位置如下: 1)数据库中system用户密码,可以用alter user命令修改 2)在reco ...

  4. 如何在 Jenkins CI/CD 流水线中保护密钥?

    CI/CD 流水线是 DevOps 团队软件交付过程的基本组成部分.该流水线利用自动化和持续监控来实现软件的无缝交付.通过持续自动化,确保 CI/CD 流水线每一步的安全性非常重要.在流水线的各个阶段 ...

  5. Dart 2.18 正式发布

    互操作性增强.平台特定的网络组件.优化类型推断,以及空安全语言里程碑的近期更新 文/ Michael Thomsen, Google Flutter & Dart 产品经理 Dart 2.18 ...

  6. Python 第四次实验

    1.(程序设计)定义函数def GetRandomChar(),返回一个随机的数字或大写或小写字母,每个符号出现的机会相等.调用该函数8次,生成并输出一个8位的验证码.用户输入该验证码,如果验证码正确 ...

  7. 头文件与main函数

    头文件 1.为什么要使用头文件? 程序如戏 程序中有很多元素(std::cout, system), 都是一个个演员 但是他们之间都互不认识, 但是却要一起合作, 强行编译, 就会导致错误! 得预先介 ...

  8. 微信小程序开发总结-怀庄酒业投票活动

    使用微信小程序投票活动云开发 怀庄酒业活动 使用云开发.开始准备使用django开发自己的后台,但是发现功能比较简单,使用云开发更省事 项目结构: cloudfunctions目录下是三个云函数 ba ...

  9. vscode调试thinkhphp

    第一步先安装xdebug扩展,我用宝塔环境,所以一键安装 第二步.在vscode中安装插件 我的php.ini是这样的 xdebug.remote_enable = 1 xdebug.remote_a ...

  10. flutter系列之:flutter中常用的Stack layout详解

    [toc] 简介 对于现代APP的应用来说,为了更加美观,通常会需要用到不同图像的堆叠效果,比如在一个APP用户背景头像上面添加一个按钮,表示可以修改用户信息等. 要实现这样的效果,我们需要在一个Im ...