本文翻译自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的更多相关文章

  1. SVG 入门——理解viewport,viewbox,preserveAspectRatio

    工欲善其事必先利其器,没有真正搞懂SVG里的viewport,viewbox, preserveAspectRatio这三个属性,就很容易遇到坑,最近写项目用到svg这三个属性被我一眼就略过 ,后来发 ...

  2. 理解SVG的viewport,viewBox,preserveAspectRatio

    万丈高楼平地起,基础很重要. viewport 表示SVG可见区域的大小,或者可以想象成舞台大小,画布大小. <svg width="500" height="30 ...

  3. 理解SVG坐标系和变换:视窗,viewBox和preserveAspectRatio

    SVG元素不像HTML元素一样由CSS盒模型管理.这使得我们可以更加灵活定位和变换这些元素-也许一眼看上去不太直观.然而,一旦你理解了SVG坐标系和变换,操纵SVG会非常简单并且很有意义.本篇文章中我 ...

  4. 理解SVG图片标签的viewport、viewBox、preserveAspectRatio缩放

    一.viewport 表示SVG可见区域的大小,或者可以想象成舞台大小,画布大小. <svg width="></svg> 上面的SVG代码定义了一个视区,宽500单 ...

  5. 理解SVG坐标系统和变换: transform属性

    SVG元素可以通过缩放,移动,倾斜和旋转来变换-类似HTML元素使用CSS transform来变换.然而,当涉及到坐标系时这些变换所产生的影响必然有一定差别.在这篇文章中我们讨论SVG的transf ...

  6. 理解SVG坐标系统和变换: 建立新视窗

    在SVG绘制的任何一个时刻,你可以通过嵌套<svg>或者使用例如<symbol>的元素来建立新的viewport和用户坐标系.在这篇文章中,我们将看一下我们如何这样做,以及这样 ...

  7. Three.js 学习笔记(1)--坐标体系和旋转

    前言 JavaScript 3D library The aim of the project is to create an easy to use, lightweight, 3D library ...

  8. java基础 绘图技术.坦克大战 之java绘图坐标体系(一)

    坐标体系介绍 下图说明了java坐标体系.坐标原点位于左上角,以像素为单位,像素是计算机屏幕上最小的显示单位.在java的坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素:第二个 ...

  9. QT从入门到入土(二)——对象模型(对象树)和窗口坐标体系

    摘要 我们使用的标准 C++,其设计的对象模型虽然已经提供了非常高效的 RTTI 支持,但是在某些方面还是不够灵活.比如在 GUI 编程方面,既需要高效的运行效率也需要强大的灵活性,诸如删除某窗口时可 ...

随机推荐

  1. 关于Class中的Signature属性

    1.Signature属性:https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.9 2.ClassSigna ...

  2. android 解决studio生成aar包并在其他工程引用aar包的坑,不需要任何gradle配置

    1.首先我们创建一个module 2.编写我们的一个类 3.编译我们的module,生成release版本的aar,注意千万不要是debug版本的, 点击最右边的gradle面板,选择我们的modul ...

  3. Unable to handle kernel NULL pointer dereference at virtual address 00000000问题的解决

    今天在编译好内核模块后,安装内核模块memdev.ko的时候,出现了Unable to handle kernel NULL pointer dereference at virtual addres ...

  4. Redis笔记(六):Java中使用Redis

    Java程序使用Redis 添加依赖包 Maven依赖方式 <dependency> <groupId>redis.clients</groupId> <ar ...

  5. MySQL Optimization 优化原理

    MySQL Optimization 优化原理 MySQL逻辑架构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器.下图展示了MySQL的逻辑架构图. ...

  6. 11-hdfs-NameNode-HA-wtihQJM解决单点故障问题

    在hdfs中, NN只有一个, 但其中保存的数据尤其重要, 所以需要将元数据保存, 其中源数据有2个形式, fsimage 和 edit文件, 最简单的解决方法就是复制fsimage, 并在文件修改时 ...

  7. 开启Apache Server Status

    开启Apache Server Status 发布时间:August 1, 2008 分类:Apache <DdZend工具提供下载> <PHP中MD5函数效率> Apache ...

  8. lucene源码分析(7)Analyzer分析

    1.Analyzer的使用 Analyzer使用在IndexWriter的构造方法 /** * Constructs a new IndexWriter per the settings given ...

  9. SpringMVC源码阅读:Controller中参数解析

    1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring ...

  10. Jquery链式编程及Index()详解

    Jquery中的方法基本 上都可以返回一个Jquery对象, 如: <body> <div class="divcontent"> <p>中国& ...