svg可缩放矢量图形
位图:由像素点组合成图像 canvas
矢量图:以数学向量方式记录图像,内容以线条和色块为主. svg
svg是基于xml的技术
文件后缀.svg
<svg></svg>是最外层的根结点
xmlns定义svg命名空间
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" cy="50" r="40" stroke="black"
stroke-width="2" fill="red" />
</svg>
如何引入外部的svg文件
svg文件
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" cy="50" r="40" stroke="black"
stroke-width="2" fill="red" />
</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>
<style>
.style{
width: 300px;
height: 100px;
background-image: url('./1svg.svg');
}
</style>
</head>
<body>
<!-- 方法一 -->
<img src="./1svg.svg" alt="">
<!-- 方法二 -->
<div class="style"></div>
<!-- 方法三 -->
<iframe src="./1svg.svg"></iframe>
</body>
</html>
在html中直接使用svg
<!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>
<div class="demo">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="300px" height="100px">
<circle cx="100" cy="50" r="40" stroke="black"
stroke-width="2" fill="red" />
</svg>
</div>
</body>
</html>
svg中基本属性有哪些
stroke-width 边框宽度
stroke 边框颜色
fill 填充的颜色
rx ry 相当于border-radius
Stroke-opacity 透明度
矩形
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<rect width="300" height="100"
style="fill:rgb(0,0,255);stroke-width:1;stroke:rgb(0,0,0)"/>
</svg>
圆
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" cy="50" r="40" stroke="black"
stroke-width="2" fill="red"/>
</svg>
椭圆
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <ellipse cx="300" cy="80" rx="100" ry="50" style="fill:yellow;stroke:purple;stroke-width:2"/></svg>
直线
<svg xmlns="http://www.w3.org/2000/svg" version="1.1”>
//x1 y1 x2 y2 两点坐标
<line x1="0" y1="0" x2="200" y2="200"
style="stroke:rgb(255,0,0);stroke-width:2"/>
</svg>
多边形
<svg height="210" width="500"> <polygon points="200,10 250,190 160,210" style="fill:lime;stroke:purple;stroke-width:1"/></svg>
曲线
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <polyline points="20,20 40,25 60,40 80,120 120,140 200,180" style="fill:none;stroke:black;stroke-width:3" /></svg>
路径
M = moveto. 移动到的点的x轴和y轴的坐标
L = lineto. 需要两个参数,分别是一个点的x轴和y轴坐标,L命令将会在当前位置和新位置(L前面画笔所在的点)之间画一条线段。
H = horizontal lineto. 绘制平行线 一个参数 水平线终点x坐标
V = vertical lineto 绘制垂直线 一个参数 垂直线终点y坐标
C = curveto 参数有两个控制点 (x1,y1)(x2,y2) 和 (x,y)代表曲线的终点
S = smooth curveto
Q = quadratic Bézier curve
T = smooth quadratic Bézier curveto
A = elliptical Arc
Z = closepath 闭合路径 从当前点画一条直线到路径的起点
注意:以上所有命令均允许小写字母。大写表示绝对定位,小写表示相对定位。
相对命令使用的是小写字母,它们的参数不是指定一个明确的坐标,而是表示相对于它前面的点需要移动多少距离
直线
<svg xmlns="http://www.w3.org/2000/svg" version="1.1”>
<path d="M150 0 L75 200 L225 200 Z" /></svg>
曲线
<path d="M10 10 C 20 20, 40 20, 50 10" stroke="black" fill="transparent"/>
Svg中的标签
整体平移 cx=“200px” cy=“200px” 在g标签中不起作用,因为不是所有图形都有这两个属性 ,可用transform="translate(200,200)"代替
<div class="demo">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="300px" height="300px">
<!--整体平移 cx="200px" cy="200px" 在g标签中不起作用,因为不是所有图形都有这两个属性 ,可用transform="translate(200,200)"代替-->
<g stroke-width="2" stroke="black" transform="translate(100,100)">
<circle cx="100" cy="50" r="40" fill="transparent"/>
<circle cx="100" cy="50" r="45" fill="transparent"/>
<circle cx="100" cy="50" r="50" fill="transparent"/>
</g>
</svg>
</div>
<text>标签
<div class="demo">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="300px" height="300px">
<g style="cursor:pointer">
<circle cx="100" cy="50" r="45" fill="transparent" stroke-width="2" stroke="black"/>
<!-- text-anchor="middle" 文本居中 start 巨左 end居右-->
<text x='80' y='50' font-size='16px' text-anchor="middle">科鲁兹</text>
</g>
</svg>
</div>
标签
<div class="demo">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="300px" height="300px">
<g style="cursor:pointer">
<image x='0' y='0' width="300" height="300" xlink:href="a.jpg"></image>
<circle cx="100" cy="50" r="45" fill="transparent" stroke-width="2" stroke="black"/>
<!-- text-anchor="middle" 文本居中 start 巨左 end居右-->
<text x='80' y='50' font-size='16px' text-anchor="middle">科鲁兹</text>
</g>
</svg>
</div>
标签
<div class="demo">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="300px" height="300px">
<g style="cursor:pointer">
<image x='0' y='0' width="300" height="300" xlink:href="a.jpg"></image>
<circle cx="100" cy="50" r="45" fill="transparent" stroke-width="2" stroke="black"/>
<!-- text-anchor="middle" 文本居中 start 巨左 end居右-->
<text x='80' y='50' font-size='16px' text-anchor="middle">科鲁兹</text>
</g>
</svg>
</div>
被引用元素的容器
<svg width="300px" height="300px" version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<g id="ShapeGroup">
<rect x="50" y="50" width="100" height="100" fill="#69C" stroke="red" stroke-width="2"/>
<circle cx="100" cy="100" r="40" stroke="#00f" fill="none" stroke-width="5"/>
</g>
</defs>
<use xlink:href="#ShapeGroup" transform="translate(-10,0) scale(0.5)"/>
<use xlink:href="#ShapeGroup" transform="translate(10,10) scale(1)"/>
<use xlink:href="#ShapeGroup" transform="translate(50,60) scale(1.5)"/>
</svg>
<use x = "100" y = "60" xlink:href = "#s1"/>
标签与类似
嵌入在
在svg中使用动画
重复在5秒内淡化矩形
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<rect x="20" y="20" width="250" height="250" style="fill:blue">
<animate attributeType="CSS" attributeName="opacity" from="1" to="0" dur="5s" repeatCount="indefinite" />
</rect>
</svg>
用javascript动态创建svg
createElementNS() 创建命名空间
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<meta content="width=device-width;initial-scale=1">
<script>
function onLoad(){
var mysvg = document.getElementById("svg_my");
var rectObj = document.createElementNS("http://www.w3.org/2000/svg","rect");
if(rectObj){
rectObj.setAttribute("width",100);
rectObj.setAttribute("height",100);
rectObj.setAttribute("style","fill:rgb(0,0,255);stroke-width:1;stroke:rgb(0,0,0)");
mysvg.appendChild(rectObj);
alert("hello");
}
}
window.onload = onLoad;
</script>
</head>
<body>
<svg id="svg_my" style="border:1px solid #000;width:200px;height:200px" version="1.1" xmlns="http://www.w3.org/2000/svg">
</svg>
</body>
</html>