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

一、viewport

  表示SVG可见区域的大小,或者可以想象成舞台大小,画布大小。

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

  上面的SVG代码定义了一个视区,宽500单位,高300单位。

  注意这里的措辞是“单位”,不是“像素”。虽然说,width/height如果是纯数字,使用的就是“像素”作为单位的。也就是说,上面SVG的视区大小就是500px * 300px.

  当然,故弄“单位”这个措辞,潜台词就是你可以使用其他类型的单位,涵盖常见CSS单位。

二、viewBox属性

  先看一个例子,如下HTML代码:

<svg width="400" height="300" viewBox="0,0,40,30" style="border:1px solid #cd0000;">
    <rect x="10" y="5" width="20" height="15" fill="#cd0000"/>
</svg>

  结果如下:

  如果不看viewBox, 你一定会觉得诧异——SVG尺寸明明有400*300像素,而小小的<rect>大小只有其1/20,但是显示出来的却占据了半壁江山!不科学啊!

  之所以小小矩形大显神威就是这里的viewBox起了推波助澜的作用。

  viewBox值有4个数字:

viewBox="x, y, width, height"  // x:左上角横坐标,y:左上角纵坐标,width:宽度,height:高度

  viewBox顾名思意是“视区盒子”的意思,好比在说:“SVG啊,要不你就让我铺满你吧~”

  更形象的解释就是:SVG就像是我们的显示器屏幕,viewBox就是截屏工具选中的那个框框,最终的呈现就是把框框中的截屏内容再次在显示器中全屏显示

  更直观的解释:

  如果没有viewBox, 应该是长这样的,<rect>大小只有整个SVG舞台的1/20

  viewBox="0,0,40,30",相当于在SVG上圈了下图左上角所示的一个框框。

  然后把这个框框,连同框框里的小矩形一起放大到整个SVG大小。

 

三、preserveAspectRatio

  上面的例子,SVG的宽高比正好和viewBox的宽高比是一样的,都是4:3。显然,实际应用viewBox不可能一直跟viewport穿同一条开裆裤。

  此时,就需要preserveAspectRatio出马了,此属性也是应用在<svg>元素上,且作用的对象都是viewBox

preserveAspectRatio="xMidYMid meet"

  preserveAspectRatio属性的值为空格分隔的两个值组合而成。例如,上面的xMidYMidmeet

  第1个值表示,viewBox如何与SVG viewport对齐;第2个值表示,如何维持高宽比(如果有)。

  其中,第1个值又是由两部分组成的。前半部分表示x方向对齐,后半部分表示y方向对齐。家族成员如下:

  x, y自由合体就可以了。

xMaxYMax  //右下

xMidYMid  //中中

  preserveAspectRatio属性第2部分的值支持下面3个:

  下面这篇博文写的比较清楚:https://www.w3cplus.com/html5/svg-coordinate-systems.html

理解SVG坐标系和变换:视窗,viewBox和preserveAspectRatio 著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
原文: https://www.w3cplus.com/html5/svg-coordinate-systems.html ? w3cplus.com

理解SVG坐标系和变换:视窗,viewBox和preserveAspectRatio 著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
原文: https://www.w3cplus.com/html5/svg-coordinate-systems.html ? w3cplus.com

原文地址:https://www.cnblogs.com/goloving/p/9302294.html

时间: 2024-10-21 15:02:33

理解SVG图片标签的viewport、viewBox、preserveAspectRatio缩放的相关文章

深入理解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和

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

工欲善其事必先利其器,没有真正搞懂SVG里的viewport,viewbox, preserveAspectRatio这三个属性,就很容易遇到坑,最近写项目用到svg这三个属性被我一眼就略过 ,后来发现自己并没有理解透,导致写项目产生了奇怪的坑,后面解决了,就是原理没通透,趁着大周末,来一波整理吧 一.这些理论知识必不可少 1.viewport <svg width="400" height="200"></svg> 上面svg中定义的是一个

理解SVG的viewport,viewBox,preserveAspectRatio

万丈高楼平地起,基础很重要. viewport 表示SVG可见区域的大小,或者可以想象成舞台大小,画布大小. <svg width="500" height="300"></svg> 上面的SVG代码定义了一个视区,宽500单位,高300单位. 注意这里的措辞是"单位",不是"像素".虽然说,width/height如果是纯数字,使用的就是"像素"作为单位的. 也就是说,上面SVG的

理解SVG的viewport,viewBox,preserveAspectRatio【2】

一个svg,设置了viewBox之后,viewBox的长宽值如果都小于svg的viewport的长宽值,那么结果一定是放大:但是viewBox的长宽值一旦有一个值大于vewport之后,最后的实际效果就不是放大,而是缩小了. 因为viewBox的目的是要自己设置的长宽范围填满viewport.viewport的长宽是确定的,viewBox如果超出了viewport,然后又企图去填满viewport,必然是缩小自己.这里的"填满"换成"适应"应该更合适.viewBox

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

SVG元素不像HTML元素一样由CSS盒模型管理.这使得我们可以更加灵活定位和变换这些元素-也许一眼看上去不太直观.然而,一旦你理解了SVG坐标系和变换,操纵SVG会非常简单并且很有意义.本篇文章中我们将讨论控制SVG坐标系的最重要的三个属性:viewport, viewBox, 和 preserveAspectRatio. 这是本系列三篇文章中的第一篇,这篇文章讨论SVG中的坐标系和变换. 理解SVG坐标系和变换(第一部分)-viewport,viewBox,和preserveAspectRa

理解SVG的viewport,viewBox【1】

viewport表示的是svg可视区大小,具体体现就是svg元素的width和height属性值所圈起来的区域: <svg width="400" height="300" style="border:1px solid #cd0000;">     <rect x="10" y="5" width="20" height="15" fill=&qu

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

SVG元素可以通过缩放,移动,倾斜和旋转来变换-类似HTML元素使用CSS transform来变换.然而,当涉及到坐标系时这些变换所产生的影响必然有一定差别.在这篇文章中我们讨论SVG的transform属性和CSS属性,包括如何使用,以及你必须知道的关于SVG坐标系变换的知识. 这是我写的SVG坐标系统和变换部分的第二篇.在第一篇中,包括了任何要理解SVG坐标系统基础的需要知道的内容:更具体的是, SVG viewport, viewBox 和 preserveAspectRatio 属性.

svg图片无法完全铺满

今天设计给了一张svg的图片做背景,但是经过两个小时的纠结,发现就是无法铺满元素,然后经过高人指点,发现是svg图片的原因,百度后果然能解决问题. 解决: 在webstorm里面打开svg图片,然后在svg标签上面加上属性:preserveAspectRatio="none meet"; <svg width="1264px" height="722px" viewBox="0 0 1264 722" version=&

一些SVG 图片向下兼容优雅降级技术

转自:http://www.zhangxinxu.com/wordpress/?p=3678 一.SVG前言 再一次拿可缩放矢量图形SVG(Scalable Vector Graphics)说事,对SVG有所关注的同行应该都知道,IE8-以及Android 2.3默认浏览器是不支持SVG的,实际项目,这些浏览器,至少IE8浏览器还没有到不管不问的时候,因此,在使用视网膜显示友好的SVG同时,我们还要做一点优雅降级,使IE8等考古价值浏览器也能手染余香. 本文内容参考自CSS-tricks SVG