ootstrap 開源了首套 SVG 圖標庫 Bootstrap Icons,其團隊表示這是有史以來第一次擁有自己的圖標庫,此圖標庫起初專門針對其從表單控件到導航等組件和文檔進行定制設計和構建,現在可以免費用于任何項目,無論此項目是否使用了 Bootstrap。
查看 Bootstrap Icons ?https://icons.getbootstrap.com/
既然 Bootstrap Icons 是 SVG 圖標庫,因此它們可以快速、輕松地擴展,并且可以配合 CSS 的使用進行個性化定制。雖然它們是為 Bootstrap 設計的,但可以在任何項目中使用。不過要注意的是,它們現在尚處于 alpha 階段,未來可能會出現重大變化。
Bootstrap Icons 官網提供了檢索圖標種類的搜索框,用戶可根據需求使用關鍵字(英文)進行查找。
根據自己的設置,可以通過多種方式將 Bootstrap Icons 添加到項目:
<svg class="bi bi-chevron-right" width="32" height="32" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M6.646 3.646a.5.5 0 01.708 0l6 6a.5.5 0 010 .708l-6 6a.5.5 0 01-.708-.708L12.293 10 6.646 4.354a.5.5 0 010-.708z"/></svg>
<img src="/assets/img/bootstrap.svg" alt="" width="32" height="32" title="Bootstrap">
<svg class="bi" width="32" height="32" fill="currentColor">
<use xlink:href="bootstrap-icons.svg#heart-fill"/>
</svg>
<svg class="bi" width="32" height="32" fill="currentColor">
<use xlink:href="bootstrap-icons.svg#toggles"/>
</svg>
<svg class="bi" width="32" height="32" fill="currentColor">
<use xlink:href="bootstrap-icons.svg#shop"/>
</svg>
Boss很少分享關于制作動畫或者圖標的工具,那么今天推薦一款在線生成動畫以及圖標的工具,從而簡化設計過程中重復的事項,從提升設計工作流程,讓設計變得輕松愉悅。
它幫你簡化了 SVG 動畫的制作過程,它是基于 Animista.net 的動畫來開發的。它的動畫使用的是純粹的 CSS 轉 SVG 圖像技術,能夠快速生成動畫,它支持 path, line, polyline, rect, circle, ellipse 和 polygon 元素。
關注Boss設計 回復SVG Artista 獲取地址
我是Boss設計,喜歡收集設計神器以及設計資源~
使用圖片和 CSS 精靈制作 web 圖標的日子一去不復返了。隨著 web 字體的爆發,圖標字體已經成為在你的 web 項目中顯示圖標的第一解決方案。
字體是矢量,所以你無須擔心分辨率的問題。他們和文本一樣因為擁有 CSS 屬性,那就意味著,你完全可以應用 size
、 color
和 style
。你可以添加轉換、特效和裝飾,比如旋轉、下劃線或者陰影。
怪不得類似 Font Awesome 這類項目僅僅在 npm 至今已經被下載了超過 1500 萬次。
可是圖標字體并不完美, 這就是為什么越來越多的人使用行內 SVG 。CSS Tricks 寫了圖標字體劣于原生 SVG 元素的地方:銳利度、定位或者是因為跨域加載、特定瀏覽器錯誤和廣告屏蔽器等原因導致的失敗。現在你可以規避絕大多數這些問題了,總體上使用圖標字體是一個安全的選擇。
然而,還是有一件事情對于圖標字體來說是絕對不可能的:多色支持。只有 SVG 可以做到。
摘要 :這篇博文深入闡述怎么做和為什么。如果你想理解整個思維過程,推薦閱讀。否則你可以直接在 CodePen 看最終代碼。
設置 SVG 標志圖標
行內 SVG 的問題是,它會非常冗長。你肯定不想每次使用同一個圖標的時候,還需要復制/粘貼所有坐標。這將會非常重復,很難閱讀,更難維護。
通過 SVG 符號圖標,你只需擁有一個 SVG 元素,然后在每個需要的地方引用就好了。
先添加行內 SVG ,隱藏它之后,再用 <symbol>
包裹它,用 id
對其進行識別。
<svg xmlns="http://www.w3.org/2000/svg" style="display: none"> <symbol id="my-first-icon" viewBox="0 0 20 20"> <title>my-first-icon</title> <path d="..." /> </symbol> </svg>
整個 SVG 標記被一次性包裹并且在 HTML 中被隱藏。
然后,所有你要做的是用一個 <use>
標簽將圖標實例化。
<svg> <use xlink:href="#my-first-icon" /> </svg>
這將會顯示一個初始 SVG 圖標的副本。
**就是這樣了!**看起來很棒,是吧?
你可能注意到了這個有趣的 xlink:href
屬性:這是你的實例與初始 SVG 之間的鏈接。
需要提到的是 xlink:href
是一個棄用的 SVG 屬性。盡管大多數瀏覽器仍然支持,你應該用 **href**
替代。現在的問題是,一些瀏覽器比如 Safari 不支持使用 href
進行 SVG 資源引用,因此你仍然需要提供 xlink:href
選項。
安全起見,兩個都用吧。
添加一些顏色
不像是字體, color
對于 SVG 圖標沒有任何作用:你必須使用 fill
屬性來定義一個顏色。這意味著他們將不會像圖標字體一樣繼承父文本顏色,但是你仍然可以在 CSS 中定義它們的樣式。
// HTML <svg class="icon"> <use xlink:href="#my-first-icon" /> </svg> // CSS .icon { width: 100px; height: 100px; fill: red; }
在這里,你可以使用不同的填充顏色創建同一個圖標的不同實例。
// HTML <svg class="icon icon-red"> <use xlink:href="#my-first-icon" /> </svg> <svg class="icon icon-blue"> <use xlink:href="#my-first-icon" /> </svg> // CSS .icon { width: 100px; height: 100px; } .icon-red { fill: red; } .icon-blue { fill: blue; }
這樣就可以生效了,但是不完全符合我們的預期。目前為止,我們所有做的事情可以使用一個普通的圖標字體來實現。我們想要的是在圖標的位置可以有不同的顏色。我們想要向每個路徑上填充不同顏色,而不需要改變其他實例,我們想要能夠在必要的時候重寫它。
首先,你可能會受到依賴于特性的誘惑。
// HTML <svg xmlns="http://www.w3.org/2000/svg" style="display: none"> <symbol id="my-first-icon" viewBox="0 0 20 20"> <title>my-first-icon</title> <path class="path1" d="..." /> <path class="path2" d="..." /> <path class="path3" d="..." /> </symbol> </svg> <svg class="icon icon-colors"> <use xlink:href="#my-first-icon" /> </svg> // CSS .icon-colors .path1 { fill: red; } .icon-colors .path2 { fill: green; } .icon-colors .path3 { fill: blue; }
不起作用。
我們嘗試設置 .path1
、 .path2
和 .path3
的樣式,仿佛他們被嵌套在 .icon-colors
里,但是嚴格來說,并非如此。 <use>
標簽不是一個會被你的 SVG 定義替代的占位符。這是一個引用將它所指向內容復制為 shadow DOM 。
**那接下來我們該怎么辦?**當子項不在 DOM 中時,我們如何才能用一個區域性的方式影響子項?
CSS 變量拯救世界
在 CSS 中,一些屬性從父元素繼承給子元素。如果你將一個文本顏色分配給 body
,這一頁中所有文本將會繼承那個顏色直到被重寫。父元素沒有意識到子元素,但是可繼承的樣式仍然繼續傳播。
在我們之前的例子里,我們繼承了填充屬性。回頭看,你會看到我們聲明填充顏色的類被附加在了實例上,而不是定義上。這就是我們能夠為同一定義的每個不同實體賦予不同顏色的原因。
現在有個問題:我們想傳遞不同顏色給原始 SVG 的不同路徑,但是只能從一個 fill
屬性里繼承。
這就需要 CSS 變量了。
就像任何其它屬性一樣, CSS 變量在規則集里被聲明。你可以用任意命名,分配任何有效的 CSS 值。然后,你為它自己或者其它子屬性,像一個值一樣聲明它,并且這將被繼承。
.parent { --custom-property: red; color: var(--custom-property); }
所有 .parent
的子項都有紅色文本。
.parent { --custom-property: red; } .child { color: var(--custom-property); }
所有嵌套在 .parent
標簽里的 .child
都有紅色文本。
現在,讓我們把這個概念應用到 SVG 符號里去。我們將在 SVG 定義的每個部分使用 fill
屬性,并且設置成不同的 CSS 變量。然后,我們將給它們分配不同的顏色。
// HTML <svg xmlns="http://www.w3.org/2000/svg" style="display: none"> <symbol id="my-first-icon" viewBox="0 0 20 20"> <title>my-first-icon</title> <path fill="var(--color-1)" d="..." /> <path fill="var(--color-2)" d="..." /> <path fill="var(--color-3)" d="..." /> </symbol> </svg> <svg class="icon icon-colors"> <use xlink:href="#my-first-icon" /> </svg> // CSS .icon-colors { --color-1: #c13127; --color-2: #ef5b49; --color-3: #cacaea; }
然后… 生效了 !
現在開始,為了用不同的顏色方案創建實例,我們所需要做的是創建一個新類。
// HTML <svg class="icon icon-colors-alt"> <use xlink:href="#my-first-icon" /> </svg> // CSS .icon-colors-alt { --color-1: brown; --color-2: yellow; --color-3: pink; }
如果你仍然想有單色圖標,你不必在每個 CSS 變量中重復同樣的顏色。相反,你可以聲明一個單一 fill
規則:因為如果 CSS 變量沒有被定義,它將會回到你的 fill
聲明。
.icon-monochrome { fill: grey; }
你的 fill
聲明將會生效,因為初始 SVG 的 fill
屬性被未設置的 CSS 變量值定義。
怎樣命名我的 CSS 變量?
當提到在 CSS 中命名,通常有兩條途徑:描述的或者語義的。描述的意思是告訴一個顏色是什么:如果你存儲了 #ff0000
你可以叫它 --red
。語義的意思是告訴顏色它將會被如何應用:如果你使用 #ff0000
來給一個咖啡杯把手賦予顏色,你可以叫它 --cup-handle-color
。
描述的命名也許是你的本能。看起來更干脆,因為#ff0000
除了咖啡杯把手還有更多地方可以被使用。一個 --red
CSS 變量可被復用于其他需要變成紅色的圖標路徑。畢竟,這是實用主義在 CSS 中的工作方式。并且是一個良好的系統。
問題是,在我們的案例里,我們不能把零散的類應用于我們想設置樣式的標簽。實用主義原則不能應用,因為我們對于每個圖標有單獨的引用,我們不得不通過類的變化來設置樣式。
使用語義類命名,例如 --cup-handle-color
,對于這個情況更有用。當你想改變圖標一部分的顏色時,你立即知道這是什么以及需要重寫什么。無論你分配什么顏色,類命名將會一直關聯。
默認還是不要默認,這是個問題
將你的圖標的多色版本設置成默認狀態是很有誘惑力的選擇。這樣,你無需設置額外樣式,只需要在必要的時候可以添加你自己的類。
有兩個方法可以實現::root 和 var() default 。
:root
在 :root
選擇器中你可以定義所有你的 CSS 變量。這將會把它們統一放在一個位置,允許你『分享』相似的顏色。 :root
擁有最低的優先度,因此可以很容易地被重寫。
:root { --color-1: red; --color-2: green; --color-3: blue; --color-4: var(--color-1); } .icon-colors-alt { --color-1: brown; --color-2: yellow; --color-3: pink; --color-4: orange; }
然而,這個方法有一個主要缺點。首先,將顏色定義與各自的圖標分離可能會有些讓人疑惑。當你決定重寫他們,你必須在類與 :root
選擇器之間來回操作。但是更重要的是,它不允許你去關聯你的 CSS 變量,因此讓你不能復用同一個名字。
大多數時候,當一個圖標只用一種顏色,我用 --fill-color
名稱。簡單,易懂,對于所有僅需要一種顏色的圖標非常有意義。如果我必須在 :root
聲明中聲明所有變量,我就不會有幾個 --fill-color
。我將會被迫定義 --fill-color-1
, --fill-color-2
或者使用類似 --star-fill-color
, --cup-fill-color
的命名空間。
var() 默認
你可以用 var()
功能來把一個 CSS 變量分配給一個屬性,并且它的第二個參數可以設置為某個默認值。
<svg xmlns="http://www.w3.org/2000/svg" style="display: none"> <symbol id="my-first-icon" viewBox="0 0 20 20"> <title>my-first-icon</title> <path fill="var(--color-1, red)" d="..." /> <path fill="var(--color-2, blue)" d="..." /> <path fill="var(--color-3, green)" d="..." /> </symbol> </svg>
在你定義完成 --color-1
, --color-2
和 --color-3
之前,圖標將會使用你為每個 <path>
設置的默認值。這解決了當我們使用 :root
時的全局關聯問題,但是請小心:你現在有一個默認值,并且它將會生效。結果是,你再也不能使用單一的 fill
聲明來定義單色圖標了。你將不得不一個接一個地給每個使用于這個圖標的 CSS 變量分配顏色。
設置默認值會很有用,但是這是一個折中方案。我建議你不要形成習慣,只在對給定項目有幫助的時候做這件事情。
How browser-friendly is all that?
CSS 變量與大多數現代瀏覽器兼容,但是就像你想的那樣, Internet Explorer 完全不兼容。因為微軟要支持 Edge 終止了 IE11 開發, IE 以后也沒有機會趕上時代了。
現在,僅僅是因為一個功能不被某個瀏覽器(而你必須適配)兼容,這不意味著你必須全盤放棄它。在這種情況下,考慮下優雅降級:給現代瀏覽器提供多彩圖標,給落后瀏覽器提供備份的填充顏色。
你想要做的是設置一個僅在 CSS 變量不被支持時觸發的聲明。這可以通過設置備份顏色的 fill
屬性實現:如果 CSS 變量不被支持,它甚至不會被納入考慮。如果它們不能被支持,你的 fill
聲明將會生效。
如果你使用 Sass 的話,這個可以被抽象為一個 @mixin
。
@mixin icon-colors($fallback: black) { fill: $fallback; @content; }
現在,你可以任意定義顏色方案而無需考慮瀏覽器兼容問題了。
.cup { @include icon-colors() { --cup-color: red; --smoke-color: grey; }; } .cup-alt { @include icon-colors(green) { --cup-color: green; --smoke-color: grey; }; }
在 mixin 中通過 @content
傳遞 CSS 變量也是一個可選項。如果你在外面做這件事,被編譯的 CSS 將會變得一樣。但是它有助于被打包在一起:你可以在你編輯器中折疊片段然后用眼睛分辨在一起的聲明。
在不同的瀏覽器中查看這個 pen 。在最新版本的 Firefox , Chrome 和 Safari 中,最后兩只杯子各自擁有紅色杯身灰色煙氣和藍色杯身灰色煙氣。在 IE 和 版本號小于 15 的 Edge 中,第三個杯子的杯身與煙氣全部都是紅色,第四個則全部是藍色! ?
*請認真填寫需求信息,我們會在24小時內與您取得聯系。