記錄--為什麼推薦用svg而不用icon?

来源:https://www.cnblogs.com/smileZAZ/archive/2023/06/13/17478185.html
-Advertisement-
Play Games

這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 使用背景: 1.因為svg圖標在任何設備下都可以高清顯示,不會模糊。而icon會在顯卡比較低的電腦上有顯示模糊的情況 2.svg圖標在頁面render時 速度會比icon稍微快一點 3.實現小程式換膚功能 ;方案見:www.yuque.c ...


這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助

使用背景:

1.因為svg圖標在任何設備下都可以高清顯示,不會模糊。而icon會在顯卡比較低的電腦上有顯示模糊的情況

2.svg圖標在頁面render時 速度會比icon稍微快一點 3.實現小程式換膚功能 ;方案見:www.yuque.com/lufeilizhix…

// svg在html里的使用示例01
<div>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<title>home</title>
<path d="M32 18.451l-16-12.42-16 12.42v-5.064l16-12.42 16 12.42zM28 18v12h-8v-8h-8v8h-8v-12l12-9z"></path>
</svg>
</div>

SVG基礎可參考:www.yuque.com/lufeilizhix…

Svg-inline的使用

//示例02

import iconShop from '../assets/menuIcon/shop.svg?inline'
import iconCustomer from '../assets/menuIcon/customer.svg?inline'
import iconCustomerService from '../assets/menuIcon/customerService.svg?inline'
import iconNuCoin from '../assets/menuIcon/nuCoin.svg?inline'
import iconBanner from '../assets/menuIcon/banner.svg?inline'
import iconAccount from '../assets/menuIcon/account.svg?inline'
import iconDataReport from '../assets/menuIcon/dataReport.svg?inline'
import iconVera from '../assets/menuIcon/banner_01.svg?inline'

inline svg是目前前端圖標解決方案的最優解(當然不僅限於圖標),而且使用方式也及其簡單,只要將svg圖標代碼當成普通的html元素來使用即可,如:

<!-- 繪製右箭頭 -->
<svg viewBox="0 0 1024 1024" height="1em" width="1em" fill="currentColor">
  <path d="M665.6 512L419.84 768l-61.44-64 184.32-192L358.4 320l61.44-64 184.32 192 61.44 64z" />
</svg>

<!-- 繪製邊框 -->
<svg viewBox="0 0 20 2" preserveAspectRatio="none" width="100%" height="2px">
  <path d="M0 1L20 1" stroke="#000" stoke-width="2px"></path>
</svg>

註意: 新版chrome不支持 # , 需要改成%23 ;stroke="%23000"

作為圖片或背景使用時

 icon: https://www.baidu.com+ '/icons/icon_01.svg' 
<image  class="headIcon" src="data:image/svg+xml,{{icon}}"></image>
**特別註意 需要把img標簽換成image標簽**

將上面的代碼插入html文檔即可以很簡單地繪製出一些圖標。 正常情況下會將svg保存在本地,具體的頁面中導入,參考示例02 作為組件使用;目的是可復用 一般來說,使用inline svg作為圖標使用時,想要保留svg的縱橫比,可以只指定width屬性,但是一般為了清晰都同時指定height屬性。但如果是像上面繪製邊框這種不需要保留縱橫比的情形,可將preserveAspectRatio設置為none

優勢與使用方式

從示例01可以看到,將svg直接作為普通html元素插入文檔中,其本質和渲染出一個div、span等元素無異,天生具有渲染快、不會造成額外的http請求等優勢,除此之外還有以下優勢之處:

樣式控制更加方便; inline svg頂層的元素會設置以下幾個屬性:

height=“1em” width=“1em” 可以方便地通過設置父元素的font-size屬性控制尺寸

fill=“currentColor” 可以方便地根據父元素或自身的color屬性控制顏色

但是我們也可以為其內部的子元素單獨設置樣式 參考

註意事項

如需對svg中各部分分別應用樣式,則在設計svg時最好不要將各部分都編於一組,可以將應用相同樣式的部分進行分別編組,其他不需要設置樣式的部分編為一組,這樣我們在應用樣式時,只需為對應的標簽設置class屬性即可。

一般在拿到svg文件後,推薦使用svgo優化svg代碼,節省體積,但是如果我們需要針對性設置樣式時則需要謹慎使用,因為優化代碼會進行路徑合併等操作,可能我們想要設置的子元素已經不是獨立的了。

inline svg的復用及組件化

同一個inline svg必須能夠進行復用,將需要復用inline svg封裝成組件

// 使用inline svg組件
import AnySvgIcon from './inline-svg-component'
<AnySvgIcon width="16px" height="16px" />

本文轉載於:

https://juejin.cn/post/7243680440690638904

如果對您有所幫助,歡迎您點個關註,我會定時更新技術文檔,大家一起討論學習,一起進步。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這種只含map的操作,如果文件大小控制在合適的情況下,都將只有本地操作,其執行非常高效,運行效率完全不輸於在計算引擎Tez和Spark上運行。 ...
  • 摘要:併發的事務在運行過程中會出現一些可能引發一致性問題的現象,本篇將詳細分析一下。 本文分享自華為雲社區《MySQL讀取的記錄和我想象的不一致——事物隔離級別和MVCC》,作者:磚業洋__。 事務的特性簡介 1.1 原子性(Atomicity) 要麼全做,要麼全不做,一系列操作都是不可分割的,如果 ...
  • 之前寫過一篇文章“SQL Server如何找出視圖依賴的對象和視圖嵌套層數”,這裡我介紹一下Oracle資料庫中如何找出視圖的依賴對象以及視圖嵌套層數關係。主要通過DBA_DEPENDENCIES這個系統視圖(這個系統視圖中包含有對象的依賴關係數據)。另外,我們使用了Oracle的樹形查詢(層級查詢 ...
  • > ViewModel做為架構組件的三元老之一,是實現MVVM的有力武器。 ### ViewModel的設計目標 ViewModel的基本功能就是管理UI的數據。其實,從職責上來說,這又是對Activity和Fragment的一次功能拆分。以前存儲在它們內部的數據,需要它們自己處理創建,更新,存儲, ...
  • 隨著業務的發展及版本迭代,客戶端工程中不斷增加新的業務邏輯、引入新的資源,隨之而來的問題就是安裝包體積變大,前期各個業務模塊通過無用資源刪減、大圖壓縮或轉上雲、AB實驗業務邏輯下線或其他手段在降低包體積上取得了一定的成果。 ...
  • 本期直播《“元”來如此,“服務”直達——揭秘鴻蒙新流量陣地》聚焦**元服務**的**商業流量價值**,介紹元服務提供的服務直達和卡片動態變化等**輕量化服務**。網約停車旗艦平臺小強停車做客直播間,分享小強停車在HarmonyOS生態中,如何通過元服務為廣大用戶帶來更加便捷易用的線上預約停車體驗。快 ...
  • ## 顏色 1. **RGB** (紅,綠,藍)三種顏色的集合,最低值是0(十六進位00)到最高值255(十六進位FF) 2. **HSL** H色相(0-360),S飽和度(百分比),L亮度(百分比) 3. (不)透明度 **rgba、hsla** (新版瀏覽器可不寫a,直接寫4個值) ## li ...
  • ### 前言 前不久,在我的一個項目中,需要展示一個橫向滾動的標簽頁,它支持滑鼠橫向拖動和點擊切換。在實現的過程中,我發現這個小功能需要同時用到前端的三輛馬車,但是實現難度不高,而且最終效果還不錯,是個難得的初學者項目,於是萌生了寫這篇文章的想法,希望對初學者有所幫助。同時為了避免初學者學習框架,我 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...