手把手教你打造一個純CSS圖標庫

2020-12-21 TechWeb

推廣 | 令人窒息的獎品等你―2016最權威的全球開發者調研

來,幹了這碗安利

寫這篇文章的目的其實就是為了安利一下我的圖標庫:iconoo,所以,開門見山,star吧少年少婦們!(這樣的我是不是應該要加個github互粉的團夥了?)

主題說完了,下面進入正題。

在web開發中,我們經常要用到一些小圖標(加減勾叉等)。通常做法就兩種:

直接使用圖片; 使用css/svg直接在瀏覽器中繪製圖標。

方案1:由於圖標圖片比較多,而且體積很小,為了減少請求所以很多時候我們會用雪碧圖這種技術來將圖標拼湊在同一張圖片裡面。你也能想到,一堆圖標的雪碧圖,修改維護會相當麻煩!現在比較好的方案是使用webpack引入圖片,小圖直接轉換成base64插入css中。直接使用圖片比較簡單,這也是目前比較主流的做法。

方案2: 相比方案1,明顯可以減小資源的體積,只需要幾條css/svg命令就可以繪製出精美的圖標,而且不受圖片尺寸限制,可大可小非常靈活。初看方案2的一堆代碼可能會覺得非常難,但其實很多簡單的圖標都是非常容易實現的。

接下來就是妹子們最期待的茄果叔叔手把手教學時間啦。

手抓手教學時間

使用CSS繪製線條,用到的不外乎兩個屬性:border & box-shadow。而形狀則可以用border-radius、transform控制變形,位置則會用到絕對定位、transform、margin等屬性來調整。CSS的繪圖,做過幾個就知道大概是怎麼回事了,歸根到底,還是幾何。如果覺得幾何燒腦,那就直接用 iconoo 吧~~~

基本原理說了,下面來擼一發,先看看最簡單的加號:

.plus {     box-sizing : border-box;     display    : inline-block;     position   : relative;     font-size  : 20px; }  .plus:before, .plus:after {     content        : '';     pointer-events : none;     position       : absolute;     left           : 50%;     top            : 50%;     transform      : translate(-50%, -50%);     box-shadow     : inset 0 0 0 1em; }  .plus:before {     width  : 1em;     height : 2px; }  .plus:after {     height : 1em;     width  : 2px; }  

代碼還是非常簡單的,首先我們這裡用到了before和after兩個偽類增加可用的標籤,不然只有一個標籤,要玩出花來實在是太難。content顧名思義就是內容,裡面可以加各種字符,甚至是換行之類的控制符。而pointer-events:none則是消除了滑鼠指針事件,這樣元素就具有穿透性了,具體細節還請自行搜索哈,這裡就不多說了。繪圖的核心,就是通過設置兩個偽類的寬高和陰影來繪製橫豎兩條線,位置方面是通過絕對定位+反向偏移的方式,巧妙利用了這兩個屬性百分比參照的不同實現了橫豎的居中。所有尺寸除了線寬(2px)外都使用em這個相對單位,所以調整font-size的值就可以調整圖標的大小了。要調整線寬呢,就將所有px單位的尺寸都一併改了即可。

進階玩法

首先來看看這個圖片圖標:

這個圖形網上說的應該還是比較多的了,然而我第一眼看到的時候還是懵逼了。。。分析一下,最外層的邊框明顯可以用border來做,然後用個before來做圓點也非常簡單,關鍵是兩座大山要如何繪製呢?box-shadow貌似可以做多層邊框呢,然後加個旋轉是不是就出來了呢?最後隱藏邊框之外的部分就可以了。繪製流程如下:

.icon-img {     display: inline-block;     position: relative;     box-sizing: border-box;     width: 90px;     height: 80px;     border: 5px solid;     border-radius: 10px;     color: #2ba5bb;     overflow: hidden; }  .icon-img:before,.icon-img:after {     content: '';     pointer-events: none;     position: absolute; }  .icon-img:before {     width: 10px;     height: 10px;     top: 18px;     right: 20px;     box-shadow: inset 0 0 0 1em;     border-radius: 50%; }  .icon-img:after {     width: 60px;     height: 50px;     left: 0;     bottom: -27px;     box-shadow: inset 0 0 0 50px,30px -20px 0 0;     transform: rotate(45deg); }  

代碼是臨時拼的,就沒做成em單位了。呃,為什麼要做成em單位呢?

我們在使用圖標的時候,可能尺寸每次都不一樣,但圖標的尺寸都是有關聯的,調整起來相當費勁。當然你可以會想到用zoom、scale來做縮放,但是這樣的縮放線寬也會隨之變化了。設置em的話,在icon級設置font-size,然後icon本身以及後代都以這個font-size為參照,只調整font-size就完成了圖標的等比縮放了。

再來看一個帶變形的:

這個一看其實就能猜到是怎麼畫的,幾何關係貌似也比較簡單,但是要映射到css的規則裡面卻非常複雜。先看看流程:

.icon-codepen {     display: inline-block;     position: relative;     box-sizing: border-box;     color: #2ba5bb;     width: 2px;     height: 10px;     box-shadow: inset 0 0 0 32px,0 15px,-11px 7px,11px 7px; }  .icon-codepen:before, .icon-codepen:after {     content: '';     pointer-events: none;     position: absolute;     width: 11px;     height: 4px; }  .icon-codepen:before {     right: 2px;     top: 3px;     transform: skew(0,-35deg) scaleY(0.6);     box-shadow: inset 0 0 0 32px,0 13px,11px 26px,12px 39px; }  .icon-codepen:after {     left: 2px;     top: 3px;     transform: skew(0,35deg) scaleY(0.6);     box-shadow: inset 0 0 0 32px,0 13px,-11px 26px,-12px 39px; }  

難點就在長寬的變形上,對於變形比較簡單的方法是使用變換矩陣來求解。圖形學學的不好的話,那就比較痛苦了,如果不追求單標籤的話,可以將每條邊用一個標籤表示,這樣就很好處理了。

叔叔,我想裝逼

怎麼樣?覺得上面這些都是小玩意?想裝逼了?好,叔叔教你!

蒙娜麗莎?什麼鬼?我會告訴你這也可以用一個單標籤純CSS畫出來的嗎?

http://codepen.io/jaysalvat/p...點擊預覽 ,自己看去,幾千條box-shadow構成的蒙娜麗莎,看的我內分泌都失調了。。。

靜態的還不夠,那來點動態的:

http://codepen.io/fbrz/pen/iqtlk點擊預覽 ,不多說,拿去不謝!

更多CSS玩意兒,請到codepen上去探寶吧!如果codepen都打不開,可以到我博客園去下載相應的css文件吧!什麼,沒有提供下載連結?F12大法搞起!

首尾呼應

語文老師說了,文章要首尾呼應升華主題,so one more time:寫這篇文章的目的其實就是為了安利一下我的圖標庫:iconoo,所以,開門見山,star吧少年少婦們!

點讚 0

相關焦點

  • Ionic使用Iconfont-阿里巴巴矢量圖標庫
    Ionic有個自己的圖標庫,但是有些需要的圖標還是沒有,下面介紹一下阿里巴巴的矢量圖標庫,在Ionic中如何使用由於度娘限制,自己百度下載地址吧~輸入「阿里巴巴矢量圖標庫」百度搜索第一位就是啦打開網址,你可以選擇右上角的搜索,搜索自己要的圖標,例如美女
  • Bootstrap Icons - bootstrap 專用的漂亮開源圖標庫,可以免費商用
    專門為著名的前端開發 UI 框架 Bootstrap 的組件和文檔定製開發的圖標庫。介紹Bootstrap 圖標庫 的設計初衷是與 Bootstrap 組件配合使用,從表單到導航組件等。Bootstrap 圖標庫 全部是 SVG 文件格式,能夠輕鬆快捷地進行縮放,保證清晰,並可以通過 CSS 設置顏色。雖然 Bootstrap 圖標庫 是為 Bootstrap 而開發的,但也可以應用在任何項目。
  • 又一款開源的web圖標庫,優雅精緻可商用
    font-awesome算是用的最多的圖標庫吧。哈哈哈哈哈!現在又有新選擇了。而且這個庫的質量很高,簡潔優雅,圓潤的線條風格。項目是本月初上線的,上線後就迅速登上了github的趨勢榜,目前已經推出了300多個圖標了。項目基於MIT授權,這意味著可以免費商用了。
  • 剪映素材庫在哪裡 手把手教你剪映素材庫怎麼用
    剪映素材庫在哪裡 手把手教你剪映素材庫怎麼用時間:2020-07-01 17:09   來源:騰牛網    責任編輯:沫朵 川北在線核心提示:原標題:剪映素材庫在哪裡 手把手教你剪映素材庫怎麼用 剪映是非常好用的剪輯工具,現在很多人都愛用,裡面有很多功能,可以製作出很好的視頻。
  • Iconfont - 設計師/前端開發者必備的圖標管理工具
    阿里巴巴旗下阿里媽媽MUX團隊打造的圖標管理平臺。介紹這是一個專門為設計師和前端開發者打造的在線工具。大量優質的原創圖標庫特點矢量圖標在線存儲管理。設計師繪製的大量圖標都可以上傳,解決了管理和查找圖標非常困難的痛點;按項目管理圖標,支持自定義尺寸和顏色,無論是前端工程師還是UI設計師,再也不用苦逼地切圖搬磚了,需要什麼尺寸,可以在平臺上自行下載;對於開發者來說,可以把需要的矢量圖標以項目的方式管理,一建生成再web上通過css字體控制的矢量圖標,支持在web/h5/小程序/App上調用,使用簡單便捷
  • 咔拉商城之前端使用iocnfont字體圖標
    iconfont字體圖標就是用字體來代替圖標、圖片文件的做法,並且通過字體圖標可以對圖標的大小、顏色等進行控制,但是缺點就是只能實現一種顏色,不能像圖片那樣含有各種顏色。在咔拉商城的評論頁面上有一些圖標,本來是用圖片來做的,但滑鼠放上去沒有效果,給人的體驗不好,所以就去阿里巴巴矢量圖標庫找了一樣的字體圖標來做,可以對字體圖標進行顏色,大小的修改。咔拉商城評論為了給用戶更好的體驗,有下劃線、字體居中,還有表情等選擇。
  • Vue Element使用阿里雲icon圖標
    不過美中不足的是自帶的圖標集合不夠用,圖標太少了。今天剛好碰到這個問題,現在來分享一下如何在Vue Element中使用阿里雲矢量圖標庫。element 自帶圖標庫一,註冊阿里雲圖標庫Iconfont,過程自行百度。
  • 網站前端ICONFONT圖標助力網站設計之WordPress應用
    簡單說,就是我們平時用的字體,不再是我們傳統認知上的「文字」,而是一個個的圖標今天我們以Wordpress博客為例進行解釋,如何在自己製作的網站裡面快速有效的去應用ICONFONT圖標,以增強網站的可閱讀性及美觀欣賞性;主體默認自帶圖標的便捷添加有很多朋友使用與本站完全一樣的主題
  • 除了阿里巴巴圖標庫你還知道哪些?
    請點擊輸Material Design IconsMaterial Design圖標是一個站點,開發人員和設計人員可針對需求下載大小不一CSS Icons一個可免費下載的圖標庫,您可以輕鬆地將它們用於開發項目。CoreUl Icons一組免費的高級設計圖標,含有Webfont, Raster和SVG多種格式。
  • 三百多萬海量免費圖標素材庫-Flaticon
    Boss有話說Flaticon 一個提供三百多萬海量免費圖標素材庫,提供 PNG、SVG、EPS、PSD 和 BASE 64 矢量圖標格式,完全可以滿足你 UI 設計和網頁設計項目,還記得之前 Boss設計 分享過一個[ freepik|國際設計師必備素材圖庫
  • (乾貨分享)免費可商用的圖標庫
    自製圖標雖然更細緻與整體畫面會更搭一點但是平時忙起來自製圖標就會有些麻煩了這些圖標庫精美還免費可以幫你快速提升工作效率哦~ANIMATICONSAnimaticons是一組可以自定義的高解析度動畫GIF圖標。
  • 高質量免費圖標庫IconPark
    設計達人嚴選好文,好素材,學設計,少走彎路字節跳動出品:IconPark圖標庫,可以實現根據單一SVG源文件變換出多種主題, 具備豐富的分類、更輕量的代碼和更靈活的使用場景;致力於構建高質量、統一化、可定義的圖標資源,讓大多數人都能夠選擇適合自己的風格圖標。
  • WordPress主題使用Iconfont字體圖標的兩種方法教程
    Iconfont字體圖標在設計中被廣泛應用,在網站中也是必不可少的, 它能應用於網站的各處,例如菜單導航、標題等等,不論是對設計人員,還是對站長來說實用性都是非常大的。Iconfont是 阿里媽媽MUX傾力打造的矢量圖標管理、交流平臺。
  • iconmonstr - 提供超過4000個精緻圖標免費商用的圖標庫網站
    一個超多簡約線條風格的免費圖標素材網站,非常值得收藏。介紹今天推薦的 iconmonstr 是一個以簡單線條為主的的免費圖標庫,截止發稿,收錄了超過4496個圖標!相比於很多簡約簡單的圖標,iconmonstr 的圖標表現力非常豐富,非常適合用在PPT、企業官網設計下的大圖標塊以及 UI 界面上的大圖標模塊,非常地好看。
  • 《迷你世界》旋轉的小風車攻略 手把手教你打造屬於自己的旋轉小風車
    《迷你世界》旋轉的小風車攻略 手把手教你打造屬於自己的旋轉小風車時間:2020-02-02 13:56   來源:牛遊戲網   責任編輯:沫朵 川北在線核心提示:原標題:《迷你世界》旋轉的小風車攻略 手把手教你打造屬於自己的旋轉小風車 《迷你世界》是一款高度自由的休閒類3D沙盒遊戲,有著非常方便快捷的多人聯機模式
  • 我的世界聖誕雪人圖文教程 手把手教你打造屬於自己的聖誕雪人
    我的世界聖誕雪人圖文教程 手把手教你打造屬於自己的聖誕雪人時間:2019-12-18 16:22   來源:小皮手遊網   責任編輯:沫朵 川北在線核心提示:原標題:我的世界聖誕雪人圖文教程 手把手教你打造屬於自己的聖誕雪人 聖誕節還有7天就到了,那麼為了迎接聖誕節的到來,想在你的庭院中建造一個可愛的小雪人該怎麼做呢
  • 手把手教你DIY魔獸世界圖標(傻瓜版)
    【17173專稿,未經授權謝絕轉載】 你是個電腦盲?你對各類圖象處理軟體一竅不通?沒有關係,只要你認真閱讀這個教程,任何人都可以輕鬆DIY自己的《魔獸世界》圖標。 接下來我們一起來看這是如何做到的,主要分為2步: 1:生成32*32的.tga文件 2:利用製作好的.tga文件DIY自己的《魔獸世界》圖標 註:如果你能夠自己使用photoshop
  • 尋找「圖標」,去點亮你的PPT頁面吧
    但是長時間不更新,數量較少Office經過十餘年的發展,其實已經升級了諸多功能,在最新版本的Office中,已經內置圖標庫,質量也可堪使用。而且,它已經自動分好了類,可以直接按類別查找。二、iSlide 圖標庫(插件)islide圖標數量較多,更新速度快,但是圖標風格較雜亂,無法快速找到統一風格的圖標。且因為是插件,使用體驗上跟Office自帶是沒有區別的。
  • 朋友手機發送的位置,怎麼分享到車載大屏導航,老司機手把手教你
    朋友手機發送的位置,怎麼分享到車載大屏導航,老司機手把手教你視頻地址:評論:0朋友手機發送的位置,怎麼分享到車載大屏導航,老司機手把手教你1/ 6朋友手機發送的位置,怎麼分享到車載大屏導航,老司機手把手教你猜你喜歡朋友手機發送的位置,怎麼分享到車載大屏導航,老司機手把手教你
  • vue的for循環中如何在dom中遍歷iconfont圖標
    最近博主在搗鼓一個vue的小項目,想把iconfont的圖標通過v-for遍歷顯示,結果界面顯示效果如下:在這裡我這個小白博主總結了兩套解決方案:首先,大家可以看一下自己項目中的iconfont.css這個文件: