SVG Viewport和View Box

SVG Viewport和View Box用来设置图像的可见部分的尺寸。

Viewport(视口)

Viewport:视口,视觉窗口,是SVG图像的可见区域。SVG图像逻辑上是能显示你想要的宽和高,但实际上同一时间仅图像的某一部分是可见的。该可见的区域被称为Viewport。

您可以通过<svg>元素的widthheight指定使用的Viewport宽度和高度的下面是一个例子:

<svg width="500" height="300"></svg>

这例子定义了一个Viewport,500个单位宽和300个单位高。

坐标单位

如果你不指定任何内部宽度和高度属性的单位,单位都假定为像素。即,宽度500表示500个像素的宽度。

除了像素,还可以使用下面的单位:

单位 描述
em 默认字体大小 ,通常是一个字符高度
ex x字符的高度
px 像素
pt 点(一英寸的1/72)
pc 派卡(一英寸的1/6)
cm 厘米
mm 毫米
in 英寸

在<svg>元素里面设置单位只会影响的<svg>的大小(即Viewport)。在SVG图像中显示的SVG图形的大小由你对每个图形设置的单位决定。如果没有指定单位,各单位将默认为像素。

下面是一个例子:

<svg width="10cm" height="10cm">
    <rect x="50" y="100" width="50" height="50"
          style="stroke: #000000; fill: none;"/>
    <rect x="100" y="100" width="50mm" height="50mm"
          style="stroke: #000000; fill: none;" />
</svg>

该<svg>图像有其单位设置为厘米。两个<rect>元素都有自己的单位设置。一个使用像素(没有单位明确设定),另一个使用毫米。

这里是所得到的图象,右边的(单位毫米)大于左边(单位像素)。

View Box

您可以重新在<svg>元素内部定义没有单位的坐标,通过viewBox属性来实现。下面是一个例子:

<svg width="500" height="200" viewBox="0 0 50 20" style="border: 1px solid #234567;">
    <rect x="20" y="10" width="10" height="5"
          style="stroke: #000000; fill:none;"/>
</svg>

此示例创建一个<svg>为500像素宽和200像素高,宽度元素的的viewBox属性包含四个坐标。这些坐标就定义了<svg>的viewBox属性。

在这种情况下,View Box跨度从0,0到50,20。这意味着,500 x 200像素 <svg>元素内部使用一个坐标系,它从0,0 到50,20。换言之,图形中使用的坐标,每1个单位,在<svg>对应于宽度500/50 = 10个像素,而在高200/20 = 10个像素。这就是为什么x轴为20及y轴为10的位置的矩形是真正位于(200,100),其宽度(10)和高度(5)对应于100个像素和50个像素。

另一种方式来解释它,viewBox属性的前两个坐标定义的是<svg>左上角的用户坐标,后两个坐标定义的是<svg>右下角的用户坐标。该<svg>内部的空间被解释为从左上角坐标到右下角坐标跨越。

这里是所得到的图象:

注意<rect>里面的所有坐标元素1个单位就代表10像素。

preserveAspectRatio保持宽高比

如果Viewport和View Box不具有相同的宽高比(宽度与高度之比),您需要指定SVG显示器(例如浏览器)如何显示SVG图像。使用<svg>的preserveAspectRatio属性。

该preserveAspectRatio属性需要用空格分隔的两个值。第一个值将告诉您View Box如何在Viewport中对齐。这个值本身就是两部分组成。第二个值将告诉您宽高比如何将被保留(如果有的话)。

第一个值指定的对齐由两部分组成。第一部分指定的x对齐和第二部分指定的y对齐。这里是x轴和y取向的值的列表:

描述
xMin 对齐View Box最小x轴的值与Viewport的左边缘。
xMid 对齐View Box的x轴的中心与Viewport的中心x轴坐标。
xMax 对齐View Box最大x轴的值与Viewport的右边缘。
YMin 对齐View Box最小y轴的值与Viewport的顶部边缘。
YMid 对齐View Box的y轴的中心与Viewport的中心y轴坐标。
YMin 对齐View Box最大y轴的值与Viewport的底部边缘。

这里有两个例子:

xMaxYMax

xMidYMid

在preserveAspectRatio第二部分属性值可以采取三种不同的值:

描述
meet 保持宽高比和比例视图框,以适应内视口。
slice 保留宽高比,任何不适合Viewport宽高比的图像的会被切掉。
none 不保留宽高比。缩放图像以View Box充满完全适应Viewport。比例会被扭曲。

在第二部分preserveAspectRatio属性值附加到第一部分,以空格分隔。这里有两个例子:

preserveAspectRatio="xMidYMid meet"

preserveAspectRatio="xMinYMin slice"

下面的实施例都具有宽度为500,高度为75和的viewBox属性设为0 0 250 75。这意味着,沿x轴的每个坐标单元将对应于2个像素,而是沿着Y轴的每个坐标单位只对应1个像素。在x轴缩放比为500/250=2 ,y轴的缩放比为75/75=1。这可能会导致一个扭曲,但我们会在下面的例子查看如何设置各种preserveAspectRatio。

查看例子

时间: 2024-12-22 14:03:20

SVG Viewport和View Box的相关文章

Svg.js实例教程及使用手册详解(一)_javascript技巧

什么是SVG? SVG 指可伸缩矢量图形 (Scalable Vector Graphics) SVG 用来定义用于网络的基于矢量的图形 SVG 使用 XML 格式定义图形 SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失 SVG 是万维网联盟的标准 SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体 简介: SVG.js是一个轻量级的JavaScript库,允许你轻松操作SVG和定义动画. SVG(Scalable Vector Graphics,可缩放矢量图形)是基

Android通过Path实现复杂效果(搜索按钮+时钟的实现 +svg实现)

Path : 在Android中复杂的图形的绘制绝大多数是通过path来实现,比如绘制一条曲线,然后让一个物体随着这个曲线运动,比如搜索按钮,比如一个简单时钟的实现: 那么什么是path呢! 定义:path  就是路径,就是图形的路径的集合,它里边包含了路径里边的坐标点,等等的属性.我们可以获取到任意点的坐标,正切值. 那么要获取Path上边所有点的坐标还需要用到一个类,PathMeasure; PathMesure: PathMeasure是一个用来测量Path的类,主要有以下方法: 构造方法

ExtJS5学习之MVC

  写完第一篇Hello World之后,我就一直在准备着弄弄MVC,整了2天终于弄好了,遇到问题,也只能靠自己. 其实就是用ExtJS5 搭个后台界面:  啥都不说了,上代码. 首先需要一个app.js来定义一个ExtJS的Application,Application里去启动运行ExtJS的程序 App.js Js代码   Ext.QuickTips.init();   Ext.Loader.setConfig({       enabled : true   });      Ext.Lo

ExtJS5学习之MVVC

      MVVC模式并不是ExtJS首先提出的,其实ExtJS也是模仿微软的WPF中应用的MVVC设计模式.ExtJS在4.0时引入了MVC模式,在5.0时代又引入了MVVC模式.MVC模式对于大家来说应该不陌生了,MVVC是什么?要理解MVVC还是必须先了解MVC是什么?先来张MVC的结构图感受下:  MVC是一种用来更好组织架构软件的设计模式,它把应用程序划分为3部分,各部分各司其责.     Model:是用来表示应用程序中需要用到的数据,当然Model层中也可以包含业务逻辑和数据验证

Bootstrap每天必学之弹出框(Popover)插件_javascript技巧

Bootstrap弹出框插件,提供了一个扩展的视图,弹出框(Popover)插件根据需求生成内容和标记,默认情况下是把弹出框(popover)放在它们的触发元素后面. 弹出框(Popover)与工具提示(Tooltip)类似,提供了一个扩展的视图.如需激活弹出框,用户只需把鼠标悬停在元素上即可.弹出框的内容完全可使用 Bootstrap 数据 API(Bootstrap Data API)来填充.该方法依赖于工具提示(tooltip). 如果您想要单独引用该插件的功能,那么您需要引用 popov

CSS3与页面布局学习总结(二)——Box Model、边距折叠、内联与块标签、CSSReset

一.盒子模型(Box Model) 盒子模型也有人称为框模型,HTML中的多数元素都会在浏览器中生成一个矩形的区域,每个区域包含四个组成部分,从外向内依次是:外边距(Margin).边框(Border).内边距(Padding)和内容(Content),其实盒子模型有两种,分别是 ie 盒子模型和标准 w3c 盒子模型,加上了doctype声明,让所有浏览器都会采用标准 w3c 盒子模型去解释你的盒子.当设置一个元素的样式如下: <!DOCTYPE html> <html> <

HTML5 学习总结(四)——canvas绘图、WebGL、SVG

一.Canvas canvas是HTML5中新增一个HTML5标签与操作canvas的javascript API,它可以实现在网页中完成动态的2D与3D图像技术.<canvas> 标记和 SVG以及 VML 之间的一个重要的不同是,<canvas> 有一个基于 JavaScript 的绘图 API,而 SVG 和 VML 使用一个 XML 文档来描述绘图.SVG 绘图很容易编辑与生成,但功能明显要弱一些. canvas可以完成动画.游戏.图表.图像处理等原来需要Flash完成的一

Model/View Programming

http://doc.qt.digia.com/4.7/model-view-programming.html Model/View Programming Introduction to Model/View Programming Qt 4 introduced a new set of item view classes that use a model/view architecture to manage the relationship between data and the wa

图像处理------快速均值模糊(Box Blur)

图像模糊的本质, 从数字信号处理的角度看,图像模糊就要压制高频信号保留低频信号, 压制高频的信号的一个可选择的方法就是卷积滤波.选择一个低频滤波器,对图像上的 每个像素实现低频滤波,这样整体效果就是一张数字图像更加的模糊,显示更少的细节信息.  传统的卷积模糊计算量巨大,程序效率比较低,基于滑动窗口的Box Blur是一种快速模糊方法, 其结果近似于卷积模糊的结果.我没证明过!   一:Box Blur数学原理 根据输入的半径R,计算起始2*R +1个像素的平均值, 作为第一个输出像素的结果,