SVG 中的負坐標

已發表: 2023-01-17

如果您正在創建 SVG 圖像,您可能想知道是否可以使用負坐標。 簡短的回答是肯定的,您可以將負坐標放入SVG 文件中。 但是,在使用負坐標時需要注意一些事項。 首先,在某些瀏覽器中顯示圖像時,負坐標會導致問題。 此外,某些 SVG 元素(例如元素)如果具有負坐標則無法正確顯示。 儘管存在這些潛在問題,但在某些情況下使用負坐標可能會有所幫助。 例如,如果您正在創建將用作背景的圖像,您可能希望使用負坐標來正確定位圖像。 使用負坐標時,重要的是要在不同的瀏覽器中測試圖像以確保其正確顯示。 稍加小心,您就可以毫無問題地創建使用負坐標的 SVG 圖像。

Svg 坐標如何工作?

Svg 坐標如何工作?
圖片來源 – codepen.io

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 圖像,但一次只能看到圖像的一部分。 視口是可見的感興趣區域。 可以使用元素的寬度和高度屬性確定視口大小。