SVG

概述:

    SVG 基于 XML 语法的图像格式,它可以任意改变其大小也不会变形,是一种和图像分辨率无关的可缩放矢量图。

优点:

    1.任意放缩:用户可以任意缩放图像显示,而不会破坏图像的清晰度、细节等。

    2.文本独立:SVG图像中的文字独立于图像,文字保留可编辑和可搜寻的状态。也不会再有字体的限制,用户系统即使没有安装某一字体,也会看到和他们制作时完全相同的画面。

    3.较小文件:总体来讲,SVG文件比那些GIF和JPEG格式的文件要小很多,因而下载也很快。

 4.超强显示效果:SVG图像在屏幕上总是边缘清晰,它的清晰度适合任何屏幕分辨力和打印分辨力。

 5.超级颜色控制:SVG图像提供一个1 600万种颜色的调色板,支持ICC颜色描述文件标准、RGB、线X填充、渐变和蒙版。

 6.交互性和智能化:SVG面临的主要问题一个是如何和已经占有重要市场份额的矢量图形格式Flash竞争的问题,另一个问题就是SVG的本地运行环境下的厂家支持程度。

注:GIF、JPEG,png等都是位图,改变其尺寸大小图像会变形或会出现马赛克模糊等情况

用法:

SVG 文件可以直接插入网页,成为 DOM 的一部分,然后用 JavaScript 和 CSS 进行操作。


上面是 SVG 代码直接插入网页的例子。效果图如下:


SVG 代码也可以写在一个独立文件中,然后用<img>、<object>、<embed>、<iframe>等标签插入网页。


效果图如下:


实际上,除了img标签是引入该svg的路径来加载图片的,其他的是三个标签都是通过将svg标签的所有属性值放在dom层里加载出来;

CSS 也可以使用 SVG 文件


注意:svg图片如果作为背景图放在css里面写的话,需要固定宽高,且加上background-size属性,来规定背景图像的尺寸;

语法:

1、<svg>标签:SVG 代码都放在顶层标签<svg>之中;


属性:width(宽度)、height(高度);可用具体像素单位和百分比;不指定则为默认值width=300px;height=150px;  viewBox = “x,y,width,height” 分别是<svg>画布上左上角的横坐标和纵坐标、视口的宽度和高度

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

左图是加了viewBox属性的,右图是去掉viewBox属性的;存在的可视区域都是100*100的,而实际上此时circle的大小是不一样的,分别是200*200,100*100


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

2、<circle>标签:代表圆形 

    <circle  cx="50"  cy="50"  r="50" class="red"/>

属性:cx:横坐标,cy:纵坐标,r:半径,单位为像素。坐标都是相对于<svg>画布的左上角原点。                                 class属性用来指定对应的 CSS 类。且svg的css与网页元素不同。

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

3、 <line>标签:用来绘制直线 

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

属性:x1:线段起点的横坐标;y1:线段起点的纵坐标;x2:线段终点的横坐标;y2:线段终点的纵坐标;style:线段的样式。


4、<polyline>标签:用于绘制一根折线     

    <polyline   points="3,3 30,28 3,53"   fill="none"  stroke="black"/>

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

5、 <rect>标签:用于绘制矩形

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

属性:x:矩形左上角端点的横坐标;y:矩形左上角端点的纵坐标;width:矩形的宽度;height:矩形的高度

6、<ellipse>标签:用于绘制椭圆

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

属性:cx:椭圆中心的横坐标;cy:椭圆中心的纵坐标;rx:椭圆横向轴的半径;ry:椭圆纵向轴的半径

7 、<polygon>标签:用于绘制多边形

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

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

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

    <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>

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

            M:移动到(moveto);L:画直线到(lineto);Z:闭合路径

9、<text>标签:用于绘制文本

    <text    x="50"    y="25"   class="txt">Hello World</text>

属性:x:文本区块基线(baseline)起点的横坐标;y:文本区块基线(baseline)起点的纵坐标。文字的样式可以用class或style属性指定。

10、 <use>标签:用于复制一个形状

    <circle    id="myCircle"    cx="5"    cy="5"    r="4"/>

    <use    href="#myCircle"    x="10"    y="0"    fill="blue"/>

属性:href:指定所要复制的节点,x:<use>左上角的横坐标;y:<use>左上角的纵坐标;width:<use>的宽度;height:<use>的高度;

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

<g    id="myCircle">    <textx="25"y="20">圆形</text>    <circle    cx="50"    cy="50"    r="20"/>    </g>

属性:<g>里面可以套别的svg的专有标签</g>

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

<defs>    <text    x="25"    y="20">圆形</text>    </defs>

    属性:想写啥写啥,但是内容可以被use标签复制引用;相当于被visblity:hidden了,但是仍然在dom结构中

13、<image>标签:用于插入图片文件。

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

属性:xlink:href:图片的来源路径;width:图片的宽度;hieght:图片的高度


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

<pattern    id="dots"    x="0"    y="0"    width="100"    height="100"    patternUnits="userSpaceOnUse">    <circlefill="#bee9e8"cx="50"cy="50"r="35"/>  </pattern>

<rect    x="0"    y="0"    width="100%"    height="100%"    fill="url(#dots)"/>

属性:x:横坐标;y:纵坐标;width:<pattern>的宽度;hieght:<pattern>的高度。patternUnits="userSpaceOnUse"表示<pattern>的宽度和长度是实际的像素值。通过在别的标签中(rect)用fill="url(#pattern)"属性;来填充满这个标签(矩形)的内容区域;



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

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

属性:attributeType:指定attributeName属性的属性,默认为"auto",attributeName:发生动画效果的属性名;from:单次动画的初始值;to:单次动画的结束值;dur:单次动画的持续时间;repeatCount:动画的循环模式。

注:可以在多个属性上面定义动画

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

<animate    TransformattributeName="transform"    type="rotate"    begin="0s"    dur="10s"    from="0 200 200"    to="360 400 400"    repeatCount="indefinite"/>

属性:type:<animateTransform>的效果为旋转(rotate),from:旋转开始时的角度值、旋转中心的横坐标、纵坐标,围绕(200、纵200)旋转;to:旋转结束时的角度值、旋转中心的横坐标、纵坐标,围绕(400, 400)旋转。


SVG 图像入门教程:http://www.ruanyifeng.com/blog/2018/08/svg.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容

  • 作者: 阮一峰www.ruanyifeng.com/blog/2018/08/svg.html 一、概述 SVG ...
    grain先森阅读 2,811评论 0 12
  • 代码优化永远是程序员亘古不变的需求,而合理的利用SVG图片来代替部分PNG/JPG等格式的图片则是前端优化重要的一...
    周小肆阅读 1,976评论 0 10
  • @(HTML5)[canvas与SVG] [TOC] 十一 、SVG HTML体系中,最常用的绘制矢量图的技术是S...
    踏浪free阅读 4,574评论 0 2
  • 一、概述 SVG 是一种基于 XML 语法的图像格式,全称是可缩放矢量图(Scalable Vector Grap...
    CRUD_科科阅读 629评论 0 1
  • SVG API: SVG是一种可缩放矢量图形,一种二维图形表示语言 与canvas不同的是,在浏览器的开发工具中能...
    Iris_mao阅读 1,011评论 0 5