SVG 坐标系统

在开始学习如何绘图之前,我们先来看一下 SVG 的坐标系统。与很多计算机绘图所使用的坐标系统一样,SVG 也使用了网格坐标系统。这种坐标和我们以前在数学中学过的坐标有些不同。

数学中的坐标是由 x 轴(水平横向延伸)和 y 轴(垂直纵向延伸)交织组成,交点被称为坐标原点 (0,0) 。原点沿 x 轴向右为正值,反之为负值,沿 y 轴向上为正值,反之为负值。

而 SVG 网格坐标系统的特点如下所示:

  • 以左上角为坐标系的原点,即 (0,0)
  • 横向延伸为 X 轴正方向, x 坐标逐渐增大。纵向为 Y 轴正方向,y 坐标逐渐增大。
  • 坐标以像素 px 为单位。

坐标系统单位

SVG 坐标系中对应的值可以指定单位,也可以不指定单位,如果不指定单位则默认单位为 px

下面是 SVG 中支持的长度单位,包含了常见的 CSS 单位:

单位 描述
px 像素,相对于屏幕分辨率
em 相对于父元素的字体大小
ex 字符的高度 x
cm 厘米
mm 毫米
in 英寸
pt 点(1/72 英寸)
pc Picas(1/21英寸)

画布

SVG 画布就是用来绘制 SVG 内容的一个区域,这个画布可以无限延伸,我们可以在这个画布的任何位置绘制想要的内容。

SVG 视口(ViewPort)

SVG 的渲染都是在一个矩形区域内发生的,这个有限的矩形区域在 SVG 中被称为"视口",超出这个视口的图形将会被裁切并且隐藏。所以视口也就是 SVG 的渲染区域,用户能看到 SVG 内容的区域。

那么为什么超过视口的元素会被隐藏呢?这是因为每个 SVG 元素都有一个默认的 overflow: hidden 样式,所以超过视窗的内容不可见。如果想要让超出部分变为可见,可以将 overflow 属性的值设置为 visible

示例:

例如我们看下面这个例子:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>SVG学习(9xkd.com)</title>
        <link rel="styleSheet" type="text/css" href="./style.css">
    </head>
    <body>
        <svg>
            <rect width="300" height="300" style="fill:pink;"/>
        </svg>
    </body>
</html>    

上述代码中,我们绘制了一个宽为 300px ,高为 300px 的矩形,矩形的填充的颜色为粉色。但是因为我们没有这个 SVG 的视口宽高,所以视口会默认宽高为 300px * 150px,所以在浏览器中可以看到,矩形的高被隐藏了一半:

除了像上述所说的将 overflow 属性设置为 visible,例如:

<svg style="overflow:visible;">
    <rect width="300" height="300" style="fill:pink;"/>
</svg>

我们还可以通过给 <svg> 元素设置 widthheight 属性来给 SVG 视口设置宽和高。只要给视口设置的宽高大于绘制图形的宽高,那么图形就能够完整的显示啦。

其实画布和视口是两个比较容易混淆的概念,每当我们创建一个 <svg> 元素时,就相当于创建了一个无穷大的画布和一个视口。画布和视口分别对应两个坐标系统,一个为用户坐标系,一个为视窗坐标系。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • byzhangxinxufromhttp://www.zhangxinxu.com 本文地址:http://www...
    凌雲木阅读 7,179评论 0 8
  • SVG是什么 可缩放矢量图形(Scalable Vector Graphics),一种用来描述二位矢量图形的XML...
    greenteaObject阅读 2,598评论 0 1
  • 1. OpenGL坐标系统概述 OpenGL希望每次顶点着色后,我们的可见顶点都为标准化设备坐标(Normaliz...
    Coder_TanJX阅读 430评论 0 0
  • 概述: SVG 基于 XML 语法的图像格式,它可以任意改变其大小也不会变形,是一种和图像分辨率无关的可缩放矢量图...
    空心好蛋阅读 1,286评论 0 0
  • 前言 前面我们总结了OpenGL的基本概念,下面我们着重理解一下OpenGL中的各种坐标系 一、笛卡尔坐标系 二、...
    蚂蚁安然阅读 1,614评论 0 5