svg入门笔记

svg笔记

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>

在这里插入图片描述

标签
x,y属性相当于 标签中的dx和dy
支持transfrom属性

<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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值