CSS 使用 data URL 產生 SVG 圖樣,因為它會將完整的 SVG 圖塊直接嵌入樣式表中,避免另行要求圖片檔案。這是匯出方式的選擇,而非 SVG 圖樣本身的要求。

這種方法適用於原型設計、卡片、徽章、預留位置及受控的裝飾性介面,因為不需要上傳素材或依賴託管的圖片。預覽比素材本身大:它會顯示一個來源圖塊在整個介面上重複,而獨立標記與下載內容僅包含精簡的圖塊。可見的重複效果由 CSS 產生。

why does the css use a data url when i generate svg pattern
為何在產生 SVG 圖樣時,CSS 會使用 data URL?

產生的 data URL 實際包含哪些內容

data URL(也稱為 data URI)會將內容承載於 URL 字串中。在這裡,產生的 background-image 值包含百分比編碼後的完整 SVG。該編碼內容正是獨立 SVG 輸出中顯示的精確圖塊,而非另附或近似的版本。

產生的 CSS 包含三個相關的宣告。background-color 提供純色背景,background-image 包含經編碼的 SVG 圖塊,而 background-size 則符合所選正方形圖塊的尺寸。百分比編碼可讓 SVG 分隔符號與 HEX 色碼值保留在 url(...) 內,而不會與 CSS 或 URL 語法衝突。

此實作並未以內部 SVG 圖樣元素包裝母題。W3C SVG 2 圖樣模型與MDN 的 SVG pattern 元素文件描述的是在 SVG 文件內定義的圖樣。產生器實際上會匯出一般的 SVG 圖塊,再使用 CSS 背景平鋪來建立較大的重複區域。

產生的輸出 包含的內容 實用目的
即時預覽 在較大介面上重複的來源圖塊 檢查外觀、密度、對比及可見接縫
獨立 SVG 標記 一個具有明確尺寸、viewBox、背景矩形及母題的正方形圖塊 檢視、儲存或手動納入來源 SVG
CSS 背景色彩、background-image 中經百分比編碼的圖塊,以及相符的 background-size 直接將圖樣套用為 CSS 背景
下載的 SVG 圖塊 與標記欄位中顯示的同一個單一來源圖塊 當 data URL 受到限制時,作為已核准的素材使用

產生並檢視來源圖塊

  1. 開啟SVG 圖樣產生器,選擇圓點、格線、對角線或波浪。將圖塊尺寸設為 8 至 128 像素的整數,並將形狀寬度設為 1 至 12 像素的值。輸入前景與背景色彩,使用六位數的 HEX 值;產生器會將這些色彩正規化為小寫。
  2. 以圖樣預計使用的近似尺寸檢視重複預覽。圖塊尺寸會控制水平與垂直方向的重複間隔,因此較小的圖塊可在相同區域中容納更多母題,而較大的圖塊則會留下更多視覺空間。
  3. 請以視覺方式比較形狀寬度控制項,不要假設相同數值就具有相同的視覺重量。對圓點而言,形狀寬度會改變圓形半徑;對線條樣式而言,則會改變筆畫寬度。強烈的背景與前景對比可能會讓這些差異特別明顯。
  4. 選擇適合目標用途的輸出。複製 CSS 以取得現成的背景宣告,複製獨立 SVG 以取得來源標記,或下載 SVG 圖塊以進行以素材為基礎的工作流程。Copy CSS 與 Copy SVG 動作會分別要求剪貼簿權限。複製成功時會指出格式,而權限遭拒時,唯讀輸出仍會保持可見,以便手動選取。
  5. 記錄所選的樣式、圖塊尺寸、形狀寬度與色彩。使用完全相同的控制項重新建立時,會產生逐位元組完全相同的 SVG 與 CSS 輸出,讓已部署的圖樣更容易重現。

將產生的 CSS 套用至 CSS 背景

  1. 開啟 Copy CSS 輸出並複製完整宣告。其結構如下:.pattern { background-color: <background HEX>; background-image: url("data:image/svg+xml,<percent-encoded generated SVG>"); background-size: <tile size>px <tile size>px; }。請使用工具產生的確切值,而非預留位置。
  2. 將產生的宣告貼入目標元素的規則中。請保持經編碼的 background-image 完整;將原始 SVG 標籤手動插入 URL 可能會破壞宣告。
  3. 若希望部署結果與產生的預覽相符,請保留相符的 background-size。CSS 背景圖片預設會在水平與垂直方向重複,因此小型 SVG 圖塊可覆蓋元素,而不必包含大型預覽的副本。
  4. 儲存樣式表,並在預定使用的瀏覽器中載入頁面。以最終 CSS 尺寸檢查圖樣,包括元素周圍的區域及其後方的任何不同背景色彩。
  5. 如果圖片缺失,請先檢查目標位置的內容安全政策(Content Security Policy)、清理工具或發布工作流程,再變更 SVG。data URL 遭封鎖是政策問題,並非圖塊幾何圖形產生失敗的證據。

當目標位置封鎖 data URL 時予以取代

目標位置的內容安全政策、清理工具、電子郵件用戶端或 CMS 可能拒絕 data URL。產生器無法覆寫這些限制。遇到這種情況時,支援的替代方法是將下載的圖塊作為一般且已核准的素材使用,而不是嘗試強制通過編碼後的 URL。

方法 目標位置需要哪些項目 主要考量
內嵌 data URL 包含完整產生 CSS 的樣式表 不需要另行要求圖片,但目標位置的規則可能會封鎖它
已核准的素材 URL 下載的圖塊、允許的託管位置及其最終 URL 適用於禁止 data URL 的情況
獨立 SVG 標記 可接受 SVG 標記的應用程式 應用程式必須定義如何重複或放置圖塊
  1. 選擇 Download SVG Tile。儲存的檔案是精簡的來源圖塊,而非預覽中顯示的大型重複區域。
  2. 從目標位置核准的素材位置提供該圖塊,例如網站既有的靜態素材工作流程。
  3. 只將 background-image: url(...) 內的 data URL 換成已核准的素材 URL。保留產生的 background-color 與 background-size。
  4. 再次載入最終頁面或訊息,並確認目標位置實際渲染規則下的重複效果。如果 CMS 或電子郵件用戶端沒有經核准的背景素材工作流程,產生器也無法提供。

以最終渲染尺寸檢查重複效果

圖塊幾何圖形是具決定性的。圓點會在正方形圖塊中心放置一個圓形。格線會繪製上邊緣與左邊緣,讓相鄰副本完成點陣,且不會產生雙倍寬度的內部線條。對角圖樣使用跨越圖塊邊界的平行線段,而波浪則使用二次曲線及其平滑的二次延續曲線。

這些建構規則能讓相鄰副本在幾何上相容,但無法保證每個渲染像素看起來都完全相同。部署前請檢視以下項目:

  • 以最終顯示尺寸及裝置像素比測試 CSS。即時預覽是向量渲染,而非最終瀏覽器輸出的螢幕截圖。
  • 檢查瀏覽器縮放與小數版面縮放;這些因素可能會使細線或單像素筆畫看起來不均勻。
  • 在強烈色彩對比下比較圖樣,因為反鋸齒差異與過重的筆畫會更容易察覺。
  • 仔細檢視對角邊界。即使來源幾何圖形相同,不同的 SVG 點陣化工具仍可能產生不同的邊緣像素。

較大的筆畫寬度也可能主宰小型圖塊。幾何圖形、反鋸齒、縮放及最終渲染環境都會影響結果,因此視覺檢視比假設有效的 SVG 宣告在所有地方都完美呈現更可靠。

瞭解產生器的實用限制

產生器專注於以支援的樣式製作小型向量圖塊。它無法建立 photographic 紋理、雜訊、各儲存格可獨立調整尺寸的棋盤格、自訂路徑上傳、旋轉、漸層、遮罩、動畫或多層組合。它也不會進一步精簡 SVG,只會保留簡潔且具決定性的標記。它不保證印刷套印、紋理隨機性、感知一致性、無障礙功能,亦不保證在不同方式點陣化 SVG 的軟體中產生相同結果。對於支援的裝飾性背景,data URL 是一種精簡的傳遞格式,但仍須進行最終視覺測試與目標位置政策檢查。