本篇重点是基础知识, 但愿您看完以后能够对svg作出一些简单的修改, 或者是一个小图片不用再等ui作完给咱们, 咱们能够本身动手制做.css
XML 被设计用来传输和存储数据, 指可扩展标记语言(_EX_tensible _M_arkup _L_anguage)
HTML 被设计用来显示数据。html
SVG 是使用 XML 来描述二维图形和绘图程序的语言。(节选自w3school)前端
矢量图介绍短片html5
<svg width="500" height="500" version="1.1"
xmlns="http://www.w3.org/2000/svg">java
例如SVG< a>元素和HTML< a>若是一个被称为svg:a和另外一个html:a,则能够区分该元素, 做用就是防止svg标签内的元素与html元素混乱一团.
html5中不写这句影响也不大.面试
<?xml version="1.0" standalone="no"?> <!-- 1: 总体的长宽, 规则定义 --> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg"> <!-- 1:矩形 --> <!-- x, y 左上角的位置 --> <!-- fill: 填充的颜色 --> <rect width="100" height="100" style="x:20; y:20;" /> <!-- 1:圆形 --> <!-- 2: cx,cy 圆心的坐标 --> <!-- 3: r半径 --> <circle cx="70" cy="220" r="50" fill="red"></circle> <!-- 3: 直线 --> <!-- 两个点的坐标 --> <line x1="160" y1="80" x2="300" y2="80" style="stroke:green;stroke-width:16;"></line> <!-- 4: 多点线 --> <!-- 会自动把第一个点与最后一个点链接起来 --> <!-- points:一组一组的xy坐标 --> <polyline points="500,60 330,60 420,180"></polyline> <!-- 5: 多边形 --> <polygon points="470,400 450,320 410,320 410,340 410,440" style="fill:red;stroke:red;stroke-width:2"></polygon> </svg>
如图所示:json
<rect width="100" height="100" x="20" y="20" />
setAttribute('x', 200)
让他x轴变为200<?xml version="1.0" standalone="no"?> <!-- 1: 视野 --> <!-- viewBox: 我能看到哪一部分, 当前就是左上角 --> <!-- viewBox就算小了, 可是总体的宽高是不变的, 因此会有放大缩小效果 --> <!-- 2: 若是viewport和viewBox的宽高比不相同。你须要本身来指定如何在SVG阅读器(如浏览器)中显示SVG图像。你能够在<svg>中使用preserveAspectRatio属性来指定。 --> <!-- preserveAspectRatio meet就是保持原比例不失真--> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 100" preserveAspectRatio="none meet"> <rect width="200" height="200" style="x:20; y:20; rx:20;ry:60; fill:rgb(0,0,255);stroke-width:16; stroke:black"/> </svg>
1: 不设置viewBox浏览器
2: 设置后网络
viewBox不影响总体svg的大小与比例, 只是以多大的窗口展现这个svg图片前端工程师
神奇的 g 标签
<?xml version="1.0" standalone="no"?> <!-- 1: <g>标签分组了, 就有面向对象的概念了 --> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg"> <!-- 定义了总体的属性 --> <!-- 2: 能够多层嵌套替换 --> <g style="fill:rgb(0,0,255);stroke-width:16"> <rect width="100" height="100" style="x:20; y:20; rx:20;ry:60; stroke:black"/> <rect width="100" height="100" style="x:20; y:140; rx:20;ry:60; stroke:black"/> </g> </svg>
效果以下图, 如出一辙的两个图形
<?xml version="1.0" standalone="no"?> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg"> <g style="fill:rgb(0,0,255);stroke-width:16"> <rect width="100" height="100" style="x:20; y:20; rx:20;ry:60; stroke:black"/> <rect width="100" height="100" style="x:20; y:140; rx:20;ry:60; stroke:black"/> <g style="fill:red;stroke-width:16"> <rect width="100" height="100" style="x:20; y:260; rx:20;ry:60; stroke:black"/> </g> </g> </svg>
如图:
使用<use>标签进行引用图形, 而且在use标签上进行新图形的操做, 能够直接设置xy之类的东西.
<?xml version="1.0" standalone="no"?> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg"> <g id="cc"> <rect width="100" height="100" x="20" y="20" /> </g> <use xlink:href="#cc" transform="translate(160,0)" fill="red"/> </svg>
这里可能会出现做用域的问题, 可是放在html里面就没问题了
后面会讲问什么放在html里面会好, 已经如何解决这个问题!!!
有问题的同窗能够用下面的代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg"> <g id="cc"> <rect width="100" height="100" x="20" y="20" /> </g> <use xlink:href="#cc" transform="translate(160,0)" fill="red"/> </svg> </body> </html>
效果以下:
<?xml version="1.0" standalone="no"?> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg"> <!-- 1: 定义了一组渐变, 设置id方便引用 --> <defs> <!-- 这里指定了渐变的区域, 1-0的范围 --> <linearGradient id="orange_red" x1="0%" y1="0%" x2="100%" y2="0%"> <stop offset="0%" style="stop-color:rgb(255,255,0); stop-opacity:1"/> <stop offset="100%" style="stop-color:rgb(255,0,0); stop-opacity:1"/> </linearGradient> </defs> <!-- 1: 引入相应的渐变颜色 --> <ellipse cx="200" cy="190" rx="85" ry="55" style="fill:url(#orange_red)"/> </svg>
如图所示:
<?xml version="1.0" standalone="no"?> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg"> <!-- 1: 定义填充类 --> <defs> <!-- 2: 内容写在这里 --> <pattern id="cc" x="0" y="0" width="0.2" height="0.2"> <circle cx="10" cy="10" r="10" fill="red"> </circle> </pattern> </defs> <rect width="400" height="400" fill="url(#cc)" style="x:20; y:20; rx:60;ry:60;stroke:black"/> </svg>
如图所示:
<?xml version="1.0" standalone="no"?> <svg width="600" height="600" version="1.1" xmlns="http://www.w3.org/2000/svg"> <!-- 1: 把path当成一支画笔, path就是一鼓作气的绘制操做 --> <!-- 2: M 是移动的xy m是移动的相对距离 c是curveto曲线图 --> <!-- 3: L画直线 --> <path d="M153 334 C153 334 151 334 151 334 C151 339 153 344 156 344 C164 344 171 339 171 334 C171 322 164 314 156 314 C142 314 131 322 131 334 C131 350 142 364 156 364 C175 364 191 350 191 334 C191 311 175 294 156 294 C131 294 111 311 111 334 C111 361 131 384 156 384 C186 384 211 361 211 334 C211 300 186 274 156 274" style="fill:white;stroke:red;stroke-width:2"/> </svg>
如图所示:
简单的也有
<?xml version="1.0" standalone="no"?> <svg width="600" height="600" version="1.1" xmlns="http://www.w3.org/2000/svg"> <path d="M150 0 L75 200 L225 200 Z" /> </svg>
如图所示:
<?xml version="1.0" standalone="no"?> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg"> <!-- 1: 理论上svg并非一个专业处理文字的载体 --> <!-- 2: style标签可使用大部分css属性啦, 不用要px --> <!-- 3: xy对应的是左下角的基线, 而不是完美的左下角 --> <!-- 4: 文字的颜色也要放在fill属性里面, 这也更符合工程化 --> <text x="200" y="200" style="font-size:26;" fill="red">蚊子蚊子1</text> <!-- 5: 针对里面每个字符设置距离 --> <!-- dx dy 具体到每一个文字的距离 --> <!-- 那么我其实能够巧用svg来搞点花里胡哨的 --> <!-- 用波浪形画个❤ --> <!-- 再加上动画效果, 就是扭动起来的文字啦 --> <text x="200" y="300" dx="0 20 60 " dy="0 20 40" style="font-size:26;" fill="blue">蚊子蚊子2</text> <!-- tspan标签对文字的单独处理(含镂空!!!!) --> <text x="200" y="100" style="font-size:40"> <tspan fill="red">蚊子3</tspan> <tspan stroke="blue" fill="none">蚊子4</tspan> </text> </svg>
如图所示:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <title>textpath</title> </head> <body> <svg xmlns='http://www.w3.org/2000/svg' width='800' height='600'> <path id="path1" d='M 100 200 Q 200 100 300 200 T 500 200' stroke='rgb(0,255,0)' fill='none'> </path> <text style='font-size:24px;'> <textpath xlink:href='#path1'> 学来学去学来, 你还学得动吗哈哈哈!! </textpath> </text> </svg> </body> </html>
去掉 fill='none':
加上 fill='none:
加上这个就能够不用在html文件中才能显示了, 也就是规定了做用域
<?xml version="1.0" standalone="no"?> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <path id="my" d="M 100 200 Q 200 100 300 200 T 500 200" /> </defs> <text x="10" y="200" style="font-size:26" fill="red"> <textPath xlink:href="#my"> 学来学去学来, 你还学得动吗哈哈哈!! </textPath> </text> </svg>
使用svg可不仅是把svg放在html结构中
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <!-- 1: 这个为啥网上没人说? -->  <!-- 2: embed标签引入 --> <embed id="cc" src="./2.基本图形.svg" width="500" height="500" type="image/svg+xml" pluginspage="http://www.adobe.com/svg/viewer/install/" /> <!-- 3: object --> <object data="./2.基本图形.svg" width="300" height="100" type="image/svg+xml" codebase="http://www.adobe.com/svg/viewer/install/" /> </body> </html>
仍是要单独强调一下, svg有本身的比例, 可是若是你的项目须要把svg图片撑满容器的时候, 你就要在svg标签上设置preserveAspectRatio="none meet", 不然是不容许破话svg比例的.(也可直接preserveAspectRatio ="none")
svg不是前端工程师的必修课, 同时也不是一门必须使用的技术, 不要据说svg好就强制使用,咱们要知道它好在哪,怎么用更好才行.但经过学习svg的相关知识可使咱们能够靠本身作出更多绚丽的东西, 也会扩充不少有趣的知识点, 铸造咱们更好的思惟与知识体系.此次就是这样, 但愿和你一块儿进步.