SVG入门-基本变换

news/2024/7/3 13:51:27

前言

SVG元素的形变都会用到一个元素属性transform,跟CSS的transform的形变差不多。

HTML transform和SVG transform

SVG自带transform属性,例如:

<svg width="200" height="150">
    <rect x="30" y="30" width="120" height="90" transform="rotate(45)"></rect>
</svg>

功能基本上和CSS3中的transform差不多包括:位移translate, 旋转rotate, 缩放scale, 斜切skew以及直接矩阵matrix。不同的是没有单独的可以设置X或者Y的类似translateX, rotateX方法。

两者间不一样的地方有:

1、CSS3 transform一般用在普通元素上,虽然也可以应用在SVG元素上,但是IE浏览器(IE edge未测试)却不支持SVG元素;

2、HTML元素的CSS3 transform和SVG的transform坐标系统大相径庭;

平常我们使用transform其坐标是相对于当前元素而言的,默认是元素的中心点变换,我们可以通过transform-origin属性改变变换的中心点。而SVG中的transform的坐标变换的是相对于画布的左上角计算的,跟HTML的transform差别较大,理解上也更加麻烦。而本文就是彻底理清SVG中的transform到底是怎么工作的。

平移

你能把元素移动一段距离,甚至你可以根据相应的属性定位它。translate()变形方法专门效力于这个目的。

<rect x="0" y="0" width="10" height="10" transform="translate(30,40)" />

该示例将呈现一个矩形,移到点(30,40),而不是出现在点(0,0)。

如果没有指定第二个值,它默认被赋值0。

旋转

旋转一个元素是相当常见的任务。使用rotate()变形就可以了:

<rect x="20" y="20" width="20" height="20" transform="rotate(45)" />

该示例显示了一个方形,旋转了45度。rotate()的值是用角度数指定的。

斜切

利用一个矩形制作一个斜菱形。可用skewX()变形和skewY()变形。每个需要一角度以确定元素斜切到多远。

<rect x="20" y="20" width="20" height="20" transform="skewX(45)" />

缩放

scale()变形改变了元素的尺寸。它需要两个数字,作为比率计算如何缩放。0.5表示收缩到50%。如果第二个数字被忽略了,它默认等于第一个值。

<rect x="20" y="20" width="20" height="20" transform="scale(0.5)" />

用matrix()实现复杂变形


所有上面的变形可以表达为一个2x3的变形矩阵。组合一些变形,可以直接用matrix(a, b, c, d, e, f)变形设置结果矩阵,利用下面的矩阵,它把来自上一个坐标系统的坐标映射到新的坐标系统:

在这里插入图片描述


http://www.niftyadmin.cn/n/2951678.html

相关文章

5G基站ip如何获取

5G基站的IP地址可以通过以下几种方式获取: 从运营商处获取&#xff0c;即通过联系运营商的客服人员获取。通过网络扫描工具扫描局域网中的IP地址来查找。通过登录管理后台查看网络拓扑结构。通过网络监测和分析软件来获取。 注意: 不同运营商,不同基站的 IP地址都不一样,请确认…

LeetCode No.168. Excel表列名称

class Solution { public:string convertToTitle(int n) {string ans "";while (n > 0) {n - 1; //重点ans.push_back(A (n % 26));n / 26;}reverse(ans.begin(), ans.end());return ans;} };类似问题&#xff1a;171. Excel表列序号 class Solution {int titl…

css中的各种定位

static&#xff1a;静态定位是position的默认值&#xff0c;元素框正常生成&#xff0c;也就是没有定位时的正常显示。 relative&#xff1a;相对定位 用法一&#xff1a;元素相对自身的原位置偏移某个距离&#xff0c;但是原本的空间依旧保留&#xff0c;表现为空白。 用法二&…

druidYAML配置文件打开监控, 给个示例

下面是一个简单的 druid YAML 配置文件示例&#xff0c;用于打开监控&#xff1a; server:type: "simple"host: "0.0.0.0"port: 8082monitoring:druid.emitter:type: "http"host: "localhost"port: 8090druid.monitor:type: "log…

需求入门:原型开发简介

原型开发简介转自&#xff1a;http://www.cnblogs.com/zhoujg/archive/2009/11/15/1603450.html 为什么需要原型 建立原型的主要原因是为了解决在产品开发的早期阶段不确定的问题&#xff0c;利用这些不确定性来判断系统中哪一部分需要建立原型和希望从用户对原型的评价中获得什…

制度化的发布流程

由于系统上线后程序修改十分频繁,经常出现上午修改,下午就要发布的程序,往往需要发布的程序没有经过测试就直接发布到生产环境了,但由于一直没有出现什么问题,就习以为常了.虽然,在潜意识里面认为:没有经过QA/客户的验收测试就直接发布生产环境,风险是非常高的,但因为没有出现问…

JAVA语言的发展历史

1990年12月&#xff0c;SUN MicroSystem公司成立了一个名为(Green Team)绿色项目的小组&#xff0c;Jame Gosling&#xff08;Java之父&#xff09;,Bill Joe等人便是该小组的成员&#xff0c;小组成立的初衷是为了开发一种能够在电视,控制烤箱等家用消费类电子产品上进行交互式…

SVG入门-滤镜

前言 虽然SVG不是一种位图描述语言&#xff0c;佴它仍然允许我们使用一些相同的工具&#xff0c;比如滤镜。当SVG阅读器程序处理一个图形对象时&#xff0c;它会将对象呈现在位图输出设备上&#xff1b;在某一时刻&#xff0c;阅读器程 序会把对象的描述信息转换为一组对应的像…