乐趣区

关于前端:SVG为了前端页面的美丽我选择学习SVG

【SVG】为了前端页面的漂亮,我抉择学习 SVG

博客阐明

文章所波及的材料来自互联网整顿和集体总结,意在于集体学习和教训汇总,如有什么中央侵权,请分割自己删除,谢谢!

阐明

SVG 在之前自学的过程中,其实始终都是很浅近的样子不敢触碰,然而想要了解究竟都会走到这一步的。 再怎么看起来难的技术都是由简略的知识点累计起来的。

什么是 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>
成果

代码解析
  • <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>

成果:

代码解析:

  • 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>

成果:

代码解析:

  • 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>

成果:

代码解析:

  • 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>

成果:

代码解析:

  • 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> 

成果:

代码解析:

  • 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>

成果:

代码解析:

  • 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>

成果:

代码解析:

  • 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>

成果:

代码解析:

  • 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>

成果:

代码解析:

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

多边形 <polygon>

示例一:

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

成果:

代码解析:

  • 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>

成果:

代码解析:

最初一个点会主动闭合,这也是和 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>

成果:

代码解析:

定义了一条门路,它开始于地位 150 0,达到地位 75 200,而后从那里开始到 205 270,最初在 150 0 敞开门路。

总结

SVG 的根底局部曾经介绍了,但对于 path 的使用才刚刚开始,后续会专门细聊一下 path,当然还有 SVG 的一些”高级“属性。

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

感激

万能的网络

菜鸟教程

以及勤奋的本人,集体博客,GitHub 测试,GitHub

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

退出移动版