HTML5之SVG的使用

一、什么是SVG?

  • SVG 指可伸缩矢量图形 (Scalable Vector Graphics);
  • SVG 用于定义用于网络的基于矢量的图形;
  • SVG 使用 XML 格式定义图形;
  • SVG 图像在放大或改变尺寸的情况下其图形质量不会有损失;
  • SVG 是万维网联盟的标准;

二、SVG的优势

  • SVG 图像可通过文本编辑器来创建和修改;
  • SVG 图像可被搜索、索引、脚本化或压缩;
  • SVG 是可伸缩的;
  • SVG 图像可在任何的分辨率下被高质量地打印;
  • SVG 可在图像质量不下降的情况下被放大;

三、使用SVG绘制圆形

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>
<body>
    <svg xmlns="http://www.w3.org/2000/svg" height="500px" width="500px" version="1.1">
      <circle cx="200" cy="100" r="100" stroke="#afeedd"
      stroke-width="5" fill="#f0ddff" />
    </svg>
</body>
</html>

  • <svg>标签中heightwidth属性是设置SVG文档的高宽,version属性可定义所使用的 SVG 版本,xmlns 属性可定义 SVG 命名空间;
  • <circle>是SVG中用来创建圆形的标签,cxcy 属性定义圆中心的 xy 坐标,如果忽略这两个属性,那么圆点会被设置为 (0, 0),r属性定义圆的半径;
  • strokestroke-width 属性控制如何显示形状的轮廓,fill 属性设置形状内的颜色;
    我们看一下演示效果图:
    1.png

四、使用SVG绘制矩形

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>
<body>
    <svg xmlns="http://www.w3.org/2000/svg" width="500px" height="500px" version="1.1">
      <rect x="50" y="100" width="300" height="150"
      style="fill:rgb(145,245,255);stroke-width:5;stroke:#EE799F;fill-opacity:0.9;stroke-opacity:0.9;"/>
    </svg>
</body>
</html>
  • rect 元素的 widthheight属性可定义矩形的高度和宽度;
  • style 属性用来定义 CSS 属性
  • CSS 的 fill 属性定义矩形的填充颜色(rgb 值、颜色名或者十六进制值);
  • CSS 的 stroke-width 属性定义矩形边框的宽度;
  • CSS 的 stroke 属性定义矩形边框的颜色;
  • 属性定义矩形的左侧位置,y 属性定义矩形的顶端位置
  • CSS 的 fill-opacity 属性定义填充颜色透明度,取值为0-1;
  • CSS 的 stroke-opacity 属性定义轮廓颜色的透明度,取值为0-1;
    我们看一下效果演示图:
    2.png

五、使用SVG绘制多边形

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>
<body>
    <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500px" height="500px">
      <polygon points="100,10 40,180 190,60 10,60 160,180" style="fill:#B4EEB4;stroke:#DB7093   ;stroke-width:3;fill-rule:nonzero;"/>
    </svg>
</body>
</html>
  • <polygon> 标签用来创建含有不少于三个边的图形,也就是多边形,多边形是由直线组成,其形状是"封闭"的;
  • points 属性定义多边形每个角的 x 和 y 坐标,x和y之间用逗号隔开,坐标与坐标之间用空格隔开;
  • fill-rule属性用于指定使用哪一种算法去判断画布上的某区域是否属于该图形“内部”,它有三个有效值nonzero(非零) 、evenodd(奇偶)、inherit,默认为nonzero;
    我们来看一下效果演示图:


    3.png

六、SVG模糊效果

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>
<body>
    <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
        <defs>
            <filter id="keai" x="0" y="0">
                <feGaussianBlur in="SourceGraphic" stdDeviation="10" />
            </filter>
        </defs>
    <rect width="150" height="100" stroke="red" stroke-width="5"
  fill="#7EC0EE" filter="url(#keai)" />
    </svg>
</body>
</html>
  • <filter>元素id属性定义一个滤镜的唯一名称;
  • <feGaussianBlur>元素定义模糊效果;
  • in="SourceGraphic"这个部分定义了由整个图像创建效果;
  • stdDeviation属性定义模糊量;
  • <rect>元素的滤镜属性用来把元素链接到"f1"滤镜,这里是一个矩形;
    效果演示图:
    4.png

七、SVG 阴影

<body>
    <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500px" height="500px">
      <defs>
        <filter id="myImg" x="0" y="0" width="200%" height="200%">
          <feOffset result="offOut" in="SourceGraphic" dx="10" dy="10" />
          <feColorMatrix result = "matrixOut" in = "offOut" type = "matrix" values = "0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0"/>
          <feGaussianBlur result="blurOut" in="matrixOut" stdDeviation="10" />
          <feBlend in="SourceGraphic" in2="blurOut" mode="normal" />
        </filter>
      </defs>
      <rect width="200" height="200" stroke="#90EE90" stroke-width="5" fill="#FFEFDB" filter="url(#myImg)" />
    </svg>
</body>
  • <defs>元素定义短并含有特殊元素(如滤镜)定义;
  • <filter>标签用来定义SVG滤镜,<filter>标签使用必需的id属性来定义向图形应用哪个滤镜;
  • <feOffset>元素是用于创建阴影效果;
  • <feColorMatrix>过滤器是用来转换偏移的图像使之更接近黑色的颜色;
  • <feGaussianBlur>元素的stdDeviation属性定义了模糊量;
    演示图:


    5.png

八、SVG渐变

<body>
    <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500px" height="500px">
        <defs>
            <linearGradient id="yuan" x1="0%" y1="0%" x2="100%" y2="0%">
            <stop offset="0%" style="stop-color:rgb(238,210,238);stop-opacity:1" />
            <stop offset="100%" style="stop-color:rgb(255,250,205);stop-opacity:1" />
            </linearGradient>
        </defs>
        <ellipse cx="200" cy="200" rx="150" ry="80" fill="url(#yuan)" />
    </svg>
</body>
  • 渐变是一种从一种颜色到另一种颜色的平滑过渡。另外,可以把多个颜色的过渡应用到同一个元素上;
  • <linearGradient>元素用于定义线性渐变,<linearGradient>标签必须嵌套在<defs>的内部;
  • <linearGradient>标签的id属性可为渐变定义一个唯一的名称;
  • <linearGradient>标签的X1,X2,Y1,Y2属性定义渐变开始和结束位置;
  • 渐变的颜色范围可由两种或多种颜色组成,每种颜色通过一个<stop>标签来规定,offset属性用来定义渐变的开始和结束位置;
    演示图:


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

推荐阅读更多精彩内容

  • 一.什么是SVG? SVG 指的是可伸缩矢量图形 (Scalable Vector Graphics),它用来定义...
    nightZing阅读 16,877评论 11 62
  • 一、什么是SVG? SVG指可伸缩矢量图形(Scalable Vector Graphics); SVG用来定义用...
    清心挽风阅读 1,333评论 1 3
  • SVG 学习笔记 SVG是什么 SVG 指可伸缩矢量图形 (Scalable Vector Graphics) S...
    Penn_Xu阅读 915评论 0 1
  • 什么是SVG? SVG 指可伸缩矢量图形 (Scalable Vector Graphics) SVG 用来定义用...
    hojun阅读 805评论 0 5
  • @(HTML5)[canvas与SVG] [TOC] 十一 、SVG HTML体系中,最常用的绘制矢量图的技术是S...
    踏浪free阅读 4,473评论 0 2