svg_svga - CSDN
svg 订阅
可缩放矢量图形(Scalable Vector Graphics,SVG)是W3C推出的基于XML的二维矢量图形标准。SVG可以提供高质量的矢量图形渲染,同时由于支持JavaScript和文档对象模型,SVG图形通常具有强大的交互能力。另一方面,SVG作为W3C所推荐的基于XML的开放标准,能够与其他网络技术进行无缝集成。 [1] 展开全文
可缩放矢量图形(Scalable Vector Graphics,SVG)是W3C推出的基于XML的二维矢量图形标准。SVG可以提供高质量的矢量图形渲染,同时由于支持JavaScript和文档对象模型,SVG图形通常具有强大的交互能力。另一方面,SVG作为W3C所推荐的基于XML的开放标准,能够与其他网络技术进行无缝集成。 [1]
信息
中文名
可缩放矢量图形
外文名
Scalable Vector Graphics
简    称
SVG
本    质
二维矢量图形标准
SVG简介
SVG是一种开放标准的矢量图形语言,可设计激动人心的、高分辨率的Web图形页面,因为软件提供了制作复杂元素的工具,如渐变、嵌人字体、透明效果、动画和滤镜效果并且可使用平常的字体命令插人到HTML编码中。2000年8月2日,W3C最终发布了SVG候选推荐标准,并希望开发者尽早开始实施SVG。2000年年底SVG推荐标准制定完毕。SVG是一种新型的矢量图形标准,同时它也是一种矢量图形描述的一种标准的语言,这种语言具有非常强的开放性,所以其在应用的过程中主要的对象是网络。SVG在应用的过程中可以适应三种三种形式的图像对象,各种图像对象都可以在实际的工作中对对象进行全面的组合和处理,同时还能按照实际的需要更改其自身的形式,将其定义成预处理的对象。 [2] 
收起全文
  • SVG 快速入门

    2017-11-09 14:31:01
    SVG 全称是 Scalable Vector Graphics,即,矢量图。在 Web 中使用 SVG 可以解决位图放大失真的问题。首先,不要把 SVG 和 CSS,Canvas,HTML 搞混。他们之间并没有你中有我,我中有你的关系。SVG 是通过 XML 的形式...

    SVG 全称是 Scalable Vector Graphics,即,矢量图。在 Web 中使用 SVG 可以解决位图放大失真的问题。首先,不要把 SVG 和 CSS,Canvas,HTML 搞混。他们之间并没有你中有我,我中有你的关系。SVG 是通过 XML 的形式写在 HTML 文档中的。

    如何书写

    <svg x="0px" y="0px" width="450px" height="100px" viewBox="0 0 450 100">
         <rect x="10" y="5" fill="white" stroke="black" width="90" height="90"></rect>
         <circle fill="white" stroke="black" cx="170" cy="50" r="45"></circle>
         <polygon fill="white" stroke="black" points="279,5 294,35 328,40 303,62
          309,94 279,79 258,94 254,62 230,39 263,35"></polygon>
         <line fill="none" stroke="black" x1="410" y1="95" x2="440" y2="6"></line>
         <line fill="none" stroke="black" x1="360" y1="6" x2="360" y2="95"></line>
    </svg>

    大家看 svg 标签中带有一个 viewBox 的属性。这其实是 SVG 中一个很重要的概念,后面的缩放都会与它有关。
    说到这里,我们就需要了解一下关于 SVG 的几个基本概念。

    基本概念

    简单来说有 3 个基本概念:

    • viewport: 物理窗口
    • viewbox: 实物窗口(算了,下面解释)
    • preserveAspectRatio: 保留横纵比

    我们接下来,一个一个的进行讲解吧。

    viewport

    参照上面的 demo,这实际上就是你用 x,y,width,height。这 4 个属性,在页面上固定的矩形区域。

    viewbox

    定义 SVG 元素在 viewport 中的具体尺寸比例。假设有如下内容:

    <svg width="500" height="200" viewBox="0 0 50 20">
     <rect x="20" y="10" width="10" height="5" style="stroke: #000000; fill:none;"></rect>
    </svg>
    • viewport 为 [0,0] 到 [500,200]
    • viewbox 为 [0,0] 到 [50,20]

    默认情况下 SVG 是自动填充满 viewport 的。注意,在 SVG 中,子标签的所有尺寸都是不能带单位的,因为初始单位就是根据上面两个概念确定。
    当为以上情况,SVG 中基本的尺寸则不是 1px,而是 500/50 = 10px。所以,如下的图形大小为:

    <rect x="20" y="10" width="10" height="5" style="stroke: #000000; fill:none;">
    </rect>

    也就是在 SVG 里面定义的 rect 图形,它的实际尺寸为 [200,100] 到 [100,50]。

    preserveAspectRatio

    该属性就是用来定义上面 viewport 和 viewbox 相互对齐的方式。换句话就是说,它的属性可以改变 viewbox 的具体位置。基本格式为:

    <align> [<meetorslice>]
    </meetorslice></align>
    • align: 定义 viewport 和 viewbox 的对齐方式,分为 x,y 轴两个方向。X 轴方向有三种方式:左边重合(xMin),x 轴中点重合(xMid),右边重合(xMax)。同理,Y 轴也有 顶边重合(YMin),y 轴中点重合(YMid),底边边重合(YMax)
    • meetOrSlice: 主要就是定义该 SVG 是内嵌,还是裁剪或是 none(听天有命)。

    其中,align 需要着重理解一下。首先,它的默认值为 xMidYMid,即为中点重合。
    61401

    可以从图中看出,viewbox 是通过中心进行延展的。注意,它的原点坐标还是在 viewbox 的左上角。如果你是动态增加尺寸的话,此时并不是从左到右增加,而是从中心向两端扩张。同理,如果你使用的是 xMinYMin 的话,那么如果存在尺寸变化,那么相对点则是从左上角开始的。简单来说,align 相对点其实一共有 9 个。
    61402
    然后就是 meet || slice || none 这三个属性具体干的事情。
    在这之前,我们需要了解一个公式–缩放比计算公式:

    vb_h * rat_y = vp_h; 或者 vb_w * rat_x = vp_w;
    其中,vb_ 为 viewbox 简写,vp_ 为 viewport 的简写。vb_h 代表就是 viewbox height。vb_w 代表就是 viewbox width。rat_x/y 代表的是 x,y 轴的缩放比例。
    假设有下列情况:

    <svg width="400" height="200" viewBox="0 0 200 200" preserveAspectRatio="xMinYMin slice" style="border:1px solid #cd0000;">
        <rect x="10" y="10" width="150" height="150" fill="#cd0000"></rect>
    </svg>

    那么,rat_x 和 rat_y 分别为:

    • rat_x = 400/200 = 2
    • rat_y = 200/200 = 1

    现在,针对上面 meet/slice 不同的取值,实际应用到 svg 里面的缩放比例是不同的。

    • meet(默认值): 本意是让 svg 尽可能的显示在 viewport 里,即,会在 rat_x 和 rat_y 中选择最小的值作为缩放标准。
    • slice: 本意是让 svg 完全铺满 viewport,即,会在 rat_x 和 rat_y 中选择最大的值作为缩放标准。

    所以针对不同的取值,基准比例也不同。
    当为 meet 的情况,那么实际缩放比例为 1。则里面实际矩形的大小就为 (10,10) 到 (150,150)。
    61403
    当为 slice 的情况,那么实际缩放比例为 2。则里面实际矩形的大小就为 (20,20) 到 (300,300)。
    61404
    如果你的值为 none 的话,他会直接铺满整个 viewport,即,实际矩形大小为:(20,10) 到 (300,150)。
    61405

    响应式 SVG

    虽然讲起响应式,一些童鞋会想这 TM 又是啥奇技淫巧?
    对不起,并不是。。。就是一个 viewbox 并且不带 width/height 而已。
    看个实际的例子吧:

    <svg viewBox="0 0 218.8 87.1">
         <g fill="none" stroke="#000">
           <path d="M7.3 75L25.9 6.8s58.4-6.4 33.5 13-41.1 32.8-11.2 30.8h15.9v5.5s42.6
             18.8 0 20.6"></path>
           <path d="M133.1 58.2s12.7-69.2 24.4-47.5c0 0 4.1 8.6 9.5.9 0 0 5-10 10.4.9 0
             0 12.2 32.6 13.6 43 0 0 39.8 5.4 15.8 15.4-13.2 5.5-53.8
             13.1-77.4 5.9.1 0-51.9-15.4 3.7-18.6z"></path>
    </g>
    </svg>

    可以看到,上面的 svg 标签并没有带上啥 width/height 属性,只是简单描述了 viewBox 的范围而已。当然,里面的尺寸标准都是在这 viewBox 的范围内进行设置的。
    另外,在这里声明一下,本文章并不是新手教程,也就是说,不会教你一步一步的画直线啊,圆啊,矩形啊等等这些基本图形。这些直接 google 一下,一搜一大把。所以,这里假设大家的水平是处于,能对 SVG 基本的图形属性熟悉即可,对一些高级属性还不是很清楚和熟练。OK,继续~
    在 SVG 中,能够直接使用的图形有:

    • rect
    • circle
    • ellipse
    • line
    • polyline
    • polygon

    上面没有啥说的,后面我详细说一下两个比较重要的概念,分组和 Path。

    分组和 Path

    通常 Path 和 分组通常是一起使用的,如上:

    <g fill="none" stroke="#000">
        <path d="M7.3 75L25.9 6.8s58.4-6.4 33.5 13-41.1 32.8-11.2 30.8h15.9v5.5s42.6
          18.8 0 20.6">
        <path d="M133.1 58.2s12.7-69.2 24.4-47.5c0 0 4.1 8.6 9.5.9 0 0 5-10 10.4.9 0
          0 12.2 32.6 13.6 43 0 0 39.8 5.4 15.8 15.4-13.2 5.5-53.8
          13.1-77.4 5.9.1 0-51.9-15.4 3.7-18.6z">
    </path></path></g>

    分组我们放到后面进行讲解,这里先看一下 Path。

    Path

    Path 在 SVG 中的地位应该是比较高的,实际上,利用 Path 这个一个标签可以画出任意的图形。path 中 d(data) 属性是用来定义相关线条数据,通常是以 M/m 为起始,代表的就是 move to 的意思。在 path 中,一共可以定义 10 种不同的图形。例如 M/m,L/l。 大家可以注意,每种标识符有两种书写方式,即,大小写。

    • 大写: 参照的是绝对坐标,即,SVG 的右上角
    • 小写: 参照的相对坐标,即,前一个点的坐标

    而在 10 中不同表示符中,又可以分为直线和曲线两种不同的标识符。这里,我们分类来讲解一下。

    线型

    该使用定义起始点的,没啥特殊的作用。

    <path d="M10 10">
    </path>

    表示,以 (10,10) 为起始点。

    L/l
    原意是 Line to,用来画线段的。格式和 M/m 差不多:

    L x y (or l dx dy)

    H/h
    用来画水平线,即,Horizontal。既然方向已经定了,剩下的就是距离,格式很简单:

    H x (or h dx)

    V/v
    用来画竖直线,即,vertical。同上,方向也定了,格式为:

    V y (or v dy)

    看个例子吧

    <path d="M10 10 H 90 V 90 H 10 L 10 10">
    </path>

    该 path 实际上就是画了一个正方形,宽 = 高 = 90。
    61406
    Z/z
    该标识符用来表示 path 的结束,并且将最后一点和 M/m 标识开头的一点连接起来。所以,它不存在什么表示点之类的,格式为:

    Z (or z)

    而上面也可以进行相关的优化,最终的结果为:

    <path d="M10 10 H 90 V 90 H 10 L 10 10">
    // 使用 Z
    <path d="M10 10 H 90 V 90 H 10 Z" fill="transparent" stroke="black">
    </path></path>

    曲线

    曲线就是 Web 画图中常见的 Bezier Curves(贝塞尔),Arcs,several Bezier curves(很多贝塞尔 – .-)等。
    我们简单看一下:
    C/c
    61407
    基本格式为:

    C x1 y1, x2 y2, x y (or c dx1 dy1, dx2 dy2, dx dy)

    例如:

    <path d="M10 10 C 20 20, 40 20, 50 10" stroke="black" fill="transparent">
    </path>

    S/s
    该标识符实际上使用来表示一个反射贝塞尔,即,在原有贝塞尔上再加一段贝塞尔曲线,所以,S/s 一般和 C/c 一起使用。
    基本格式为:

    S x2 y2, x y (or s dx2 dy2, dx dy)

    实际样式图为:
    61408
    相当于原有的贝塞尔曲线的最后一段进行反向延长并对称。然后加上新定义的一段限制曲线。
    具体实例为:

    <path d="M10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80" stroke="black" fill="transparent">
    </path>

    Q/q
    该标识符是用来定义二次(quadratic)贝塞尔曲线,该曲线相当于上面传统的贝塞尔来说,更加简单,它只需要定义三个点,即可完整一个贝塞尔曲线,具体作图过程如下
    61409
    基本格式为:

    Q x1 y1, x y (or q dx1 dy1, dx dy)

    即为图上点, P1(x1,y1),P2(x,y)

    起始点为 M 定义的点,例如

    <path d="M10 80 Q 95 10 180 80" stroke="black" fill="transparent">
    </path>

    T/t
    该标识符和 S 差不多,也是一个贝塞尔曲线的延长。相当于原曲线的控制点 P1 相当于 end point P2 做对称,然后,只需要定义一个终点即可,即,T/t 只需要定义贝塞尔曲线里面的终点即可:

    T x y (or t dx dy)

    如图:
    614010
    所以,简单来说,C/S,Q/T 是两两搭配一起使用的。在使用的时候,千万不要搞混即可。

    弧线

    A/a
    该曲线是用来画弧线(Arcs),而,弧线通常是圆/椭圆的一部分。当,椭圆的两个轴径长相等则为圆,所以,A/a 是按照椭圆作为基准格式:

    A rx ry x-axis-rotation large-arc-flag sweep-flag x y
     a rx ry x-axis-rotation large-arc-flag sweep-flag dx dy

    说实在的,这个比较复杂。因为,他画椭圆的方式和我们平常不一样,一般情况下,椭圆只要确定一个中心,然后是长短轴,然后是弧度范围即可。

    但是,它这里是通过椭圆上的两点来确定的,在加上旋转角度,俩轴径等因素来确定的。另外,需要注意,它的起始点是从上一个命令的结束点位置开始计算的。OK,我们首先简单了解一下格式里面的参数:

    • rx,ry: 代表的就是长轴短轴,没得说。
    • x,y: 代表的是弧长的结束点。开始点就是上一个命令的终点。
    • x-axis-rotation: x 轴的旋转角度。顺时针为正
    • large-arc-flag[0,1]: 表示取大弧还是小弧。因为两点之间的弧长有两部分。
    • sweep-flag[0,1]: 取顺时针的弧,还是逆时针的弧长。参考点是以起始点开始的。

    上面几个属性中,比较难理解的就是 large-arc-flag 和 sweep-flag。这么说吧,前面几个属性充其量只能确定椭圆的位置,和经过椭圆的两个点,不过,一般能通过指定两点的椭圆有两个,而通过这两点划分又会出现 4 段弧长。为了确定 4 个弧长中,是哪一个,需要两个值来确定。即,4 抽 2,2 抽 1。

    614011
    简单说一种,例如当,laf 和 sf 都为 0的情况。首先,laf 为 0 选择的是小弧长。所以,里面两段比较小的弧长被抽出来。然后,sf 为 0 选择的是逆时针。即,以起始点为参考,选择通过逆时针方向到达终点的那段弧。即,2 抽 1。最终得出我们需要的弧。
    说实在的,这个是真复杂。。。
    给一个参考 codepen
    一般情况下,我们并不需要手动来确定 path,有工具为啥不用工具呢!
    比如,Illustrator, Sketch 等,都可以自动生成 SVG。不过,生成之后,需要对代码做相关的压缩优化,这些都可以直接在编译器里面找到。
    你也可以用一下可视化工具 SVGOMG 来简单看一下。

    分组

    SVG 中的分组你可以理解为 PS 中的图层,一块图层里面通常只会放一下高内聚的图形,这样既方便移动又方便做动画。SVG 中的分组标签就是 g,使用 g 标签包裹的所有子元素都认同为一组。
    例如:

    <g>
        <circle cx="20" cy="20" r="20" fill="green">
        <circle cx="70" cy="70" r="20" fill="purple">
      </circle></circle></g>
      <g>
        <rect x="110" y="110" height="30" width="30" fill="blue">
        <rect x="160" y="160" height="30" width="30" fill="red">
      </rect></rect></g>

    需要注意的是,使用 g 进行分组,并不会改变原有元素的在屏幕上展示的效果。
    不过,g 标签除了分组,还有另外一个很重要的功能–动画

    分组动画
    在分组重定义动画是直接写在 transform 属性当中的。实际上,每个子标签都可以使用 transform 的相关属性。

    <g transform="translate(...) scale(...) rotate(...) translate(...) rotate(...)">
      ...
    </g>

    每种变换动画之间是通过 空格或逗号 连接的。它的执行顺序是从右到左。为啥呢?实际上可以理解为,这就是几个嵌套的 g 叠在一起。

    <g transform="translate(...) scale(...) rotate(...) translate(...) rotate(...)">
        ...
      </g>
      
      // Being Equivalent to this:
      <g transform="translate(...)">
       <g transform="scale(...)">
         <g transform="rotate(...)">
           <g transform="translate(...)">
             <g transform="rotate(...)">
               ...
             </g>
           </g>
         </g>
       </g>
     </g>

    具体可以使用的动画形式和 CSS 动画一模一样,详情可以参考: SVG 动画

    原文链接: https://www.villianhr.com/2017/04/17/SVG 快速入门

    展开全文
  • 走入SVG

    2018-10-22 21:38:09
    SVG可缩放矢量图形(Scalable Vector Graphics)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式。SVG是W3C("World Wide Web ConSortium 在2000年8月制定的一种新的二维矢量图形格式,也是规范中...
  • SVG 50个实例 SVG实例

    2020-07-30 16:32:20
    50个左右SVG sample,是我学习SVG时候的留下的痕迹,初学者也许可以从中学到一些东西。 50个左右SVG sample,是我学习SVG时候的留下的痕迹,初学者也许可以从中学到一些东西。
  • svg 超详细 制作

    2018-08-04 20:37:05
    最近网站开发,发现网站用到 svg。感觉这么简单东西,随便弄弄就行。结果倒腾半天没弄好。还是去学习了一下。经验分享一下吧。给遇到同样问题的程序狗们一点指引,少走弯路。  网站上的点赞,点完后,显示已点赞。...

    最近网站开发,发现网站用到 svg。感觉这么简单东西,随便弄弄就行。结果倒腾半天没弄好。还是去学习了一下。经验分享一下吧。给遇到同样问题的程序狗们一点指引,少走弯路。

     网站上的点赞,点完后,显示已点赞。

    我做的效果图

    这种图不是普通的加个 jpg或者png就行。它是跟html标签差不多可以,指定属性就改变颜色的

    <svg style="fill:red" version="1.1"
         xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
         x="0px" y="0px" width="1024px" height="1024px" viewBox="-31.873 29.659 1024 1024"
         enable-background="new -31.873 29.659 1024 1024" xml:space="preserve">
    <path fill-rule="evenodd" clip-rule="evenodd" fill="" stroke="" stroke-miterlimit="10" d="M999.127,161.027
         M475.127,939.027 M40.5,899.659c0,0-40-355.999-40-441.999s82-92,82-92s176-10,220-8s22,38,58,36s134-174,102-236s-2-138,70-154
        s134,30,180,110s30,208,30,208s104,0,146,0s70,48,86,94s-26,154-28,148s2,30,16,74s-18,64-20,64s16,38,0,80
        c-16,41.999-38,49.999-38,51.999s22,22-22,82s-98,68-98,68s-384,0-386,0s-46-22-56-20s-36,20-36,20h-174
        C72.5,983.659,40.5,899.659,40.5,899.659z M514.127,273.395c0-128,28-192,38-202s94,4,124,122s-14,195.631-14,195.631
        s304,4.369,226,2.369s54-20,34,86s-88,64-64,68s54,66,42,104s-52,36-46,37s44-3,32,59s-68,56-68,60s44,16,26,54s-70,56-70,56
        s-306,0-354,0s-54-28-54-28v-430C408.127,405.395,514.127,401.395,514.127,273.395z M274.313,915.198v-484h-198c0,0-26-5.999-28,18
        c-2,24,40,442,40,442s20,24,34,24S274.313,915.198,274.313,915.198z"/>
    </svg>

    像这样,指定一下 style fill 就能变成红色

    具体制作过程

    打开 ai 新建文件

    2 钢笔工具

    绘制 三个路径

    两个小的路径,选中 右击 排列 置于顶层 三个路径放到一起

    ctrl F11 

    选择

    使用奇偶填充规则

    然后选中 三个对象 依次点击  对象 复合路径 建立

    存储为web格式,选择 svg即可

    都看到这里了,是时候打赏一下啦!!!!!!!!!!!!!!!

    谢谢大爷

    谢谢大爷

    谢谢大爷

    谢谢大爷

    谢谢大爷

    谢谢大爷

    谢谢大爷

    谢谢大爷

    谢谢大爷

    谢谢大爷

    谢谢大爷

    谢谢大爷

    谢谢大爷

    谢谢大爷

    得到的代码

    <?xml version="1.0" encoding="utf-8"?>
    <!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In  -->
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
        <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
    ]>
    <svg version="1.1"
         xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
         x="0px" y="0px" width="1024px" height="1024px" viewBox="-69.934 -169.91 1024 1024"
         enable-background="new -69.934 -169.91 1024 1024" xml:space="preserve">
    <defs>
    </defs>
    <path fill-rule="evenodd" clip-rule="evenodd" fill="#040000" stroke="#000000" stroke-miterlimit="10" d="M792.066,0.5
        l60.242,454.217L0.5,443.874V0.5H792.066z M437.464,69.174l20.481,321.688l321.688-43.373L757.945,78.813L437.464,69.174z
         M39.873,78.813l9.638,285.542l308.434-18.072L344.692,69.174L39.873,78.813z"/>
    </svg>

    然后把 绿色那俩地方删掉

    用style 填充颜色即可

    代码+效果图

    红色代码为 设置的颜色代码

    <svg style="fill:green" version="1.1"
         xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
         x="0px" y="0px" width="1024px" height="1024px" viewBox="-69.934 -169.91 1024 1024"
         enable-background="new -69.934 -169.91 1024 1024" xml:space="preserve">
    <defs>
    </defs>
    <path fill-rule="evenodd" clip-rule="evenodd" fill="" stroke="" stroke-miterlimit="10" d="M792.066,0.5
        l60.242,454.217L0.5,443.874V0.5H792.066z M437.464,69.174l20.481,321.688l321.688-43.373L757.945,78.813L437.464,69.174z
         M39.873,78.813l9.638,285.542l308.434-18.072L344.692,69.174L39.873,78.813z"/>
    </svg>

    展开全文
  • HTML5如何使用SVG

    2019-01-05 00:46:13
    代码优化永远是程序员亘古不变的需求,而合理的利用SVG图片来代替部分PNG/JPG等格式的图片则是前端优化重要的一环,既然是优化,那我们先来看看SVG图片都有哪些优势: SVG 可被非常多的工具读取和修改(比如记事本...

    代码优化永远是程序员亘古不变的需求,而合理的利用SVG图片来代替部分PNG/JPG等格式的图片则是前端优化重要的一环,既然是优化,那我们先来看看SVG图片都有哪些优势:

    • SVG 可被非常多的工具读取和修改(比如记事本)
    • SVG 与 JPEG 和 GIF 图像比起来,尺寸更小,且可压缩性更强。
    • SVG 是可伸缩的
    • SVG 图像可在任何的分辨率下被高质量地打印
    • SVG 可在图像质量不下降的情况下被放大
    • SVG 图像中的文本是可选的,同时也是可搜索的(很适合制作地图)
    • SVG 可以与 Java 技术一起运行
    • SVG 是开放的标准
    • SVG 文件是纯粹的 XML

    #####几个SVG图片小例子:
    image
    #####我们来看一下第三个分享图标的代码:

    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
      <g stroke="#AAB0BA" fill="none" fill-rule="evenodd">
        <path d="M10.524 3.413v8.235" stroke-linejoin="round"/>
        <path d="M13.027 7.508c.813 0 1.678-.01 1.678-.01.449 0 .812.376.812.826l-.005 6.36a.819.819 0 0 1-.811.826H6.31a.822.822 0 0 1-.811-.826l.005-6.36c0-.456.36-.825.812-.825l1.689.006M8.373 5.111l2.143-2.09 2.143 2.07"/>
      </g>
    </svg>
    

    不了解SVG的同学现在一定一脸问号,就跟我第一次见他们一样,别着急,我们从基础看起。

    什么是SVG?

    SVG 是一种基于 XML 语法的图像格式,全称是可缩放矢量图(Scalable Vector Graphics)。其他图像格式都是基于像素处理的,SVG 则是属于对图像的形状描述,所以它本质上是文本文件,体积较小,且不管放大多少倍都不会失真。此外SVG 是万维网联盟的标准,SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体。

    怎么使用?

    在 HTML5 中,您能够将 SVG 元素直接嵌入 HTML 页面中,例如上面的那颗小红心:

    <body>
      <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20" viewBox="0 0 20 20">
        <defs>
          <rect id="a" y="54" width="60" height="25" rx="1"/>
          <mask id="b" x="0" y="0" width="60" height="25" fill="#fff">
            <use xlink:href="#a"/>
        </mask>
        </defs>
        <g transform="translate(-9 -56)" fill="none" fill-rule="evenodd">
          <use stroke="#EDEEEF" mask="url(#b)" stroke-width="2" xlink:href="#a"/>
          <path d="M19.05 62.797c-.208-.268-1.776-2.188-3.629-1.725-.662.165-1.439.44-2.009 1.463-2.18 3.913 4.965 8.983 5.615 9.433V72l.023-.016.023.016v-.032c.65-.45 7.795-5.52 5.615-9.433-.57-1.023-1.347-1.298-2.009-1.463-1.853-.463-3.42 1.457-3.629 1.725z" fill="red"/>
        </g>
      </svg>
    </body>
    

    SVG 代码也可以写在一个以.svg结尾的文件中,然后用<img><object><embed><iframe>等标签插入网页。

    <img src="search.svg">
    <object id="object" data="search.svg" type="image/svg+xml"></object>
    <embed id="embed" src="search.svg" type="image/svg+xml">
    <iframe id="iframe" src="search.svg"></iframe>
    

    CSS也可以使用svg

    .logo {
      background: url(logo.svg);
    }
    

    SVG 文件还可以转为 BASE64 编码,然后作为 Data URI 写入网页。

    <img src="data:image/svg+xml;base64,[data]">
    

    SVG的语法

    1. <svg>标签
    SVG 代码都放在顶层标签<svg>之中。下面是一个例子。

    <svg width="100%" height="100%">
      <circle id="mycircle" cx="50" cy="50" r="50" />
    </svg>
    

    <svg>的width属性和height属性,指定了 SVG 图像在 HTML 元素中所占据的宽度和高度。除了相对单位,也可以采用绝对单位(单位:像素)。如果不指定这两个属性,SVG 图像默认大小是300像素(宽) x 150像素(高)。

    如果只想展示 SVG 图像的一部分,就要指定viewBox属性。

    <svg width="100" height="100" viewBox="50 50 50 50">
      <circle id="mycircle" cx="50" cy="50" r="50" />
    </svg>
    

    <viewBox>属性的值有四个数字,分别是左上角的横坐标和纵坐标、视口的宽度和高度。上面代码中,SVG 图像是100像素宽 x 100像素高,viewBox属性指定视口从(50, 50)这个点开始。所以,实际看到的是右下角的四分之一圆。

    注意,视口必须适配所在的空间。上面代码中,视口的大小是 50 x 50,由于 SVG 图像的大小是 100 x 100,所以视口会放大去适配 SVG 图像的大小,即放大了四倍。

    如果不指定width属性和height属性,只指定viewBox属性,则相当于只给定 SVG 图像的长宽比。这时,SVG 图像的默认大小将等于所在的 HTML 元素的大小。

    2. <circle>标签
    <circle>标签代表圆形。

    <svg width="300" height="180">
      <circle cx="30"  cy="50" r="25" />
      <circle cx="90"  cy="50" r="25" class="red" />
      <circle cx="150" cy="50" r="25" class="fancy" />
    </svg>
    

    上面的代码定义了三个圆。<circle>标签的cx、cy、r属性分别为横坐标、纵坐标和半径,单位为像素。坐标都是相对于<svg>画布的左上角原点。

    class属性用来指定对应的 CSS 类。

    .red {
      fill: red;
    }
    
    .fancy {
      fill: none;
      stroke: black;
      stroke-width: 3pt;
    }
    

    SVG 的 CSS 属性与网页元素有所不同。

    fill:填充色
    stroke:描边色
    stroke-width:边框宽度

    3. <line>标签
    <line>标签用来绘制直线。

    <svg width="300" height="180">
      <line x1="0" y1="0" x2="200" y2="0" style="stroke:rgb(0,0,0);stroke-width:5" />
    </svg>
    

    上面代码中,标签的x1属性和y1属性,表示线段起点的横坐标和纵坐标;x2属性和y2属性,表示线段终点的横坐标和纵坐标;style属性表示线段的样式。

    4. <polyline>标签
    <polyline>标签用于绘制一根折线。

    <svg width="300" height="180">
      <polyline points="3,3 30,28 3,53" fill="none" stroke="black" />
    </svg>
    

    <polyline>的points属性指定了每个端点的坐标,横坐标与纵坐标之间与逗号分隔,点与点之间用空格分隔。

    5. <rect>标签
    <rect>标签用于绘制矩形。

    <svg width="300" height="180">
      <rect x="0" y="0" height="100" width="200" style="stroke: #70d5dd; fill: #dd524b" />
    </svg>
    

    <rect>的x属性和y属性,指定了矩形左上角端点的横坐标和纵坐标;width属性和height属性指定了矩形的宽度和高度(单位像素)。

    6. <ellipse>标签
    <ellipse>标签用于绘制椭圆。

    <svg width="300" height="180">
      <ellipse cx="60" cy="60" ry="40" rx="20" stroke="black" stroke-width="5" fill="silver"/>
    </svg>
    

    <ellipse>的cx属性和cy属性,指定了椭圆中心的横坐标和纵坐标(单位像素);rx属性和ry属性,指定了椭圆横向轴和纵向轴的半径(单位像素)。

    7. <polygon>标签
    <polygon>标签用于绘制多边形。

    <svg width="300" height="180">
      <polygon fill="green" stroke="orange" stroke-width="1" points="0,0 100,0 100,100 0,100 0,0"/>
    </svg>
    

    <polygon>的points属性指定了每个端点的坐标,横坐标与纵坐标之间与逗号分隔,点与点之间用空格分隔。

    8. <path>标签
    <path>标签用于制路径。

    <svg width="300" height="180">
    <path d="
      M 18,3
      L 46,3
      L 46,40
      L 61,40
      L 32,68
      L 3,40
      L 18,40
      Z
    "></path>
    </svg>
    

    <path>的d属性表示绘制顺序,它的值是一个长字符串,每个字母表示一个绘制动作,后面跟着坐标。

    M:移动到(moveto)
    L:画直线到(lineto)
    Z:闭合路径
    9. <text>标签
    <text>标签用于绘制文本。

    <svg width="300" height="180">
      <text x="50" y="25">肆客足球</text>
    </svg>
    

    <text>的x属性和y属性,表示文本区块基线(baseline)起点的横坐标和纵坐标。文字的样式可以用class或style属性指定。

    10. <use>标签
    <use>标签用于复制一个形状。

    <svg viewBox="0 0 30 10" xmlns="http://www.w3.org/2000/svg">
      <circle id="myCircle" cx="5" cy="5" r="4"/>
    
      <use href="#myCircle" x="10" y="0" fill="blue" />
      <use href="#myCircle" x="20" y="0" fill="white" stroke="blue" />
    </svg>
    

    <use>的href属性指定所要复制的节点,x属性和y属性是<use>左上角的坐标。另外,还可以指定width和height坐标。

    11. <g>标签
    <g>标签用于将多个形状组成一个组(group),方便复用。

    <svg width="300" height="100">
      <g id="myCircle">
        <text x="25" y="20">圆形</text>
        <circle cx="50" cy="50" r="20"/>
      </g>
    
      <use href="#myCircle" x="100" y="0" fill="blue" />
      <use href="#myCircle" x="200" y="0" fill="white" stroke="blue" />
    </svg>
    

    12. <defs>标签
    <defs>标签用于自定义形状,它内部的代码不会显示,仅供引用。

    <svg width="300" height="100">
      <defs>
        <g id="myCircle">
          <text x="25" y="20">圆形</text>
          <circle cx="50" cy="50" r="20"/>
        </g>
      </defs>
    
      <use href="#myCircle" x="0" y="0" />
      <use href="#myCircle" x="100" y="0" fill="blue" />
      <use href="#myCircle" x="200" y="0" fill="white" stroke="blue" />
    </svg>
    

    13. <pattern>标签
    <pattern>标签用于自定义一个形状,该形状可以被引用来平铺一个区域。

    <svg width="500" height="500">
      <defs>
        <pattern id="dots" x="0" y="0" width="100" height="100" patternUnits="userSpaceOnUse">
          <circle fill="#bee9e8" cx="50" cy="50" r="35" />
        </pattern>
      </defs>
      <rect x="0" y="0" width="100%" height="100%" fill="url(#dots)" />
    </svg>
    

    上面代码中,<pattern>标签将一个圆形定义为dots模式。patternUnits="userSpaceOnUse"表示<pattern>的宽度和长度是实际的像素值。然后,指定这个模式去填充下面的矩形。

    14. <image>标签
    <image>标签用于插入图片文件。

    <svg viewBox="0 0 100 100" width="100" height="100">
      <image xlink:href="path/to/image.jpg"
        width="50%" height="50%"/>
    </svg>
    

    上面代码中,<image>xlink:href属性表示图像的来源。

    15. <animate>标签
    <animate>标签用于产生动画效果。

    <svg width="500px" height="500px">
      <rect x="0" y="0" width="100" height="100" fill="#feac5e">
        <animate attributeName="x" from="0" to="500" dur="2s" repeatCount="indefinite" />
      </rect>
    </svg>
    

    上面代码中,矩形会不断移动,产生动画效果。

    <animate>的属性含义如下。

    attributeName:发生动画效果的属性名。
    from:单次动画的初始值。
    to:单次动画的结束值。
    dur:单次动画的持续时间。
    repeatCount:动画的循环模式。
    可以在多个属性上面定义动画。

    <animate attributeName="x" from="0" to="500" dur="2s" repeatCount="indefinite" />
    <animate attributeName="width" to="500" dur="2s" repeatCount="indefinite" />
    

    16. <animateTransform>标签
    <animate>标签对 CSS 的transform属性不起作用,如果需要变形,就要使用标签。

    <svg width="500px" height="500px">
      <rect x="250" y="250" width="50" height="50" fill="#4bc0c8">
        <animateTransform attributeName="transform" type="rotate" begin="0s" dur="10s" from="0 200 200" to="360 400 400" repeatCount="indefinite" />
      </rect>
    </svg>
    

    上面代码中,<animateTransform>的效果为旋转(rotate),这时from和to属性值有三个数字,第一个数字是角度值,第二个值和第三个值是旋转中心的坐标。from="0 200 200"表示开始时,角度为0,围绕(200, 200)开始旋转;to="360 400 400"表示结束时,角度为360,围绕(400, 400)旋转。

    JavaScript 操作SVG

    1. DOM操作
    如果 SVG 代码直接写在 HTML 网页之中,它就成为网页 DOM 的一部分,可以直接用 DOM 操作。

    <svg
      id="mysvg"
      xmlns="http://www.w3.org/2000/svg"
      viewBox="0 0 800 600"
      preserveAspectRatio="xMidYMid meet"
    >
      <circle id="mycircle" cx="400" cy="300" r="50" />
    <svg>
    

    上面代码插入网页之后,就可以用 CSS 定制样式。

    circle {
      stroke-width: 5;
      stroke: #f00;
      fill: #ff0;
    }
    
    circle:hover {
      stroke: #090;
      fill: #f8f8f8;
    }
    

    然后,可以用 JavaScript 代码操作 SVG。

    var mycircle = document.getElementById('mycircle');
    
    mycircle.addEventListener('click', function(e) {
      console.log('circle clicked - enlarging');
      mycircle.setAttribute('r', 60);
    }, false);
    

    上面代码指定,如果点击图形,就改写circle元素的r属性。

    2. 获取 SVG DOM
    使用<object><iframe><embed>标签插入 SVG 文件,可以获取 SVG DOM。

    
    var svgObject = document.getElementById('object').contentDocument;
    var svgIframe = document.getElementById('iframe').contentDocument;
    var svgEmbed = document.getElementById('embed').getSVGDocument();
    

    注意,如果使用标签插入 SVG 文件,就无法获取 SVG DOM。

    3. 读取 SVG 源码
    由于 SVG 文件就是一段 XML 文本,因此可以通过读取 XML 代码的方式,读取 SVG 源码。

    <div id="svg-container">
      <svg
        xmlns="http://www.w3.org/2000/svg"
        xmlns:xlink="http://www.w3.org/1999/xlink"
        xml:space="preserve" width="500" height="440"
      >
        <!-- svg code -->
      </svg>
    </div>
    

    使用XMLSerializer实例的serializeToString()方法,获取 SVG 元素的代码。

    var svgString = new XMLSerializer()
      .serializeToString(document.querySelector('svg'));
    

    4. SVG 图像转为 Canvas 图像
    首先,需要新建一个Image对象,将 SVG 图像指定到该Image对象的src属性。

    var img = new Image();
    var svg = new Blob([svgString], {type: "image/svg+xml;charset=utf-8"});
    
    var DOMURL = self.URL || self.webkitURL || self;
    var url = DOMURL.createObjectURL(svg);
    
    img.src = url;
    

    然后,当图像加载完成后,再将它绘制到<canvas>元素。

    img.onload = function () {
      var canvas = document.getElementById('canvas');
      var ctx = canvas.getContext('2d');
      ctx.drawImage(img, 0, 0);
    };
    

    小结

    SVG能做的远不止这些,利用SVG做的动画效果,文字效果我们以后给大家详细讲解,今天就先到这里吧。

    ###技术放肆聊QQ群:617413307 欢迎程序员朋友积极加群,共同进步
    ###技术放肆聊公众号,每日干货,最前沿的技术知识,扫描下方二维码关注:
    技术放肆聊

    展开全文
  • 了解SVG

    2012-06-14 00:28:55
    教程细节· 语言: JavaScript,HTML, SVG· 难度: 中等· 预计阅读时间:...除了IE 9.0和Android V3之前版本外的所有浏览器都支持SVG。Canvas也有同样的支持情况,所以问题往往表现为:我们应该使用哪种方案? 今天


    教程细节

    ·      语言: JavaScript,HTML, SVG

    ·      难度: 中等

    ·      预计阅读时间: 30 分钟

     

            SVG-可缩放矢量图形 ,是一个XML风格标记驱动的矢量图形的浏览器渲染引擎。除了IE 9.0Android V3之前版本外的所有浏览器都支持SVGCanvas也有同样的支持情况,所以问题往往表现为:我们应该使用哪种方案?

            今天,我们将全面介绍SVG,并且解释为什么我应该使用哪一个这个问题通常的答案是我要用它们来做什么要得到SVG的完整信息,请查看Mozilla关于此主题的文档。你还可以看看SVG DOM API


    概述

            我们将首先概述SVG的一些独特的优势。 然后,用不着通读SVG所有长达80页的节点类型,我们将说明如何通过Illustrator快速的把SVG文档加入到网页中。我们还会讲讲D3.js,一个强大的、SVG控制的JavaScript库。

    “SVG并不只用于像素处理。


    SVG的主要优点

            除了用于某些应用上跨图像或者基于Canvas的渲染之外,SVG还有相当多的优点。 SVG并不只用于进行像素处理,但是它能够很好地处理矢量图形和可编程性的矢量。

    分辨率无关

            你可能不知道,分辨率无关和浏览器不可知论是近来前端开发中热议的话题(想想响应式设计)。大多数用来解决分辨率问题(例如视网膜屏幕上)的方案既导致了大量不必要的数据下载(高清图像替换)又为一个或者其他浏览器进行了妥协。这使得无线网络中更高分辨率图像的传输往往受限于数据下载速度的瓶颈。这并不理想。

            SVG提供了一种方法来提供全分辨率的图形元素:不管什么大小的屏幕,缩放比例或着分辨率。 直到SVG出现之前,我们只能通过CSS和文本渲染看到清晰的元素样式。在SVG里不需要使用div:after元素来创建简单的形状和其他效果。相反你可以创建各种矢量形状。

    “SVG提供了一种方法来提供全分辨率的图形元素:不管什么大小的屏幕,缩放比例或着分辨率

    基于DOM节点的API

            你写HTML吗? JavaScriptCSS呢? 是的。 现在你已经知道了很多关于编写SVG的信息。 SVG实际上使用和XML兼容的格式来定义其呈现的形状。除此之外,你可以用CSS为形状添加样式,使它们与JavaScript进行交互。多个像D3.jsRaphaelJS库可以协助你。下面是一组SVG元素的例子(Envato叶子)。你也可以在JSFiddle看到这个示例 

    <svg>
    <g>
       <g>
          <path fill="#8BAC54" d="M28.028,104.509c-35.271,44.527-36.619,105.084-7.616,150.407
             c26.073-66.957,58.919-142.287,99.378-209.543C81.802,61.428,46.351,81.377,28.028,104.509z M278.797,11.28
             c-0.408-3.492-2.227-6.447-4.845-8.41c-2.5-2.097-5.802-3.197-9.304-2.784c0,0-10.403,2.227-26.959,6.483
             C158.62,82.498,93.735,184.229,43.453,281.932c1.875,1.628,3.778,3.255,5.749,4.794c56.202,44.471,137.782,34.972,182.238-21.163
             C282.657,200.806,278.797,11.28,278.797,11.28z"/>
       </g>
       <g>
          <path fill="#B1C982" d="M58.392,293.368c59.428-95.491,133.438-188.549,220.117-247.851c0.558-20.869,0.289-34.238,0.289-34.238
             c-0.408-3.492-2.227-6.447-4.845-8.41c-2.5-2.097-5.802-3.197-9.304-2.784c0,0-10.403,2.227-26.959,6.483
             C158.62,82.498,93.735,184.229,43.453,281.932c1.875,1.628,3.778,3.255,5.749,4.794C52.185,289.102,55.271,291.308,58.392,293.368
             z"/>
       </g>
    </g>
    </svg>

            SVG基于DOM节点的API比起客户端侧的CanvasAPI来说,无疑具有更高的可访问性。你可以由此做到:

    • 在服务器端创建基于SVG文档的图像
    • 像其他HTML元素一样检查SVG元素
    • 通过你熟悉的技术(JSCSS)编程来处理形状、样式和位置
    • SVG节点绑定事件函数

            DOM API为使用SVG提供了更多一系列明显的优势。

    无须不必要的HTTP请求

            当你在HTML中使用<img>标签来引入图像时,就是定义了一个用户浏览器需要请求的文件。这个请求会占用带宽,需要更多宝贵的时间来下载。如果你的图像用一组DOM节点来代替,可以减少额外的HTTP请求,使你的网站速度更快,对用户更加友好。

    简单交互脚本

            尽管现在浏览器大战,跨浏览器的DOMAPI在脚本的交互性方面提供了广泛的灵活性,可以延伸到SVG元素上。可以通过CSSSVG添加样式;SVG元素支持浏览器事件API使得的通过脚本进行交互不在话下;还可以轻松的将一个事件函数绑定到SVG元素的节点上。

            这不是真正在画布上绘制的元素。由于画布是一个简单的像素渲染引擎,绘制的元素不能在内存中保存为对象。脚本将保持这些元素的收集工作,并监管所有相关的位置和大小信息来在事件循环中寻找和触发事件。除此之外,Z-index也由脚本处理。

            让我们来看看一个例子。请注意:为了保持简洁,我们将使用jQuery

    var circleCenter = [200, 300], radius = 50;
    $(window).on("mousemove", function(e){
       var mx = e.pageX, my = e.pageY;
       if (mx > circleCenter[0] - radius && mx < circleCenter[0] + radius && my > circleCenter[1] - radius && my < circleCenter[1] + radius){
          // now we are hovering
       }
     
    });

            相比之下,我们可以看到使用SVG可以更简单的完成相同任务。

    $("svg path#circle").on("hover", function(event){
       // That's all.
    });

            显然开发者编写简单交互的脚本来说效率更高。

    实际应用

            有大量的Canvas相关的JS库(例如KineticJS可以让你实现一些酷炫的功能)。但如果你像我一样,就不会在你的Web应用里使用完全的物理引擎。作为替代,我最经常需要可扩展的图标、交互图以及详细的、美观的方式来把信息呈现给用户。大多数我需要的图形就是简单易用的公式。这些图形元素很容易的使用SVG来创建,许多简单的物理方程可以处理你的这些需求。所以让我们来看看SVG的一些实际应用。

    图形
            因为SVG最大的优势是基本的矢量形状,自然非常适用于图形和信息图表。它不仅非常适合用来从给定的数值创建静态的图表,还适用于“实时的”图形:通过AJAX请求、用户输入或者随机生成的数据生成。

    路线图
            路线图由坚硬的线条和精确的形状组成。这些形状可以用向量图形很好的展示。

    复杂的UI元素

            例如现在你需要一个UI元素,看上去像圆圈金字塔。你如何用HTMLCSS来实现?好吧,你要先为每一个洞创建一堆的div,为它们每个赋予确定的圆角边框和边框样式。然后你要使用一个div容器来定位它们。现在你如果想要一个整体的渐变该如何实现?你可能必须要使用Mask,或者一些其他技术。我们宁可不使用图像,因为它们不可扩展,而且不能用可编程的方式来重新渲染或者改变。相反,为什么不在Illustrator中绘制元素,并且将它保存为一个SVG文件?这将会让你有一个单独的、可扩展的元素,并且不用担心多个div的管理。

    Logos
            多数标志都是基于矢量的。你可以为你的Logo定义一个SVG文档,并且把它放到任何地方,随时缩放为任何尺寸,而完全不需要牺牲质量或者占用过多的带宽。

    简单游戏
            Canvas
    适合游戏渲染,这并不是秘密。另外的原因是游戏往往不依赖于矢量图形,相反它们使用基于像素的艺术字和动画。然而,SVG对于需要更少字符动画和更多信息展示的游戏来说是一个很棒的选择(例如数独游戏)。


    为什么你可能不使用SVG

            现在我们已经看过了许多SVG的优点,让我们来看看许多开发者为什么仍然选择不使用SVG。最主要有两个原因:

            1、他们从来没有听说过SVG或者从没想过需要它,所以都忽略了(这不再是借口!)

            2、 SVG XML文档看起来相对古老和复杂,好像使用图像更加简单。

            当然没有任何人想手动编辑SVG XML里的一个个点。幸运的是,没有人需要这么做。这是人们常常没有意识到的部分,这里有许多工具来编辑SVG,所以你永远不需要手动来做这件事。


    SVG工具

    Illustrator,Inkscape

            这个矢量编辑器最有可能把你的文件保存为SVG。立即来试试吧!打开Illustrator,画一两个圆,并且把文件保存为SVG。然后在Sublime或者其他文本编辑器中打开,你能够立即看到,除了一些额外的元数据,SVGXML可以马上应用到HTML中。你最有可能看到<g>标签(group),<path>标签(path)以及<svg>元素。

    D3.js

            虽然你完全可以把SVG XML直接拖放到一个HTML文件中,但是当你想要动态创建SVG时怎么办?D3.js是一个基于数据操作文档的JS库。换句话说,它的伟大之处在于可以基于一系列的数据生成例如条形图和线状图的SVG元素。我们选择展示D3是因为它符合浏览器里SVG实际实现的词汇,请注意另外还有一些很棒的非标准SVG库(值得注意的是Raphael.js)。

            D3.jsSVG处理外还提供其他更多功能。(请确保你查看了D3.js官网上的示例和这个讨论

    示例一:脉冲圈

            在第一个例子里,我们使用Math.sinsetInterval构造的迭代器简单的创建一个脉冲圈。

    示例二:更新线状图

            在这个例子里,我们将用一些随机值更新绘制的线状图。


    什么时候不用SVG?

            SVG可以处理很多浏览器里的图像渲染需求。虽然我们有很多使用SVG的理由,但是就像任何伟大的事物一样,也有一些地方它表现不是很好。

    • 如果你需要渲染上千个节点,更高性能的办法是在Canvas上进行。
    • 如果你的应用需要IE8的支持,记得你需要提供另外一个备用的向量(例如更复杂的 VML),或者依靠响应式的图像来完全替代向量。

    有用链接

            这里有一些有用的连接,可以帮助你更好的了解SVG

            你还发现了SVG的其他用途吗?请在评论中告诉我们,还要感谢你的阅读。

            译自:http://net.tutsplus.com/tutorials/why-arent-you-using-svg/

            转载请注明:来自蒋宇捷的博客

    展开全文
  • SVG

    2019-06-13 15:41:36
    强大的前端绘制 http://www.ruanyifeng.com/blog/2018/08/svg.html
    展开全文
  • SVG 画图

    2019-04-18 12:03:51
    把画的图片代码保存成svg文件,加载 http://www.bejson.com/convert/image_to_svg/https://www.aconvert.com/cn/image/png-to-svg/ 参考一 SVG 是一种基于 XML 语法的图像格式,全称是可缩放矢量图(Scalable ...
  • svg绘制简单流程图

    2017-12-19 11:34:34
    通过svg绘制简单的静态流程图 效果如下: 实现方式: var draw = document.createElementNS("http://www.w3.org/2000/svg","svg"); tar.topDom.append(draw); $(draw).css({"width":"690px","heigh
  • 使用svg图片

    2019-02-19 14:32:53
    使用svg图片IOS 使用SVG图标一,使用第三方框架 SVGKit1. svg 图片显示 OC 代码2. svg 图片显示 swift 代码3. svg 集成方式二,使用UIWebView/WKWebView进行加载Android 使用SVG图标新的改变功能快捷键合理的创建...
  • SVG格式本身就是矢量图形格式,可以随意缩放。但是如果如果整个画面都是通过SVG进行搭建,同一个SVG图形嵌入在HTML中,要同时满足多个分辨率屏幕的查看,还是需要进行一些额外的设置,包括JS动态设置width、height等...
  • 今天要做一张关于OPPO手机的海报,其中有一个地方需要OPPO的logo,于是想找一张高分辨率的OPPO logo的PNG图片,并且是最新版的oppo logo,发现网上都没有,于是根据以前敲代码的经验,想使用Photoshop开SVG文件,...
  • SVG图引入到HTML网页,目前只有三种办法,前两种很相似,第三种更简单。下来介绍一下这是那种方法。第一种:使用标签: ...<embed src="example.svg" width="300" height="300" type="image/svg+xml" pluginspa
  • SVG 拖动以及缩放

    2018-01-26 15:01:03
    首先我是需要一个SVG图的缩放和平移,svg图是自己做的,然后里面有自己做的动画以及其他时间,但是前几天客户说要改需求,说需要这个图实现SVG的拖动和缩放, MD,我只是一个后端啊,好吧,后端和前端已经感觉没有...
  • 改变SVG图的颜色

    2018-07-20 15:49:53
    今早收到UI的icon文件夹,好多都是SVG的图,有些图标的颜色不是图稿中需要的颜色,那么这个时候怎么自己手动修改想要的颜色呢? 首先,它原先的颜色长这样    我们先在SVG图上右击,用记事本打开,然后就会看到一堆...
  • 创建和导出SVG的技巧

    2016-03-25 21:22:29
    我们在响应式网页设计的工作中经常用到SVG,这个过程通常包括设计阶段和开发阶段。设计阶段通常是由不懂编程的设计师们完成的。因为原生SVG作为一种图像格式和文档格式,在图形编辑器中创建SVG效果的每一步,都会...
  • 中国省份地图 svg格式

    2020-07-30 13:21:30
    中国svg地图 只具体到省。 svg格式: SVG格式 SVG是一种用XML定义的语言,用来描述二维矢量及矢量/栅格图形。SVG提供了3种类型的图形对象:矢量图形(vectorgraphicshape例如:由直线和曲线组成的路径)、图象(image)...
  • 刚好最新的Axure RP 8.0版本支持导入SVG矢量图,可以直接把SVG导入到原型中。   这里就给大家推荐一个SVG图标资源库,请移步:> 阿里巴巴矢量图标库   该网站可以使用新浪微博账号和Github账号登录,登录之后...
  • 在CSS背景图片中使用SVG的优点 在CSS背景图片中使用SVG,可以使用css background属性的诸多特性,比如图片尺寸和图片位置等等。可以非常轻松的根据设备的尺寸来控制图片的尺寸,还有一个好处就是可以不用把SVG图片...
  • vue中使用svg-icon

    2018-10-13 15:40:47
    之前也写过一篇这样的文章,只需要配置在线地址,即可自动下载几个字体文件,但是呢,我发现还有一种更好的写法,也是大众化的写法,即 svg标签,参考如何优雅的使用icon,可以完全参考这篇进行开发。  我就是记录...
1 2 3 4 5 ... 20
收藏数 101,894
精华内容 40,757
关键字:

svg