SVG 中的负坐标
已发表: 2023-01-17如果您正在创建 SVG 图像,您可能想知道是否可以使用负坐标。 简短的回答是肯定的,您可以将负坐标放入SVG 文件中。 但是,在使用负坐标时需要注意一些事项。 首先,在某些浏览器中显示图像时,负坐标会导致问题。 此外,某些 SVG 元素(例如元素)如果具有负坐标则无法正确显示。 尽管存在这些潜在问题,但在某些情况下使用负坐标可能会有所帮助。 例如,如果您正在创建将用作背景的图像,您可能希望使用负坐标来正确定位图像。 使用负坐标时,重要的是要在不同的浏览器中测试图像以确保其正确显示。 稍加小心,您就可以毫无问题地创建使用负坐标的 SVG 图像。
Svg 坐标如何工作?

SVG 中的所有元素都由与画布(以及许多其他计算机绘图例程)中的元素相同的坐标或网格系统表示。 文档的左上角被认为是点 (0,0),这意味着它是某事的开始。
(第 1 部分)- 介绍 SVG坐标系和变换。 Views、viewBox 和 preserveAspectRatio 只是其中的几个属性。 这是关于 SVG 坐标系和变换的三部分系列文章中的第一部分。 为了将文章中的概念和解释形象化,我做了一个交互式demo。 视口大小是通过使用元素外包装上的宽度和高度属性来设置的。 在 sva 中,可以使用单元的标识符或值本身的标识符来设置值。 该值可用于将以用户单位指定的单位与以 中指定的相同数量的单位进行比较。
ViewBox 坐标系用于在画布上绘制图形。 该坐标系可能小于或大于视口。 视图属性框可用于定义您自己的用户坐标系。 也可以使用转换(例如,当前坐标系)创建新的用户空间。 单击 Viewbox=”0 0 400 300″ 时,会创建一个较小尺寸的画布。 学习 viewbox 的最佳方法是以与 Google 地图相同的方式将其可视化。 在这种情况下,200 个用户单元映射到 800 个视口单元,而用户坐标系映射到视口坐标系。
结果,创建了类似于上图所示的放大效果。 当使用viewBox=”100 100 200 150”时,也作为裁剪使用。 图形被裁剪和缩放以用颜色填充整个视口区域。 viewBox 属性会自动将用户空间中的矩形映射到用户空间中特定区域(通常称为视口)的边界。 图形的裁剪方面只是缩放以适合视口的帧数。 该规范提供了一个转换转换,将图像转换为 100 个单位的图形,以及裁剪和缩放转换。 此类包括一个宽度和高度大于视口宽度和高度的视框。
下一节将解释不同的宽高比。 在用户坐标系中,每1个单位代表viewport宽度和viewBox垂直宽度。 每个用户的 y 单位都映射到视口上的 0.66。 ViewBox = 使用它的结果。 如前所述,“0”在我们的示例中表示零。 这是我们将在应用程序期间使用的行为。 对行为的控制是什么?
由于 preserveAspectRatio 属性,您可以在保持图形纵横比的同时增加视图框的缩放比例。 它可以用于任何元素(有关视口的更多信息,请参阅以下部分)。 鹦鹉盒的尺寸由视图框中的值 0 0 200 300 表示。 如果浏览器能够拉伸图形以填充整个视口,它就会看起来像那样。 如果您指定整个 viewBox 不应从视口可见,则使用 MeetOrSlice 方法。 该值类似于图像封面中包含的尺寸值和背景图像中包含的尺寸值。 如果 viewBox 的纵横比与显示纵横比不匹配,则会缩小它的纵横比。
九个值之一,或无值,用于对齐参数。 图像的纵横比通过统一缩放来保持,除了零之外没有其他值。 因此,在这两种情况下,图形都会缩放以对齐视口的中轴,使其中轴与视口的中轴相交。 align 的默认值为 xMidYMid,这意味着图形被缩放以对齐其中轴。 min-x、max-x 和 mid-y 值指示元素的边界框与其视口的对齐方式。 如有必要,按比例缩放给定元素的元素的图形内容(不减小纵横比)。 换句话说,一个 viewBox 被拉伸或收缩以适应视口,以忽略纵横比的方式。
preserveRatioAspect 属性允许您指定是否统一缩放 viewBox 以及如何在视口内对齐它。 很容易看出为什么前面的 viewBox=0 0 200 300 中的某些对齐方式具有不同的对齐值。 因此,我们在这里使用的 200×300 viewBox 值也会有很大差异。 在我的交互式演示中,我演示了如何更改这些属性的值并看到了结果。 下图描述了 viewBox = 对视图框的影响。 您可以使用坐标 100 0 200 300 定位对齐轴。
在 Svg 中调整视口大小
视口有两个数字:min-x,表示最左边的位置; 和 min-y,表示最上面的位置。 由于最后两个数字,宽度和高度,定义了视口的宽度和高度,可以定义用户空间。
Svg 中的 Viewbox 是什么?
SVG 中的 viewBox 定义绘制图形元素的坐标系。 它可以被认为是 SVG 图像“画布”上的一个窗口。 如果你想要响应式 SVG 图像,viewBox 属性非常有用。
我们的 SVG 可以填充它们想要的任何容器,如下图所示: 我们可以使用这种技术用我们的 SVG 填充我们想要的任何容器。 正确查看时,此图像上的 viewBox 将缩放到容器的尺寸。 当我们在 viewBox 中查看图像时,我们还可以隐藏它的一个方面,这在动画中非常有用。 viewBox 允许我们以非常有效的方式裁剪图像。 在本视频中,我们将向您展示如何使用它来制作云在天空中移动的动画。 设置动画的最简单方法是更改 viewBox 的 min-x 值。 PreserveRatioAspect 已从本文中省略,因为它可能会让人不知所措。

你能嵌套 Svgs 吗?
是的,您可以嵌套 SVG。 这意味着您可以将一个 SVG 放在另一个 SVG 中。 如果您想重复使用某个图形或创建更复杂的图形,这会很有用。
Svg 中的 Defs 元素
defs> 元素用作稍后将在 SVG 文档中引用的任何图形对象的缓冲区。 但是,这些对象没有直接呈现,但必须使用 use> 元素引用它们。
你如何缩放 Svgs?
有几种不同的方式来缩放 SVG。 一种方法是更改 viewBox 属性。 viewBox 属性定义 SVG 内容的坐标系。 通过更改 viewBox 属性,您可以更改 SVG 的大小。 缩放 SVG 的另一种方法是使用 transform 属性。 transform 属性允许您对元素应用转换。 您可以使用 transform 属性来缩放 SVG。
第一步是了解如何放大矢量图形(SVG)。 Amelia Bellamy-Royds 分享了对缩放 SVG 的惊人见解。 这不像缩放光栅图形那么简单,但它提供了许多有趣的可能性。 新的 SVG 用户可能很难理解程序应该如何以期望的方式运行。 透视图像的纵横比定义为其宽度与其高度的比值。 可以强制浏览器以与其固有高度和宽度不同的尺寸绘制光栅图像,但这会导致失真。 内联 SVG 是根据代码的大小绘制的,与画布大小无关。
ViewBox 是用于创建可缩放矢量图形的最后一个组件。 ViewBox 是元素中的一个元素属性。 该值由四个用空格或逗号分隔的数字组成:x、y、宽度和高度。 视口左上角的坐标系由 x 和 y 运算符指定。 要填充必要的高度,必须缩放一些.psc 和坐标。 当您创建大图像时,不符合其纵横比的尺寸将不会被拉伸或扭曲。 您也可以使用新的 object-fit CSS 属性为其他图像类型设置动画。
除了允许您的图形精确缩放为光栅图像之外,您还可以保留 AspectRatio=none。 光栅图像具有一系列比例,可以设置这些比例以获得特定的高度或宽度。 使用 sva 的最佳方法是什么? 有许多挑战。 在这种情况下,在 andlt;img> 中使用图像自动调整大小是一个很好的起点,但您需要稍微修改一下才能使其正常工作。 要设置元素的纵横比,请使用各种 CSS 属性,包括高度和边距。 viewBox 将始终在其他浏览器中启用; 但是,规范中未指定此行为。
如果您使用最新的 Firefox/Blink 浏览器,您的图像在 viewBox 中看起来会很棒。 如果您没有同时指定高度和宽度,这些浏览器将照常显示它们的默认尺寸。 对于内联 SVG,以及像 <object> 和其他元素这样的替换元素,使用容器元素是最简单的。 在内联图形中,官方高度将为零(至少,在这种情况下为零)。 值 conserveRatioAspect 会将图形减少为空。 换句话说,您希望图形拉伸以覆盖您提供的整个宽度,然后以适当的宽高比溢出到填充区域。 ViewBox 和 preserveRatioAspect 属性都具有很强的适应性。 嵌套元素可以有自己的缩放属性,可用于将图形比例的不同部分分配给同一元素。 如果您使用这种方法,标题图形可以被拉伸以覆盖宽屏显示,而不会感到局促或不合适。
Svg 到坐标
SVG 文件是一种图形文件,它使用由万维网联盟 (W3C) 创建的二维矢量图形格式。 SVG 文件是带有一组描述图像的 XML 标签的文本文件。 XML 标签可以被文本编辑器和网络浏览器读取。 使用 SVG 文件的优点是它们可以缩放到任意大小而不会降低质量。
在可以混合 DOM 和矢量交互之前,您可以将 SVG 用于各种功能。 与将其他元素序列化到 DOM 中的方式相同,可以操作 HTML 插入 SVG。 如果元素的 DOM 元素放置在元素之上,则可能需要覆盖 DOM 元素。 您可以通过向左拖动 window.scrollX 和 window 来确定页面的绝对位置。 在页面顶部,将 Y 滚动到顶部。 事件处理程序对象提供 DOM.clientX 和 .clientY 像素坐标,但这些必须转换为 SVG。 值得注意的是,基于矢量的网络提供了自己的矩阵分解机制来转换坐标。
getScreenCTM() 方法可用于将其应用于任何元素以及 SVG。 该过程需要平移、缩放、旋转和/或倾斜生成的坐标。 结果,下一层的坐标是前一层坐标的四分之一,因为它比标准 SVG 单位大四倍。
我如何在 Svg 中居中路径?
当路径居中时,可以更改svg viewBox 属性。 在这种情况下,您不需要将任何 svg 路径转换为它们的属性。 在您的示例中,y 偏移量与 Paul 对 viewBox=0 15.674 144 144 的回答相同。
什么是 Svg 视口?
视口是 SVG 图像在查看器中显示的位置。 从理论上讲,可以创建您想要的宽度或高度的 SVG 图像,但一次只能看到图像的一部分。 视口是可见的感兴趣区域。 可以使用元素的宽度和高度属性确定视口大小。