美文网首页好玩的SVG
【SVG】为了前端页面的美丽,我选择学习SVG

【SVG】为了前端页面的美丽,我选择学习SVG

作者: 归子莫 | 来源:发表于2021-11-10 18:25 被阅读0次

    【SVG】为了前端页面的美丽,我选择学习SVG

    博客说明

    文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!

    说明

    SVG在之前自学的过程中,其实一直都是很高深的样子不敢触碰,但是想要理解终究都会走到这一步的。:blush:再怎么看起来难的技术都是由简单的知识点累计起来的。

    什么是SVG?

    • SVG 意为可缩放矢量图形(Scalable Vector Graphics)。

    • 它使用 XML 格式定义图像。

    • SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失。

    • SVG 是万维网联盟的标准。

    • SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体。

    总的来说,SVG就是一个由XML定义的一个文件,由于是矢量图形,所以它的图形质量非常高。

    由于SVG是XML文件,SVG图像可以用任何文本编辑器创建,但是复杂的图形还是得借助图形编辑工具哟

    SVG的优势

    • SVG 可被非常多的工具读取和修改(比如记事本)。
    • SVG 与 JPEG 和 GIF 图像比起来,尺寸更小,且可压缩性更强。
    • SVG 是可伸缩的。
    • SVG 图像可在任何的分辨率下被高质量地打印。
    • SVG 可在图像质量不下降的情况下被放大。
    • SVG 图像中的文本是可选的,同时也是可搜索的(很适合制作地图)。
    • SVG 是开放的标准。
    • SVG 文件是纯粹的 XML。

    SVG 的主要竞争者是 Flash。与 Flash 相比,SVG 最大的优势是与其他标准(比如 XSL 和 DOM)相兼容。而 Flash 则是未开源的私有技术。

    一个小小的示例

    示例代码
    <?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>
    
    效果
    image-20211110141218557
    代码解析
    • <xml>第一行包含了 XML 声明。
    • standalone 属性规定此 SVG 文件是否是"独立的",或含有对外部文件的引用,standalone="no" 意味着 SVG 文档会引用一个外部文件 - 在这里,是 DTD 文件。
    • <svg>和</svg>是表示SVG代码,相当于开始标签和结束标签,这是根元素。
    • width 和 height 属性可设置此 SVG 文档的宽度和高度。
    • version 属性可定义所使用的 SVG 版本。
    • xmlns 属性可定义 SVG 命名空间。
    • <circle>用来创建一个圆。cx 和 cy 属性定义圆中心的 x 和 y 坐标。如果忽略这两个属性,那么圆点会被设置为 (0, 0)。r 属性定义圆的半径。
    • stroke 和 stroke-width 属性控制如何显示形状的轮廓。我们把圆的轮廓设置为 2px 宽,黑边框。
    • fill 属性设置形状内的颜色。我们把填充颜色设置为红色。
    • 关闭标签的作用是关闭 SVG 元素和文档本身。

    注意:所有的开启标签必须有关闭标签!

    如何在HTML中使用SVG?

    SVG 文件有5种方法嵌入 HTML 文档:<img><embed><object><iframe>、直接嵌入HTML代码中。

    使用 <img> 标签

    作为图片、背景被引入

    语法:

    <img src="circle1.svg" alt=""/>
    
    使用 <embed> 标签
    • 优势:所有主要浏览器都支持,并允许使用脚本
    • 缺点:不推荐在HTML4和XHTML中使用(但在HTML5允许)

    语法:

    <embed src="circle1.svg" type="image/svg+xml" />
    
    使用 <object>标签
    • 优势:所有主要浏览器都支持,并支持HTML4,XHTML和HTML5标准
    • 缺点:不允许使用脚本。

    语法:

    <object data="circle1.svg" type="image/svg+xml"></object>
    

    使用<iframe> 标签
    • 优势:所有主要浏览器都支持,并允许使用脚本
    • 缺点:不推荐在HTML4和XHTML中使用(但在HTML5允许)

    语法:

    <iframe src="circle1.svg"></iframe>
    

    直接在HTML嵌入SVG代码
    • 优势:操作方便,动态调整
    • 缺点:HTML页面太过冗长,对编码不友好

    语法:

    <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的基本形状

    矩形 <rect>

    示例一

    正常的矩形

    <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
      <rect width="300" height="100" style="fill:rgb(122,122,0);stroke-width:2;stroke:rgb(0,0,0)" />
    </svg>
    

    效果:

    image-20211110160850204

    代码解析:

    • rect 元素的 width 和 height 属性可定义矩形的高度和宽度
    • style 属性用来定义 CSS 属性
    • CSS 的 fill 属性定义矩形的填充颜色(rgb 值、颜色名或者十六进制值)
    • CSS 的 stroke-width 属性定义矩形边框的宽度
    • CSS 的 stroke 属性定义矩形边框的颜色

    示例二:

    填充和边框的透明度

    <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
      <rect x="50" y="20" width="150" height="150" style="fill:blue;stroke:red;stroke-width:5;fill-opacity:0.5;stroke-opacity:0.5" />
    </svg>
    

    效果:

    image-20211110163102077

    代码解析:

    • x 属性定义矩形的左侧位置(例如,x="0" 定义矩形到浏览器窗口左侧的距离是 0px)
    • y 属性定义矩形的顶端位置(例如,y="0" 定义矩形到浏览器窗口顶端的距离是 0px)
    • CSS 的 fill-opacity 属性定义填充颜色透明度(合法的范围是:0 - 1)
    • CSS 的 stroke-opacity 属性定义轮廓颜色的透明度(合法的范围是:0 - 1)

    示例三:

    整个元素的透明度

    <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500px" height="500px">
      <rect x="50" y="20" width="150" height="150" style="fill:blue;stroke:pink;stroke-width:5;opacity:0.4" />
    </svg>
    

    效果:

    image-20211110162824824

    代码解析:

    • CSS opacity 属性用于定义了元素的透明值 (范围: 0 到 1)。

    示例四:

    圆角矩形

    <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500px" height="500px">
      <rect x="50" y="20" rx="20" ry="20" width="150" height="160" style="fill:red;stroke:black;stroke-width:1;opacity:0.5" />
    </svg>
    

    效果:

    image-20211110163832986

    代码解析:

    • rx 和 ry 属性可使矩形产生圆角。
    圆形 <circle>

    示例:

    <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
       <circle cx="100" cy="50" r="40" stroke="red" stroke-width="2" fill="blue" />
    </svg> 
    

    效果:

    image-20211110164224132

    代码解析:

    • circle 标签可用来创建一个圆
    • cx和cy属性定义圆点的x和y坐标。如果省略cx和cy,圆的中心会被设置为(0, 0)
    • r属性定义圆的半径
    椭圆 <ellipse>

    示例:

    <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500" height="500">
      <ellipse cx="300" cy="80" rx="100" ry="50" style="fill:red;stroke:purple;stroke-width:2" />
    </svg>
    

    效果:

    image-20211110165550106

    代码解析:

    • ellipse 标签可用来创建一个椭圆
    • CX属性定义的椭圆中心的x坐标
    • CY属性定义的椭圆中心的y坐标
    • RX属性定义的水平半径
    • RY属性定义的垂直半径
    线<line>

    示例:

    <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
      <line x1="0" y1="0" x2="200" y2="200" style="stroke:black;stroke-width:5" />
    </svg>
    

    效果:

    image-20211110170518961

    代码解析:

    • line 标签可用来创建一条直线
    • x1 属性在 x 轴定义线条的开始
    • y1 属性在 y 轴定义线条的开始
    • x2 属性在 x 轴定义线条的结束
    • y2 属性在 y 轴定义线条的结束
    折线<polyline>

    示例一:

    <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
      <polyline points="20,20 40,25 60,40 80,10 120,140 200,180" style="fill:none;stroke:black;stroke-width:3" />
    </svg>
    

    效果:

    image-20211110170934450

    代码解析:

    • polyline 是用于创建任何只有直线的形状
    • points是点的集合

    示例二:

    画一个五角星

    <svg style="height:300px;width:300px;" xmlns="http://www.w3.org/2000/svg" version="1.1">
        <polyline points="100 10,40 180,190 60,10 60,160 180" style="fill:blue;stroke:blue;stroke-width:1" />
    </svg>
    

    效果:

    image-20211110171931827

    代码解析:

    利用了填空,因为线段是不闭合的

    多边形<polygon>

    示例一:

    <svg  height="210" width="500">
      <polygon points="200,10 250,190 160,210"
      style="fill:red;stroke:purple;stroke-width:1"/>
    </svg>
    

    效果:

    image-20211110173241294

    代码解析:

    • polygon标签用来创建含有不少于三个边的图形
    • points是点的集合

    示例二:

    画一个五角星

    <svg style="height:300px;width:300px;" xmlns="http://www.w3.org/2000/svg" version="1.1">
        <polygon points="100 10,40 180,190 60,10 60,160 180" style="fill:none;stroke:black;stroke-width:5"/>
    </svg>
    

    效果:

    image-20211110173634068

    代码解析:

    最后一个点会自动闭合,这也是和polyline的一个区别

    路径 <path>

    路径数据:

    • M = moveto
    • L = lineto
    • H = horizontal lineto
    • V = vertical lineto
    • C = curveto
    • 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 L205 270 Z" />
    </svg>
    

    效果:

    image-20211110174112019

    代码解析:

    定义了一条路径,它开始于位置150 0,到达位置75 200,然后从那里开始到205 270,最后在150 0关闭路径。

    总结

    SVG的基础部分已经介绍了,但对于path的运用才刚刚开始,后续会专门细聊一下path,当然还有SVG的一些”高级“属性。

    其实一路操作下来,发现SVG的操作和我们使用PS、AI等绘图工具的原理大致相像,对于我们来理解此类图形的绘制也有一定的帮助。

    感谢

    万能的网络

    菜鸟教程

    以及勤劳的自己,个人博客GitHub测试GitHub

    公众号-归子莫,小程序-小归博客

    相关文章

      网友评论

        本文标题:【SVG】为了前端页面的美丽,我选择学习SVG

        本文链接:https://www.haomeiwen.com/subject/tzdizltx.html