最近做了一个关于SVG的应用的技术分享网站svgtrick.com,会同步一些文章到这里来,更多的可以去网站看看。

接触过SVG都知道,SVG有自己的一套坐标视窗系统,理解它对于在SVG的使用,特别是要对SVG进行放大缩小,viewbox是必须要了解的一个知识点,而viewbox则是SVG中一个相对复杂的概念,打算分两篇来聊聊它,这篇文章就来聊聊SVG中的viewbox的一个基本知识和基本的应用。

viewport

首先来了解下SVG中的viewport这个概念,简单来说viewbox就是值指SVG图片本身可视区域的大小,除了SVG本身,其它一些元素也有可视区域的限制,比如symbolimagepattern等。

在SVG中viewport主要是通过widthheight属性来定义的。比如,我们定义一个width="600"height="600"就表示我们定义了一个600X600的可视区域,这与html和css中还有一点不同,SVG本身定义这些属性并没有单位,不过基本上都是以像素px为单位的。

viewbox

viewbox确实是SVG中比较难懂抽象的一个属性,第一次接触它确实不知道它干嘛用的,就算理解了在使用中,有可能还是不知道如何去设置它。

viewbox简单的理解就是用来定义SVG的可视范围,那跟上面提到的viewbox有什么关系呢?这样来说吧,当没有设置viewbox的时候,viewbox就是整个viewport的大小,而当我们设定了viewbox,等于就是告诉SVG,我指定的这个区域是我要显示的,SVG就会把这个区域放大到viewport的大小,比如电视机,电视机就是那么大(viewport),而电视机里的画面,可以特写也可以全景,这就是viewbox。

preserveAspectRatio

preserveAspectRatio和viewbox是一个绝配的搭档,特别是当viewbox的值和viewport的值(也就是宽和高)不一样的时候,preserveAspectRatio属性就直接决定浏览器怎么来显示图片。

preserveAspectRatio这个属性有几个参数,要特别注意下,具体可以去这个地址详细了解下
文档地址。

下面我们来通过几个实例来了解下viewbox的实际应用。

实例

首先来看看viewbox的值和viewport的值一样的表现,代码如下所示:

<div class="contain-demo"><svg width="115" height="190" viewBox="0 0 115 190"><desc>Green pear to show effects of matching viewport and viewBox.</desc><g><path fill="#BBC42A" d="M4.976,126.451c-0.571,1.76-1.067,3.551-1.475,5.377c-6.62,29.681,7.465,54.363,43.244,56.718 c56.994,3.751,77.653-25.65,60.462-67.25C90.017,79.697,82.063,89.688,80.366,57.764c-0.764-14.367-11.098-27.167-26.203-24.576c-17.378,2.982-19.794,19.916-22.192,34.44C28.36,89.508,11.623,105.957,4.976,126.451z"/><path fill="none" stroke="#59351C" stroke-width="7" stroke-linecap="round" d="M56.427,40.406c0,0-7.375-15.376,8.06-35.837"/><path fill="#7AA20D" stroke="#7AA20D" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" d="M54.247,35.412c0.787-3.843,3.55-7.335,8.368-9.848c10.053-5.244,18.075-4.042,28.061,0.2c0.004,0.002,12.83,5.449,20.517-4.672c-4.778,6.291-9.415,12.478-14.878,18.237c-8.878,9.359-25.348,22.181-37.176,9.661C55.019,44.629,53.349,39.793,54.247,35.412z"/></g></svg>
</div>

从上面代码可以看出我们把viewbox的值设置和viewport的宽和高一样,运行结果如下图所示:

demo地址

减小viewbox

如果我们把viewbox的值各减少50px,我们就定义了SVG要显示的区域,结果就是SVG会把整个图像的左部区域拉大填满整个画布显示,如下图所示:

详细代码可以去这里查看。

增加viewport

上面由于我们减少了viewbox,由于SVG的可视区域也就是viewport不足以容纳显示整个内容,所以才会出现上图所示的只显示了图片的部分内容。

下面我们把SVG的可视区域也就是viewport的宽高各增加200px,viewbox保持115和190不变,则SVG内容会直接铺满整个可视区域,如下图所示:

demo地址

这一篇先了解了viewbox的一些基本知识以及应用,下一篇再来深入了解下它的其它一些参数以及应用。

参考文章:A Look At SVG viewBox and viewport,文章的实例都来自这篇文章。

SVG 基本知识:SVG 放大缩小之 viewbox 初探 (1)相关推荐

  1. svg放大缩小拖动_Day2 三种图表技术SVG、Canvas、WebGL 3D比较

    1.什么是SVG? 描述: 一种使用XML描述的2D图形的语言 SVG基于XML意味着,SVG DOM中的每个元素都是可用的,可以为某个元素附加Javascript事件处理器. 在 SVG 中,每个被 ...

  2. ai里为什么不能随意放大缩小_平面设计基础知识:平面设计师应该熟练掌握的软件之AI。...

    今天给大家整理了一下,平面设计基础知识中平面设计师应该熟练掌握的软件之AI.这个系列共有五篇,其他几篇都在首页,可以去看一下,有任何问题可以提出来,下面我们一起看一下平面设计基础知识中平面设计师应该熟 ...

  3. SVG相关知识与应用

    SVG,即Scalable Vector Graphics 可伸缩矢量图形,这种图像格式在前端中已经使用的非常广泛了. 首先要解释下什么是矢量图像,什么是位图图像? 1.矢量图像:SVG是W3C 推出 ...

  4. svg载入html,SVG系列教程:SVG简介与嵌入HTML页面的方式

    随着技术向前的推进,SVG相关的讨论也越渐频繁.为了紧跟时代的步伐,我也开始步入SVG相关技术的探索与学习之中.从这篇文章开始会在W3cplus站点上陆续向大家推出有关于SVG相关的教程.译文或案例等 ...

  5. SVG 教程 (七)SVG 实例,SVG 参考手册

    SVG 实例 在线实例 下面的例子是把SVG代码直接嵌入到HTML代码中. 谷歌Chrome,火狐,Internet Explorer9,和Safari都支持. 注意:下面的例子将不会在Opera运行 ...

  6. js实现图片放大缩小功能

    在web项目中,用到js来实现图片的放大缩小功能,在这里是通过zoomify来实现,并在这个基础上进行二次改进,已达到更满意的效果. 1.下面是展示的效果: 通过对zoomifyjs改进,达到上述效果 ...

  7. svg标签和svg文件区别_SVGO减少SVG文件大小的三种方法

    svg标签和svg文件区别 This article is part of a series created in partnership with SiteGround. Thank you for ...

  8. vue+openlayers中实现图片展示与图片的拖拽和放大缩小(一)

    前言: openlayers中渲染图片是有多种方法的, Icon ,Image 等等都可以实现将图片放到地图上面,但是操作图片的话,方法比较少了,这里是配合 ol-ext 来实现的. 相关资料: 1. ...

  9. svg标签和svg文件区别_什么是SVG文件? SVG图片和标签说明

    svg标签和svg文件区别 SVG (SVG) SVG or Scalable Vector Graphics is a web standard for defining vector-based ...

最新文章

  1. ceph bluestore 源码分析:刷缓存(trim)逻辑
  2. winlogon.exe应用程序错误的解决方法
  3. 【iOS】图片缩放动画
  4. Qt访问SQLite数据库
  5. 谷歌正式推出 Fuchsia OS比拼HarmonyOS!
  6. mysql建表_128、mysql建表和简单sql
  7. 中国电信:预计2021年归母净利润同比增长23%-25%
  8. 已设置的指纹解锁怎样解除_指纹锁哪个牌子更好用?
  9. Android Bitmap保存时背景变为黑色的问题
  10. C++ 招聘干部录取系统
  11. ssm(Spring+SpringMVC+MyBatis)台球室内乒乓球室体育器械租赁收费系统
  12. matlab画图——semilogy函数介绍
  13. 淘宝客是什么?淘宝客怎么做呢?
  14. HTC M7日版HTL22刷机包 毒蛇2.5.0 ART NFC Sense6.0
  15. LearnOpenGL 光照—多光源
  16. cadence 通孔焊盘_【精品】PCB设计软件allegro不规则带通孔焊盘的制作
  17. 报错Unknown custom element: <组件名> - did you register the component correctly?的原因及解决办法
  18. 独家专访 | 获得软银巨额投资的 Mapbox,要如何为自动驾驶提供地图服务?
  19. 各家邮箱容量是多少?哪家邮箱容量最大?
  20. ptp协议服务器,ptp服务器 ieee1588 ieee 1588 1588对时

热门文章

  1. 云路由 vyatta 体验(六)防火墙
  2. flash build 4.6 不能debug 报错 C:\WINDOWS\system32\...
  3. C#实现动态桌面背景图片切换
  4. Office 365离线安装
  5. [ 一起学React系列 -- 6 ] 秘术之时间旅行-1
  6. mysql 全表扫描、全索引扫描、索引覆盖(覆盖索引)
  7. 理解mipi协议【转】
  8. 张北将成规模150万台服务器的云计算产业基地
  9. jmeter的两种参数化方法
  10. Cororsync+Pacemaker