SVG的视窗与宽高比控制【4】

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

  为了理解每个align值的含义,我们将首先介绍每一个“轴”。

  还记得viewBox的min-x和min-y值吗?我们将使用它们来定义viewBox中的”min-x”和”min-y”轴。另外,我们将定义两个轴“max-x”和”max-y“,各自通过min-x + width 和 min-y + height来定位。最后,我们定义两个轴”mid-x”和”mid-y”,根据min-x + (width/2) 和 min-y + (height/2)来定位。

  这样做是不是让事情更复杂了呢?如果是这样,让我们看一下下面的图片来看一下每个轴代表了什么。在这张图片中,min-x和 min-y值都设置为0。viewBox被设置为viewBox = “0 0 300 300”。

  

svg

  上面图片中的灰色虚线代表视窗的mid-x和mid-y轴。我们将对它们赋一些值来对齐viewBox的mid-x和mid-y轴。对于视窗,min-x的值等于0,min-y值也等于0,max-x值等于viewBox的宽度,max-y的值等于高度,mid-x和mid-y代表了宽度和高度的中间值。

  对齐的取值包括:

  none

  不强制统一缩放。如果必要的话,在不统一(即不保持宽高比)的情况下缩放给定元素的图像内容直到元素的边界盒完全匹配是视窗矩形。

  换句话说,如果有必要的话viewBox被拉伸或缩放来完全适应整个视窗,不管宽高比。图形也许会扭曲。

  (注意:如果align的值是none,可选的meetOrSlice值无效。)

  xMinYMin

  强制统一缩放

  视窗X轴的最小值对齐元素viewBox的min-x。

  视窗Y轴的最小值对齐元素viewBox的min-y。

  把这个类比为backrgound-position: 0% 0%;。

  xMinYMid

  强制统一缩放。

  视窗X轴的最小值对齐元素viewBox的min-x。

  视窗Y轴的中间值来对齐元素的viewBox的中间值。

  把这个类比为backrgound-position: 0% 50%;。

  xMinYMax

  强制统一缩放。

  视窗X轴的最小值对齐元素viewBox的min-x。

  视窗X轴的最大值对齐元素的viewBox的min-y+height。

  把这个类比为backrgound-position: 0% 100%;。

  xMidYMin

  强制统一缩放。

  视窗X轴的中间值对齐元素的viewBox的X轴中间值。

  视窗Y轴的中间值对齐元素的viewBox的 min-y。

  把这个类比为backrgound-position: 50% 0%;。

  xMidYMid (默认值)

  强制统一缩放。

  视窗X轴的中间值对齐元素的viewBox的X轴中间值。

  视窗Y轴的中间值对齐元素的viewBox的Y轴中间值。

  把这个类比为backrgound-position: 50% 50%;。

  xMidYMax

  强制统一缩放。

  视窗X轴的中间值对齐元素的viewBox的X轴中间值。

  视窗Y轴的最大值对齐元素的viewBox的min-y+height。

  把这个类比为backrgound-position: 50% 100%;。

  xMaxYMin

  强制统一缩放。

  视窗X轴的最大值对齐元素的viewBox的 min-x+width。

  视窗Y轴的最小值对齐元素的viewBox的min-y。

  把这个类比为backrgound-position: 100% 0%;。

  xMaxYMid

  强制统一缩放。

  视窗X轴的最大值对齐元素的viewBox的 min-x+width。

  视窗Y轴的中间值对齐元素的viewBox的Y轴中间值。

  把这个类比为backrgound-position: 100% 50%;。

  xMaxYMax

  强制统一缩放。

  视窗X轴的最大值对齐元素的viewBox的 min-x+width。

  视窗Y轴的最大值对齐元素的viewBox的 min-y+height。

  把这个类比为backrgound-position: 100% 100%;。

  所以,通过使用preserveAspectRatio属性的align和meetOrSlice值,你可以声明是否统一缩放viewBox,是否和视窗对齐,在视窗中是否整个可见。

  有时候,取决于viewBox的尺寸,一些值可能会导致相似的结果,例如在早先viewBox=”0 0 200 300”的例子中,一些对齐完全用了不同的align值。这时候就要设置meetOrSlice的值为meet来保证viewBox包含在viewport内。

  互动演示

  要理解viewport, viewBox, 以及不同的preserveAspectRatio值是如何工作的最好方法是可视化的演示。

  出于这个目的,我创建了一个简单的互动演示,你可以改变这些属性的值来查看新值导致的结果。

  

svg

 

 

  传送门:http://sarasoueidan.com/demos/interactive-svg-coordinate-system/index.html

http://www.aseoe.com/ true SVG的视窗与宽高比控制 http://www.aseoe.com/show-80-745-1.html report <?php echo strlen($content) / 2; ?>   SVG元素不像HTML元素一样由CSS盒模型管理。这使得我们可以更加灵活定位和变换这些元素-也许一眼看上去不太直观。然而,一旦你理解了SVG坐标系和变换,操纵SVG会非常简单并且很有意义。本篇文章中我们将讨论控
TAG:SVG 视窗
本站欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明: 文章转载自:爱思资源网 http://www.aseoe.com/show-80-745-1.html

[前端插件推荐] Plugin

1 2 3 4
  • jQuery实现逐字逐句显示插件l-by-l.min.js
  • jQuery带方向感知的鼠标滑过图片边框特效插件
  • jQuery HotKeys监听键盘按下事件keydown插件
  • 响应式无限轮播jQuery旋转木马插件
响应式无限轮播jQuery旋转木马插件
web前端开发
爱思资源网 Copyright 2012-2014 Www.Aseoe.Com All rights reserved.(晋ICP备13001436号-1)