SVG介绍

147 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

SVG是什么

可缩放矢量图形Scalable Vector Graphics,SVG)基于 XML 标记语言,用于描述二维的矢量图形

svg不同于canvas,这个格式提供的是矢量图而非点阵图,因此不会出现失真的情况,同时在数据可视化、复杂的动画方面比较有优势。

SVG环境如何准备

  • 浏览器中直接打开
  • 以标签的方式直接内嵌在html中
  • 作为CSS背景图或者img标签引入

SVG绘画

svg的绘画并不像canvas依赖于JS的API,我们可以直接通过书写xml格式的标签进行绘画。

画布属性

svg标签拥有width、height属性用来控制画布宽高,viewBox="x y w h"设置可视区域,xmlns和xmlns:xlink设置xml规范和命名空间

图形

  • 基本图形

    • 圆形,cx、cy为圆心坐标,r为圆的半径

    • 矩形,x、y为起始点坐标,width、height为宽高,rx、ry为矩形圆角半径

    • 椭圆,cx、cy为圆心坐标,rx、ry设置xy轴半径

    • 线条,x1、y1设置起点,x2、y2设置终点

    • 折现(或线段集)points通过设置多个点的字符串确定连接点的坐标

      • <polyline points="0 0, 20 40, 70 80, 100 90, 200 30, 250 50"/>
    • 类似polyline,不过最后一个点会和第一个点连接。

  • path

    • path拥有强大的自由度,可以绘制复杂的线条和图形,支持直线、矩形甚至贝塞尔曲线,通过d属性修改线条

    • 直线命令

      命令作用
      M x y提起画笔(不画线,仅改变下一次绘制起点)
      L x y移动画笔,画线式的M
      H x画一条横线
      V y画一条竖线
      Z闭合起点和终点
    • 曲线命令

      命令作用
      Q x1 y1,x y绘制二次贝塞尔曲线,x1 y1为终点,x y为控制点
      T x yx、y为终点位置,通过前一个控制点推断出后一个控制点
      C x1 y1, x2 y2, x yx、y为终点位置,x1、y1为曲线起始点的控制点,x2、y2为曲线终止的控制点。
      S x2 y2, x y简化的三次贝塞尔曲线
      A rx ry x-axis-rotation large-arc-flag sweep-flag x yrx、ry为两个轴向半径,x-axis-rotation为弧度在x轴的旋转角度,large-arc-flag为0表示劣弧(小角),否则为优弧,x、y为终点

轮廓和填充

  • 填充

    属性内容
    fillnone、合法的颜色表示(red、#66ccff、rgb()等)
    fill-opacity填充透明度,用0~1的小数表示
    fill-rule设置判断内部的算法(evenodd、nonzero)
  • 轮廓

    属性内容
    stroke轮廓颜色
    stroke-width轮廓宽度
    stroke-linecap轮廓终点形状(miter、round、bevel)
    stroke-dasharray虚线属性(实线长,虚线长,实线长。。。)
    stroke-opacity轮廓透明度

动画

类似canvas动画,svg想要动态地变换,依然要借助JS或CSS,我们可以通过JS动态地修改svg标签的属性(尤其是path中的d属性)来创作动画。

当然,要想屏蔽复杂的底层,我们可以借助AI绘制svg图形,然后用GSAP工具进行动画的创作。