前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SVG之旅:SVG的图层和渲染顺序

SVG之旅:SVG的图层和渲染顺序

作者头像
企鹅号小编
发布于 2018-02-28 07:32:16
发布于 2018-02-28 07:32:16
7.3K0
举报
文章被收录于专栏:企鹅号快讯企鹅号快讯

不管是在制图软件中还是Web页面的DOM元素,都有层的概念。在制图软件中,大家比较熟悉,能非常的清晰的看出图层的概念。而在Web页面中,特别是我们熟悉的HTML的DOM中,其实他也有层的概念。不同的是制图软件可以用鼠标拖动图层来改变层次,而DOM中需要依赖于CSS的属性来控制他的层次关系。其实在SVG中,他也有层和渲染顺序的概念。今天我们就来看看SVG中的图层和渲染顺序相关的知识。

SVG的图层

首先我们来看SVG图层这个东东,相信只要使用过制图软件,比如Photoshop或者Sketch等,对于图层的认识并不会陌生。当然,你要是设计师出身的话,这方面的认识一定要远远高过工程师。前面也说过了,不管是在制作软件中,还是在Web页面中,都有图层的概念。比如我们经常接触的Web页面,能常常看到图片盖在图片上文字本盖在图片上等现象。事实上这些都是图层的应用,只是往往没有,只有。在制图软件中,为了方便理解由上到下的概念,在图层面板中的图层都是由上到下排列,上层会盖住下层。但在Web页面或者程序里,也因为逻辑规则,图层则是由下而上排列,下层会盖住上层(除非做了特殊处理)。

我们先来看看制图软件中的图层,比如Sketch的软件中:

在制图软件中,控制图层比较方便,鼠标拖动就可以,比如下面的操作:

通过Sketch可以很轻易的将刚才的绘制的图形转出文件。操作步骤很简单,如下所示:

这个时候,你可以通过文本编辑软件打开导出来的文件。你可以看到SVG的代码(因为还没有正式学习怎么手动编写SVG代码),刚才导出的文件代码如下:

有一大堆冗余的代码,现在先人肉来处理不需要的代码,后面的文章中将会介绍怎么通过工具来处理中不需要的代码。处理完的代码如下:

如果你把这个通过和元素引入,或者直接将代码内联到HTML文件中,你将看到的效果如下:

感觉有点偏主题了。回到正题中,如果你仔细看了代码之后,你会发现在制图软件中 。对应的图层顺序也是 ,但在代码中却不一样,反过来了。如图所示:

了解了图层的规则后,我们看看SVG代码和Sketch里面的图层的对照。可以看出,SVG中的每一个元素都对应制图软件中的一个图层,比如、和等元素。至于这些元素起什么作用,怎么用,暂且不在这篇文章中阐述。后面介绍SVG绘制图形一节中将会详细介绍这些绘图元素。

上面看一的是单个元素(单个图形)占一个独立的层。事实上,多个元素组成一个图形,那么这个情况又将会是什么样?同样先用制图软件来操作一下:

制图软件中有两个层和,事实下每个图层中又有三个层:

用同样的方法,将上面的图导出SVG文件,来看对应的SVG代码:

从代码中可以看出,如果一层里有多个元素时,在SVG中会用元素来表示图形。看上去其实就是图层中嵌套了图层。

上面借助了Sketch制图软件让我们理解了SVG中的图层的概念。虽然里面的代码我们暂时还不明白其具体的意思,但这并不重要,因为后续的学习,我们就能清楚的知道他们具体的作用和怎么使用。

SVG渲染顺序

从上面的代码中可以看出,在文本编辑器里编写SVG代码就可以绘制出所需要的图形。那么SVG中绘制过程有自己的基本原则:

解析顺序和绘制顺序一致,都要遵守XML中元素的位置排列。SVG中元素在XML中有固定的排列顺序,浏览器渲染时会遵守这个顺序,绘制时也同样会遵守这个顺序。也就是说先出现的元素会出现在绘制的底层,而后出现的元素会绘制在顶层,如果元素间的位置有重叠,则会现后绘制的元素会盖住先出现的元素

子节点会继承父节点的一些属性(这个和CSS的属性有点类似),比如和等

整个SVG绘制处理过程可以用下图简单的来描述:

不过在绘制SVG时,有一些细节需要注意:

解析SVG文档时,忽略DTD验证:虽然是 DTD 是 XML 解析的标准验证方式,但是很多工具制作的 SVG,DTD 会缺失,所以解析时应该忽略 DTD 验证,不然会直接造成解析错误

解析SVG文档时,一些元素的属性值可能有多种方式:多边形的点集,元素的 ,都是一个数字集合,集合的分割方式可能是空格,。 也可能是其他符号,所以在解析时需要兼容多种分割方式。颜色的表示,长度单位等,也可能会出现多种形式,如颜色有已知颜色和颜色值等形式,都需要做兼容

元素的某些属性会继承父级元素:、等属性,都需要考虑父级元素的继承关系。其中 会复杂一些, 的 矩阵,会包括缩放、平移、旋转等信息,子元素的平移信息,需要和父级元素做缩放相乘后,再做平移

元素属性的默认值:很多工具导出的 SVG,是会忽略一些属性的,而这些属性如果没有值,我们是没办法正确显示的。所以我们需要针对它们设置默认值。例如 默认应该是 , 默认是 , 默认为, 默认为 。这里重点说一下 ,它分为 和 两种方式

解析顺序与渲染顺序,描边与填色的顺序:解析顺序和渲染顺序必须一致,并且和 XML 中的顺序一致,否则会出现错误的遮挡现象和绘制顺序倒转。描边和填色的顺序,基本原则是,单个元素的描边完成后,操作填色,然后再操作下一个元素。当然这里的填色可以灵活控制,比如保存所有填色,等所有描边完成后,一次性填色

包含标签的绘制:包含 标签的 SVG,处理起来会有些特殊的地方。这种 SVG 的存在,一般是设计师通过 Photoshop 编辑图片后,再导入 Sketch 中生成的 SVG。处理这种 SVG 的绘制时,基本思路是:解析 标签,当做 SVG 的底图,用一个透明遮罩挡住;然后解析后面的 标签,这是只需要解析 和 ,不需要 ,用这里的 去涂抹底图,涂抹过的地方,透明遮罩失效,底图露出,就达到了涂抹出底图线条的目的

有一点需要特别提出来的是,在SVG中无法通过CSS的来改变他们层级的。比如前面的示例:

虽然在第一个上设置了,第二个设置了,但并没有如我们期望的一样,第一个显示在第二个的上面,还是按照SVG的渲染顺序来渲染。

要解决这个问题,只能通过JavaScript来动态改变SVG的元素顺序。比如:

最终效果如下:

注意: 对于已经存在的对象,则是移动了标签的位置。

总结

通过这一节的内容介绍,特别是借助于制图软件,让我们更好的理解了SVG的中图层中的概念,以及其渲染顺序。从而对SVG有了更深一层的了解。虽然这些都还只是SVG的基础,还不足以支承你做有意思的东东。但逐步进行下去,我们会有所收获的。

如果文章中有不对之处,还请路过大神拍正。如果你有更好的建议或经验,欢迎在下面的评论中与我们一起分享。如果你对这个系列的教程感兴趣的话,欢迎持续关注后续的更新。下一节,我们将学习SVG中的坐标系统。SVG的坐标系统相关的知识重要哟。

本文来自企鹅号 - W3cplus媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - W3cplus媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
UWP 手绘视频创作工具技术分享系列 - SVG 的解析和绘制
本篇作为技术分享系列的第一篇,详细讲一下 SVG 的解析和绘制,这部分功能的研究和最终实现由团队的 @黄超超 同学负责,感谢提供技术文档和支持。  首先我们来看一下 SVG 的文件结构和组成 SVG
Shao Meng
2018/04/28
1.8K0
UWP 手绘视频创作工具技术分享系列 - SVG 的解析和绘制
lottie系列文章(四):源码分析——svg渲染
lottie为全局变量,主要有一个loadAnimation的方法,来加载和解析json,播放动画。
IMWeb前端团队
2019/12/03
2.3K0
SVG 从入门到后悔,怎么不早点学起来(图解版)
可视化、机器学习等领域 JS 都有涉及到,而可视化方面已经被很多领域用到,比如大屏项目。
德育处主任
2022/09/08
3.5K0
碉堡了,游戏中!我们可以使用SVG矢量绘图啦!
Cocos-iPhone Cocos2d-x Cocos2d-html5 Cocos2d-js Cocos Creator
张晓衡
2020/11/25
2.7K0
碉堡了,游戏中!我们可以使用SVG矢量绘图啦!
浏览器原理0. 前言1. 解析过程2. 渲染树2.1 CSS样式计算2.2 构建渲染树3. 布局(重要)4. 重绘与重排(重要)5. paint(绘制)6. composite(重要)7. 浏览器加载
身为前端,打交道最多的就是浏览器和node了,也是我们必须熟悉的。接下来我们讲一下浏览器工作原理和工作过程。从url到页面的过程,......,我们直接来到收到服务器返回内容部分开始。
lhyt
2018/10/31
5.4K0
面试官问我Chrome浏览器的渲染原理(6000字长文)
对于HTML,css和JavaScript是如何变成页面的,这个问题你了解过吗?浏览器究竟在背后都做了些什么事情呢?让我们去了解浏览器的渲染原理,是通往更深层次的开发必不可少的事情,能让我们更深层次,多角度的去考虑性能优化等问题。
达达前端
2020/12/16
2.2K0
面试官问我Chrome浏览器的渲染原理(6000字长文)
可视化初探上
作为前端工程师,很多人的主要工作就是和网页打交道。那扪心自问一下,写了这么多网页之后,你是不是也想要做些尝试或者突破呢?如果是的话,我建议大家试试可视化。
年少轻狂12138
2022/08/10
1.8K1
可视化初探上
SVG
HTML体系中,最常用的绘制矢量图的技术是SVG和HTML5新增加的canvas元素。这两种技术都支持绘制矢量图和光栅图。不过canvas更偏重于动画的制作。所以,绘制矢量图的大任落到了SVG身上。
踏浪
2019/07/31
6K0
SVG
快速批量去除图片水印方法大全~~
去水印是不复杂啦,可几千页下来,自己用橡皮抹会抹抽筋的吧~~~哈哈哈,下边记录一下偶的心路过程~~~(汗,一副盗版光荣的样子,RP真是越来越差-_-!!) 所用软件:Adobe acrobat professional 7.0 和Adobe photoshop CS2 1。本来就是扫描之后存出来的PDF嘛,所以就用PRO7.0里的导出图片功能把所有的单页转回成图片先,自动按顺序命名,存在文件夹A中。 2。用CS2随便打开其中一页,例如第49页—用“吸管”工具选中那个水印的颜色为前景色。 3。CS菜单—窗口—勾选“动作”—出来个动作的小窗口。 4。动作—新建动作—命名为“去水印”—-开始“记录”(是为了以后那几千多页的,电脑傻的只会重复呢) 5。现在开始处理那第49页。菜单—选择—色彩范围—-颜色容差里偶写90(吼吼,可以变的啦,以选出那个大水印的全部颜色但是不会选中跟水印重复的字体颜色为标准)—-按“确定”。 6。菜单—选择—扩大选取(不然会有水印框框留在原处的) 7。按DELETE键删除选中的水印。(或者编辑—填充白色,反正弄完了看不见水印就好) 8。菜单–文件—存储为WEB所用格式JPG(黑白页面品质低点也没啥影响,反正一页变小点,一本书下来就轻便不少呢~~)—存到文件夹B。 9 动作小窗口—停止记录 10。文件—自动—批处理—源文件夹就选存有水印的文件夹A,目标文件就选处理好了没水印的文件夹B,错误嘛,“选记录到文件”,随便建个记事本文件记好了。 按了确定之后呢,就该聊天的聊天,该打牌的打牌咯,想睡觉的也可以去睡觉,哈哈哈哈哈哈,反正PS好之后自然会停止的。PRO7.0里就有从多个文件创建一个PDF的选项,可惜速度慢了点,闲的话就下个软件image2PDF啥的,西西,很容易就又整合成书了~~~
全栈程序员站长
2022/07/23
3.1K0
快速批量去除图片水印方法大全~~
SVG 入门指南(看完,对SVG结构不在陌生)
SVG,即可缩放矢量图形(Scalable Vector Graphics),是一种 XML 应用,可以以一种简洁、可移植的形式表示图形信息。目前,人们对 SVG 越来越感兴趣。大多数现代浏览器都能显示 SVG 图形,并且大多数矢量绘图软件都能导出 SVG 图形。SVG 主要可以概括为以下几点:
前端小智@大迁世界
2022/06/15
3.5K0
SVG 入门指南(看完,对SVG结构不在陌生)
画了20张图,详解浏览器渲染引擎工作原理
通常,我们编写的HTML、CSS、JavaScript等文件,经过浏览器运行之后就会显示出页面,那他们是如何转化为页面的?这背后的原理是什么?这个过程就是浏览器的渲染进程来操作实现的。浏览器的渲染进程的主要任务就是「将静态资源转化为可视化界面:」
HoMeTown
2022/10/26
2.8K0
画了20张图,详解浏览器渲染引擎工作原理
前端架构师之路03_移动端规范兼容处理
移动端开发中我们使用 rem 作为基本计量单位,同时将根节点默认字号大小设为 font-size:62.5%,因移动端浏览器默认字号大小为 16px,16*62.5% 刚好为 10px
张哥编程
2024/12/13
2670
前端架构师之路03_移动端规范兼容处理
前端开发面试题自测
CSS3中的盒模型有以下两种:标准盒子模型、IE盒子模型 盒模型都是由四个部分组成的,分别是margin、border、padding和content。
loveX001
2022/11/10
4060
「一道面试题」输入URL到渲染全面梳理中-页面渲染篇
接上文,上文我们讲了网络通信的部分,详细请看「一道面试题」输入URL到渲染全面梳理上-网络通信篇, 那么该说说页面渲染的流程了,也就是当输入一个URL拿到了页面后,浏览器怎么解析,怎么呈现
isboyjc
2022/03/28
8460
「一道面试题」输入URL到渲染全面梳理中-页面渲染篇
玩转AE丨动效设计必备指南
导语 动效是用户体验的重要组成部分,也是产品调性的重要体现。如今动效设计也有了更多的解决方案,如Framer、Principle、Flinto、Protopie等,这些软件在制作交互原型时,确实有更轻量便捷的优势,但效果也有一定的局限性,或者要求使用者有代码基础,比较适合有针对性的人群。 而After Effects作为动效软件的鼻祖,以其强大的兼容性、效果丰富性和清晰明了的图层操作逻辑深得设计师们喜爱,不论是UI、运营还是多媒体类型的设计都能满足,无疑是目前最具有普适性的动效软件。 本文从AE的
腾讯ISUX
2021/10/12
2K0
浏览器渲染原理
「进程 :」 进程是操作系统资源分配的基本单位,进程中包含线程。简而言之,就是正在进行中的应用程序。
用户8921923
2022/10/24
1.2K0
浏览器渲染原理
设计师使用SVG的必读文章
本文主要介绍了在腾讯云中设计器导出SVG的注意事项和优化点,包括导出设置、命名规范、分层、分组、使用画板、导出图片、内联样式、保留小数点、缩小和响应式设置以及字体和图像的优化。此外,还提供了关于Sketch和AI导出的SVG的代码示例和注意事项。
社会我田哥
2017/12/26
5.8K1
设计师使用SVG的必读文章
高性能Web动画和渲染原理系列(2)——渲染管线和CPU渲染
动画的流畅程度通常是以FPS(Frame Per Second,每秒帧率)作为衡量的。在摄像机录制视频时每一帧实际上包含了一段时间内的画面记录(长曝光摄影的道理相同的),如果画面里的事物在运动,那么暂停播放时看到的画面通常都是模糊的,这样的画面也被称为“模糊帧”,加上双眼“视觉暂留”效果的影响,影视作品一般只要达到24FPS就可以展示出看起来连续运动的画面;而在页面的渲染中,每一帧都是由计算机计算渲染出来的精确画面,帧和帧之间并不存在模糊过渡,所以通常认为需要达到50FPS~60FPS的帧率,才能够得到较好的观看体验。
大史不说话
2019/10/21
1.6K0
打造高水平设计的必备利器Ai中文版illustrator-直装永久使用
Adobe illustrator是一种应用于出版、多媒体和在线图像的工业标准矢量插画的软件,很多有插画排版或者矢量插图 工作 需求的小伙伴们会经常和这款软件打交道,但是最近小编发现了这款软件的新功能,就是制作海报,小编相信有很多小伙伴们还不知道吧,那么接下来就看看小编为大家带来的这篇文章学习一下制作方法吧!
木子学Lee
2023/04/08
1.6K0
打造高水平设计的必备利器Ai中文版illustrator-直装永久使用
SVGEdit:老牌开源 SVG 编辑器是如何架构的?
SVGEdit 一款非常老牌的 SVG 图形编辑器,用于编辑处理 SVG,star 数目前是 5.8k。
前端西瓜哥
2023/10/22
8600
SVGEdit:老牌开源 SVG 编辑器是如何架构的?
推荐阅读
相关推荐
UWP 手绘视频创作工具技术分享系列 - SVG 的解析和绘制
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档