【笔记】【SVG】SVG-学习笔记

前言

此笔记为本人在菜鸟编程学完SVG之后,对所学知识进行的整理。


此笔记用于记录本人在学习中还有不懂以及值得注意的地方。以方便日后的工作与学习。


笔记中有些个人理解后整理的笔记,可能有所偏差,也恳请读者帮忙指出,谢谢。


注意

此笔记相对精炼,请读者结合平台学习更佳

学习平台:SVG 教程-菜鸟编程



什么是SVG?

  • Scalable Vector Graphics(可伸缩矢量图形)
  • 用于网络,基于矢量的图形
  • 用 XML 格式定义图形
  • 不失帧
  • 使用 .svg(全部小写)作为SVG文件的扩展名。

格式:

<svg version="" baseProfile="" width="" height="" xmlns="">
    <!--svg内容-->
</svg>

<svg>:根元素

widthheightSVG文档的宽度和高度

version:使用的 SVG 版本

xmlns:SVG 命名空间


HTML引入SVG

方法比较

使用 embed标签使用 object标签使用 iframe 标签
浏览器支持所有所有所有
脚本使用允许不允许允许
HTML4和XHTML不推荐支持不推荐
HTML5允许支持允许

具体用法

方法一:embed标签引入

 <embed src=".svg文件名带后缀" type="image/svg+xml" /> 

方法二:object标签引入

 <object data=".svg文件名带后缀" type="image/svg+xml"></object> 

方法三:iframe标签引入

 <iframe src=".svg文件名带后缀"></iframe> 

方法四:直接在HTML嵌入SVG代码

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
   <!--SVG内容-->
</svg>

方法五:a标签链接到SVG文件

 <a href=".svg文件名带后缀">查看 SVG 文件</a> 

SVG内容速览

标签名描述
rect矩形
circle
ellipse椭圆
line直线
polygon多边形
polyline多段线
path路径
text文本

SVG标签通用属性

属性名描述
width宽度
height高度
fill背景色
stroke边框颜色
stroke-width边框宽度
style定义CSS属性

SVG常用元素

rect(矩形)

格式:

<rect x="可选" y="可选" rx="可选" ry="可选" width="" height="" style=""/>

特殊属性:

x:矩形的左侧位置(矩形的左边框与浏览器窗口左边界的距离)

y:矩形的顶端位置(矩形的上边框与浏览器窗口上边界的距离)

rxry:可使矩形产生圆角。


额外拓展:

CSS属性:

  • fill-opacity填充颜色透明度(合法的范围是:0 - 1)
  • stroke-opacity轮廓颜色的透明度(合法的范围是:0 - 1)
  • opacity元素的透明值 (范围: 0 到 1)。

circle(圆)

格式:

<circle cx="" cy="" r="" fill="" />

特殊属性:

cx圆心的x坐标

cy圆心的y坐标

r:半径

注意:如果忽略cxcy,圆心默认被设置为(0,0)


ellipse(椭圆)

格式:

<ellipse cx="" cy="" rx="" ry="" style=""/>

特殊属性:

cx:椭圆中心的x坐标

cy:椭圆中心的y坐标

rx水平半径

ry垂直半径


line(直线)

格式:

<line x1="" y1="" x2="" y2="" style=""/>

特殊属性:

x1:x 轴定义线条的开始

y1: y 轴定义线条的开始

x2:x 轴定义线条的结束

y2: y 轴定义线条的结束


polygon(多边形)

格式:

<polygon points="x1,y1 x2,y2 ... xn,yn" style=""/>

特殊属性:

points:定义多边形每个角的 x 和 y 坐标,用空格隔开


额外拓展:

CSS属性:

  • fill-rule(图形填充规则)
  • 判断一点在内部还是外部
    • 1、从该点作任意方向的一条射线,然后检测射线与图形路径的交点情况。
    • 2、
属性值描述判断规则
nonzero(默认值)非零从0开始计数,路径从左向右穿过射线则计数加1,从右向左穿过射线则计数减1。得出计数结果后,如果结果是0,则认为点在图形外部,否则认为在内部。
evenodd奇偶交点数量。如果结果是奇数则认为点在内部,是偶数则认为点在外部
inherit

polyline(多段线)

格式:

<polyline points="x1,y1 x2,y2 ... xn,yn" style=""/>

points:定义多段线每个点的 x 和 y 坐标,用空格隔开


path(路径)

格式:

<path d="M开始数据 路径数据1 路径数据2 ... Z" />

路径数据=路径数据命令+点坐标(坐标x和y用空格隔开)

路径数据命令:

MLHVC
开始直线达到水平线达到垂直线达到弯曲线达到
SQTAZ
平滑曲线达到关闭路径

text(文本)

格式:

<text x="" y="" fill="" transform="">文本内容</text>

特殊属性:

xy:与矩形的属性一样就不过多赘述了

transform:与CSS3transform属性一样【了解更多

关于text的更多用法


Stroke 属性

属性名描述
stroke定义一条线,文本或元素轮廓颜色
stroke-width轮廓厚度
stroke-linecap不同类型的开放路径的终结(设置相同的重点)
stroke-dasharray创建虚线

SVG滤镜元素

  • 滤镜=特殊效果
  • defs元素
    • 所有互联网的SVG滤镜都用该元素定义
    • 定义短并含有特殊元素(如滤镜)定义。
  • filter标签
    • 定义SVG滤镜
    • 使用id属性来定义向图形应用哪个滤镜

格式:

<svg>
    <defs>
        <filter id="">
            <!--滤镜内容-->
        </filter>
    </defs>
</svg>

注意:上述代码只是为了让读者了解大致结构,有些元素省略


滤镜内容

feGaussianBlur(模糊效果)

格式:

<

属性:

in

stdDeviation:模糊量

filter="url(#id)":将常用元素的滤镜属性与设置的滤镜效果实现==(前提滤镜要能实现,而且有单独用idclass标识)==

示例:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
  <defs>
    <filter id="f1" x="0" y="0">
      <feGaussianBlur in="SourceGraphic" stdDeviation="15" />
    </filter>
  </defs>
  <rect width="90" height="90" stroke="green" stroke-width="3"
  fill="yellow" filter="url(#f1)" />
</svg> 

效果:

1649681273475


feOffset(阴影)

格式:

<feOffset result="offOut" in="" dx="" dy=""/>

实现思路:注意:以下代码只是步骤中的关键代码,具体实现看源代码

  • 步骤一:初步平移

    <feBlend in="SourceGraphic" in2="offOut" mode="normal" />
    
  • 步骤二:模糊偏移图像

    <feGaussianBlur result="blurOut" in="offOut" stdDeviation="10" />
    
  • 步骤三:修改模糊偏移图像颜色

    <feOffset result="offOut" in="SourceAlpha" dx="20" dy="20" />
    

    修改了in属性的值

  • 步骤四:阴影上在涂上一层颜色

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

    对这个句关键代码不了解的可以看原文底下的评论区有做详细的解释


~Gradient(渐变)

  • 渐变:一种从一种颜色到另一种颜色的平滑过渡。

linearGradient(线性渐变)

格式:

<linearGradient id="" x1="" y1="" x2="" y2="" >
	<stop offset="" style="stop-color:rgb( , , );"/>
    <stop offset="" style="stop-color:rgb( , , );"/>
</linearGradient>

特殊属性:

x1y1开始位置

x2y2结束位置

线性渐变类型实现
水平渐变y1和y2相等,而x1和x2不同时
垂直渐变x1和x2相等,而y1和y2不同时
角形渐变x1和x2不同,且y1和y2不同时

stop标签:定义渐变颜色



radialGradient (放射性渐变)

格式:

<radialGradient id="" cx="" cy="" r="" fx="" fy="">
    <stop offset="" style="" />
    <stop offset="" style=""/>
</radialGradient>

特殊属性:

cxcy:定义最外层圆

fxfy:定义最内层圆


额外学习

更多SVG示例

SVG参考手册

SVG在线编辑器


结语

感谢菜鸟编程提供学习的平台

感谢各位读者能看到最后

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lao-jiawei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值