寫CSS的同學們往往會體會到,隨著項目規模的增加,項目中的CSS代碼也會越來越多,如果沒有及時對CSS代碼進行維護,CSS代碼不斷會越來越多。CSS代碼交錯復雜,像一張龐大的蜘蛛網分布在網站的各個位置,你不知道修改這行代碼會有什麼影響,所以如果有修改或增加新功能時,開發人員往往不敢去刪除舊的冗余的代碼,而保險地增加新代碼,最終的壞處就是項目中的CSS會越來越多,最終陷入無底洞。
CSS代碼重構的目的
我們寫CSS代碼時,不僅僅只是完成頁面設計的效果,還應該讓CSS代碼易於管理,維護。我們對CSS代碼重構主要有兩個目的:
1、提高代碼性能
2、提高代碼的可維護性
提高代碼性能
提高CSS代碼性能主要有兩個點:
1、提高頁面的加載性能
提高頁面的加載性能,簡單說就是減小CSS文件的大小,提高頁面的加載速度,盡可以的利用http緩存
2、提高CSS代碼性能
不同的CSS代碼,浏覽器對其解析的速度也是不一樣的,如何提高浏覽器解析CSS代碼的速度也是我們要考慮的
提高代碼的可維護性
提高CSS代碼的可維護性主要是體現在下面幾點:
1、可重用性
一般來說,一個項目的整體設計風格是一致的,頁面中肯定有幾個風格一致但有些許不同的模塊,如何在盡可能多地重用CSS代碼,盡可能少地增加新代碼,這是CSS代碼中非常重要的一點。如果CSS代碼的重用性高,我們可能只需要寫一些不一樣的地方,對頁面性能和可維護性、提高開發效率都有很大的幫助。
2、可擴展性
如果產品增加了某個功能,我們應該保證新增加的CSS代碼不會影響到舊的CSS代碼和頁面,並且盡可能少地增加新代碼而重用舊代碼。
3、可修改性
如果某個模塊產品經理覺得要修改樣式,或者要刪掉它,如果沒有規劃好相應的CSS代碼,過了一段時間之後,開發人員可能已經不記得這段代碼作用了幾個地方,不敢修改或刪除它,這樣下去CSS代碼也就越來越多,影響了頁面的性能,還造成了代碼的復雜度。
CSS代碼重構的基本方法
前面說到了CSS代碼重構的目的,現在我們來說說一些如何達到這些目的的一些基本方法,這些方法都是易於理解,容易實施的一些手段,大家平時可能也不知不覺地在使用它。
提高CSS性能的手段
首先說說如何提高CSS性能,根據頁面的加載性能和CSS代碼性能,主要總結有下面幾點:
1、盡量將樣式寫在單獨的css文件裡面,在head元素中引用
有時候為了圖方便或者快速搞定功能,我們可能會直接將樣式寫在頁面的style標簽或者直接內聯在元素上,這樣雖然簡單方便,但是非常不利於日後的維護。將代碼寫成單獨的css文件有幾點好處:
(1)內容和樣式分離,易於管理和維護
(2)減少頁面體積
(3)css文件可以被緩存、重用,維護成本降低
2、不使用@import
這條手段已經是眾所周知,這裡簡單提一下,@import影響css文件的加載速度
3、避免使用復雜的選擇器,層級越少越好
有時候項目的模塊越來越多,功能越來越復雜,我們寫的CSS選擇器會內套多層,越來越復雜。
建議選擇器的嵌套最好不要超過三層,比如:
- header.logo.text{}
可以優化成
- haeder.logo-text{}
簡潔的選擇器不僅可以減少css文件大小,提高頁面的加載性能,浏覽器解析時也會更加高效,也會提高開發人員的開發效率,降低了維護成本。
4、精簡頁面的樣式文件,去掉不用的樣式
很多時候,我們會把所有的樣式文件合並成一個文件,但是這樣有一個問題:很多其他頁面的CSS同時引用到當前頁面中,而當前頁面並沒有用到它們,這種情況會造成兩個問題:
(1)樣式文件偏大,影響加載速度
(2)浏覽器會進行多余的樣式匹配,影響渲染時間。
正確的處理方法是根據當前頁面需要的css去合並那些當前頁面用到的CSS文件。
PS:合並成一個文件有一個優點:樣式文件會被浏覽器緩存,進入到其他頁面樣式文件不用再去下載。這條規則應根據場景來區別對待,如果是大項目,應該合並成不同的樣式文件,如果是簡單的項目,建議合並成一個文件即可。如果無法確認項目規模,建議分開成不同的樣式文件,日後要合並也比較方便。
5、利用CSS繼承減少代碼量
我們知道有一部分CSS代碼是可以繼承的,如果父元素已經設置了該樣式,子元素就不需要去設置該樣式,這個也是提高性能的行之有效的方法。
常見的可以繼承的屬性比如:
color,font-size,font-family等等
不可繼承的比如:
position,display,float等
大家可以查看CSS參考手冊
提高可維護性的方法
提高CSS代碼的可維護性,簡單的說就是要讓開發人員易於理解CSS代碼,容易去修改它,不會破壞原有的功能。下面說說一些常用的手段。
1、命名與備注
命名是提高代碼可讀性的第一步,也是及其重要的一步。很多人都有這樣的體會:命名是寫代碼中最讓程序員頭疼的事情之一,尤其是對母語非英語的開發人員來說,要找一個合適貼切的名字並不容易。提高自己命名的能力,可以多看看別人的代碼。下面是CSS中的一些命名相關的