在前端效能優化中,資源的載入對頁面效能有非常大的影響,如何減少資源的載入,特別是圖片的載入我覺得是每一位前端都需要去研究的內容。
以最近開發的一個頁面為例,分享一下用css繪製圖片,從而減少圖片資源的載入。
紅框所示就是頁面使用css繪製的圖形,如果覺得對如何繪製有疑問,不妨就參考一下。
內凹半圓形
內凹所在模組的背景部分有漸變色和一張圖片,可以使用css3的background
設定多個背景,需要提醒的是多背景圖堆疊順序是從後往前的。比如模組的背景圖片是顯示在漸變色上面,那麼寫法就是:
background: url('https://gw.alicdn.com/tfs/TB1Rk9mLMTqK1RjSZPhXXXfOFXa-208-109.png') right bottom,
-webkit-linear-gradient(-45deg, red 15px, green 300px) top left;
複製程式碼
另外這個模組的需求是除了需要畫出兩個內凹半圓形以外,還需要做鏤空處理,透出頁面的背景圖內容。我這裡是使用了css3的mask
屬性,mask
屬性的寫法跟background
的很類似,這裡就不做詳細介紹。
其中mask-image
是通過屬性值裡圖片的透明度來控制指定區域的顯示和隱藏,透明度為0隱藏,1位顯示。所以只需要繪製出想要的形狀並設定透明度為0,就可以實現鏤空的效果。
-webkit-mask-image:
-webkit-radial-gradient(center left, rgba(0,0,0,0) 10px, rgba(0,0,0,1) 10px),
-webkit-radial-gradient(center right, rgba(0,0,0,0) 10px, rgba(0,0,0,1) 10px);
-webkit-mask-size: 200px 400px, 200px 400px;
-webkit-mask-position: left, right;
-webkit-mask-repeat: no-repeat;
複製程式碼
通過漸變和background
的組合可以實現很多好玩的效果,模組中的那一行鋸齒也是通過的backgorund
+漸變實現的。
漸變箭頭
用css繪製箭頭還是比較簡單,就是利用兩個子元素做正負45度的旋轉就可以了,再設定背景漸變就能畫出視覺稿的效果。再配合css3的animation
,一個漸變箭頭的動畫就做出來了。
除了可以使用css自己畫以外,也可以使用iconfont
的圖示,我這裡的箭頭還需要有漸變,而標準庫中只有純色的箭頭圖示,不過還好css3中提供了background-clip
,可以將元素背景色裁剪成文字(iconfont
的圖示也是文字)的前景色。
.arrows{
background-image: linear-gradient(90deg, #FCCC98, #D69851);
-webkit-background-clip: text;
background-clip: text;
font-size: 15px;
line-height: 15px;
-webkit-text-fill-color: transparent;}
複製程式碼
波浪線
繪製波浪線我的第一反應是用SVG或者canvas的貝塞爾曲線,使用canvas就來畫個波浪線成本稍微有點高。使用SVG自己手寫的話成本也比較高,但如果視覺同學用的是Sketch
做的視覺稿,那隻需要匯出SVG程式碼就可以了。
除了可以使用SVG,也可以利用css的border
屬性來模擬弧線。因為border
可以給某一條邊框設定圓角,視覺效果就像是一條弧線,通過元素組合就可以實現波浪線的效果。
.mask-curve{
width: 50px;
height: 100px;
background-color: #D6954E;
box-sizing: border-box;
border-bottom-right-radius: 100%;
position: absolute;
left: 0;
top: 0;
}
複製程式碼
小結
目前的css功能越來也豐富,可以使用css替換很多的以前需要圖片才能完成的效果,從而減少圖片的載入,達到優化頁面效能的目的。上面的實現也只是個人的想法,如果有更好的方案歡迎交流。