深入理解SVG坐标体系和transformations- viewport, viewBox,preserveAspectRatio
本文翻译自blog:
https://www.sarasoueidan.com/blog/svg-coordinate-systems/
SVG元素不像其他HTML元素一样受css盒子模型所制约。这个特点导致transform和postioning svg元素显得有些神秘,并且初看起来不是那么浅显易懂。然而,一旦你理解了SVG坐标体系以及transformation是如何工作的,那么操作SVG会变得非常简单。本文中,我们将涵盖控制SVG坐标体系的三个方面内容:viewport, viewBox和preserveAspectRatio
这是包含三篇文章系列中的第一篇:
- 理解SVG坐标体系和transformations:就是本文
- 理解svg坐标体系和transformations: transform属性
- 理解svg坐标体系和transformations: 建立新的viewports
和本文相对应的live demo:
https://www.sarasoueidan.com/demos/interactive-svg-coordinate-system/
SVG Canvas
canvas是SVG内容呈现的区域。概念上说,这个canvas在两个纬度都是无穷大的。也就是说SVG可以为任何次寸。然而,SVG内容只能在有限的screen上(这就是一个有限的区域,并被称为viewport),也就是viewport上显示。SVG中落在这个viewport范围之外的内容将被clipped off并且不可见。
viewport
viewport就是SVG可见的那部分区域。你可以把viewport想象为一扇窗户,通过这个窗户你可就可以看到一个特定区域的风景(SVG部分内容).而这个风景(SVG内容)通过这扇窗户可以全部或者部分地可见。
SVG viewport和浏览器的viewport是类似的。一个web page可以是任何次寸大小,它可以比浏览器的viewport的宽度大,也可以比浏览器viewport的高度高。然而在同一时刻,我们只能看到web page的一部分(就是通过这个viewport)
是整个SVG canvas是否可见,还是仅部分canvas可见这个取决于size of that canvas乘于preserveAspectRation属性的值
你可以通过设定最外层的svg元素的width和height属性来指定这个viewport的次寸大小。
<!-- the viewport will be 800px by 600px -->
<svg width="800" height="600">
<!-- SVG content drawn onto the SVG canvas -->
</svg>
在SVG概念里,属性的值可以有也可以没有对应的单位。A unitless value is said to be specified in user space using user units.如果值被指定为user units,那么这个值就假设为具有"px"单位的值。这意味着上面的例子中我们就指定了viewport为800pxX600px的区域。
你也可以指定对应的单位,在SVG中支持的单位有:em,ex,px,pt,pc,cm,mm,in和百分比。
一旦最外层的SVG元素的width和height被指定了,浏览器将会建立一个initial viewport coordinate system和一个initial user coordinate system.
the initial coordinate system
初始的viewport coordinate system是建立在viewport之上的坐标体系,从viewport左上角(0,0)点开始,正的x-轴往右生长,
正的y-轴向下生长initial coordinate system中的1个单位等于viewport中的一个"pixel".这个坐标体系和通过css盒子模型建立起来的html坐标体系是类似的。
the initial user coordinate system则是在SVG canvas上建立起来的坐标系统。这个坐标系统初始化时是和viewport坐标系统是相等同的。
深入理解SVG坐标体系和transformations- viewport, viewBox,preserveAspectRatio的更多相关文章
- SVG 入门——理解viewport,viewbox,preserveAspectRatio
工欲善其事必先利其器,没有真正搞懂SVG里的viewport,viewbox, preserveAspectRatio这三个属性,就很容易遇到坑,最近写项目用到svg这三个属性被我一眼就略过 ,后来发 ...
- 理解SVG的viewport,viewBox,preserveAspectRatio
万丈高楼平地起,基础很重要. viewport 表示SVG可见区域的大小,或者可以想象成舞台大小,画布大小. <svg width="500" height="30 ...
- 理解SVG坐标系和变换:视窗,viewBox和preserveAspectRatio
SVG元素不像HTML元素一样由CSS盒模型管理.这使得我们可以更加灵活定位和变换这些元素-也许一眼看上去不太直观.然而,一旦你理解了SVG坐标系和变换,操纵SVG会非常简单并且很有意义.本篇文章中我 ...
- 理解SVG图片标签的viewport、viewBox、preserveAspectRatio缩放
一.viewport 表示SVG可见区域的大小,或者可以想象成舞台大小,画布大小. <svg width="></svg> 上面的SVG代码定义了一个视区,宽500单 ...
- 理解SVG坐标系统和变换: transform属性
SVG元素可以通过缩放,移动,倾斜和旋转来变换-类似HTML元素使用CSS transform来变换.然而,当涉及到坐标系时这些变换所产生的影响必然有一定差别.在这篇文章中我们讨论SVG的transf ...
- 理解SVG坐标系统和变换: 建立新视窗
在SVG绘制的任何一个时刻,你可以通过嵌套<svg>或者使用例如<symbol>的元素来建立新的viewport和用户坐标系.在这篇文章中,我们将看一下我们如何这样做,以及这样 ...
- Three.js 学习笔记(1)--坐标体系和旋转
前言 JavaScript 3D library The aim of the project is to create an easy to use, lightweight, 3D library ...
- java基础 绘图技术.坦克大战 之java绘图坐标体系(一)
坐标体系介绍 下图说明了java坐标体系.坐标原点位于左上角,以像素为单位,像素是计算机屏幕上最小的显示单位.在java的坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素:第二个 ...
- QT从入门到入土(二)——对象模型(对象树)和窗口坐标体系
摘要 我们使用的标准 C++,其设计的对象模型虽然已经提供了非常高效的 RTTI 支持,但是在某些方面还是不够灵活.比如在 GUI 编程方面,既需要高效的运行效率也需要强大的灵活性,诸如删除某窗口时可 ...
随机推荐
- ubuntu安装maven
1.安装maven前需要安装JDK 2.下载mavenapache-maven-3.3.9-bin.tar.gz 3.解压maven到当前目录tar -zxvf apache-maven-3.3.9- ...
- WordPress上传文件类型限制解决办法
文件类型不符合安全规则.试试别的文件. 这种错误是由于WordPress中做了文件上传格式的限制,这种限制可以在WordPress中的wp-include/functions.php的get_allo ...
- 机器学习--boosting家族之Adaboost算法
最近在系统研究集成学习,到Adaboost算法这块,一直不能理解,直到看到一篇博文,才有种豁然开朗的感觉,真的讲得特别好,原文地址是(http://blog.csdn.net/guyuealian/a ...
- C#中通过Lambda表达式为委托传入更多的参数
如: DispatcherTimer dispatcherTimer = new DispatcherTimer(); dispatcherTimer.Tick += (o, e) => { d ...
- ARM的体系结构与编程系列博客——ARM的历史与应用范围
前言 最近我感觉自己比较浮躁,重来没有好好地沉下心来做一件事情,而且针对自己在专业水平上仍然还有很多欠缺,于是我想我应该为自己做些什么来证明一下自己真的是潜心研究东西的人,于是我萌生了一个想法,真正地 ...
- Django 多表查询
多表查询是模型层的重要功能之一, Django提供了一套基于关联字段独特的解决方案. ForeignKey 来自Django官方文档的模型示例: from django.db import model ...
- CodeBlocks "no such file or directory" 错误解决方案(创建类找不到头文件)
在CodeBlocks下,有时候需要自己定义类,当然就要添加相应的头文件,但添加进去的头文件明明包含在项目中了, 但编译时还是会报错:no such file or directory;这是为什么呢? ...
- macOS 中文件属性有at符号
在mac os 下 HFS+的文件系统里,有时候有些文件会附加上mac的专有属性,@属性就表示文件或文件夹是来自互联网下载 xattr -l 文件名:查看attrxattr -d 属性名:删除attr
- CLR via C# 读书笔记-26.线程基础
前言 这俩个月没怎么写文章做记录分享,一直在忙项目上线的事情,但是学习这件事情,停下来就感觉难受,clr线程这章也是反复看了好多遍,书读百遍其义自见,今天我们来聊下线程基础 1.进程是什么,以及线程起 ...
- C# 的逻辑运算
&.^.!和|操作符称为逻辑操作符,用逻辑操作符把运算对象连接起来符合C#语法的式子称为逻辑表达式.逻辑 操作符“!”和“^”只作用于其后的操作数,故称为一元操作符.而“&&” ...