純CSS3實現一些複雜的圖標,教你不僅會用而且會寫

前言

在進行前端開發時,圖標庫的使用是一項必須掌握的技巧,目前流行的圖標庫有fontawesome,iconfont等,只需要引入到項目中,然後使用對應的class,就會得到對應的圖標。

但是你們有沒有想過,如果是自己的話該怎麼去實現這些圖標呢?今天我們就來看看一些稍微複雜的圖標是如何使用純CSS3實現吧。

文中的代碼已經放到github上了,感興趣的同學自取。

https://github.com/zhouxiongking/article-pages/blob/master/articles/border/complexFigure.html

純CSS3實現一些複雜的圖標,教你不僅會用而且會寫

CSS3

圖標庫

我們可以先來看看稍微複雜的圖標的樣子。

純CSS3實現一些複雜的圖標,教你不僅會用而且會寫

圖標庫

從圖標中可以看出,都是平時很常用的正確,錯誤,方向鍵,放大,縮小,開鎖,解鎖等。

我們從中抽取幾個,慢慢分析它們是如何實現的吧。

水杯

水杯的圖標如下所示。

純CSS3實現一些複雜的圖標,教你不僅會用而且會寫

水杯圖標

我們對水杯圖標進行拆分,分為杯身和杯柄兩個部分。

  • 杯身中的白色長方形就是一個div,設置寬度和高度。

  • 杯身的四周為黑色都是通過border實現,border-bottom比其他三個放向都要大。

  • 杯身的下方是圓角,通過border-radius設置,border-radius的右下和左下方向設置相同的值。

通過上述的分析,我們可以得到杯身部分的CSS代碼。

純CSS3實現一些複雜的圖標,教你不僅會用而且會寫

杯身CSS代碼

杯柄通過偽元素:before實現。

  • 杯柄設置為絕對定位,修改right值讓中間出現一個空白。

  • 調整杯柄位置的寬度,只需要和杯身重疊即可。

  • 杯柄右上角和右下角的border-radius設置為特定的值,展現成圓角的樣子。

通過以上的分析,我們可以得到杯柄部分的CSS代碼。

純CSS3實現一些複雜的圖標,教你不僅會用而且會寫

杯柄CSS代碼

心形

首先我們來看看心形圖案的樣子。

純CSS3實現一些複雜的圖標,教你不僅會用而且會寫

心形圖案

接下來我們同樣將整個圖案拆分來看,分成左右兩個部分,我們將上述圖案換成兩種不同顏色就一目瞭然了。

純CSS3實現一些複雜的圖標,教你不僅會用而且會寫

拆分圖案

從圖案中可以看出,它實際是由兩個相同的圖行旋轉不同的角度構成,相同的元素部分,可以通過設置border-radius值來實現。

我們將左右兩個半邊的形狀分別通過:before和:after來實現,原始的的div形狀的CSS屬性則很簡單,只需要設置相對位置和寬度為0即可。

純CSS3實現一些複雜的圖標,教你不僅會用而且會寫

基本CSS屬性

然後看看:before和:after共有的屬性,主要是保證為元素部分的定位為絕對定位,然後設置border-radius的值, 保證上半部分是圓角。

純CSS3實現一些複雜的圖標,教你不僅會用而且會寫

共有CSS屬性

然後是關鍵的兩半邊各自的CSS屬性。左側的圖形距左邊應該為0,所以left: 0,右側的圖形距右側為0,所以right: 0。

純CSS3實現一些複雜的圖標,教你不僅會用而且會寫

各有的CSS屬性

同時左右兩側圖案需要進行旋轉,這裡我們選擇旋轉48度,這是為什麼呢?

很多人一下子可能會想到旋轉45度,我們來看看旋轉45度時的樣子。

純CSS3實現一些複雜的圖標,教你不僅會用而且會寫

旋轉45度

從圖形中可以看出,兩側有稜角,整個圖案就顯得不標準,當旋轉超過45度時,稜角的部分就會被裡面的圖案遮住。

所以這裡我們選擇旋轉48度,達到最終的效果。

純CSS3實現一些複雜的圖標,教你不僅會用而且會寫

最終效果圖

結束語

今天這篇文章我們使用純CSS3的屬性畫出了一個杯子和心形兩個稍微複雜點的圖案,其實其它圖案也是類似的,只要我們能將其拆分,每個部分獨立實現,再組合就可以達到圖標庫的效果了。


大家也可以自己動手實現一下噢~


分享到:


相關文章: