CSS代碼重構(gòu)與優(yōu)化的方法有哪些

本篇內(nèi)容主要講解“CSS代碼重構(gòu)與優(yōu)化的方法有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“CSS代碼重構(gòu)與優(yōu)化的方法有哪些”吧!

成都網(wǎng)絡(luò)公司-成都網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)十余年經(jīng)驗成就非凡,專業(yè)從事網(wǎng)站設(shè)計、網(wǎng)站制作,成都網(wǎng)頁設(shè)計,成都網(wǎng)頁制作,軟文發(fā)稿廣告投放平臺等。十余年來已成功提供全面的成都網(wǎng)站建設(shè)方案,打造行業(yè)特色的成都網(wǎng)站建設(shè)案例,建站熱線:13518219792,我們期待您的來電!

CSS代碼重構(gòu)的目的
我們寫CSS代碼時,不僅僅只是完成頁面設(shè)計的效果,還應(yīng)該讓CSS代碼易于管理,維護。我們對CSS代碼重構(gòu)主要有兩個目的:
1、提高代碼性能
2、提高代碼的可維護性
提高代碼性能
提高CSS代碼性能主要有兩個點:
1、提高頁面的加載性能
提高頁面的加載性能,簡單說就是減小CSS文件的大小,提高頁面的加載速度,盡可以的利用http緩存
2、提高CSS代碼性能
不同的CSS代碼,瀏覽器對其解析的速度也是不一樣的,如何提高瀏覽器解析CSS代碼的速度也是我們要考慮的
提高代碼的可維護性
提高CSS代碼的可維護性主要是體現(xiàn)在下面幾點:
1、可重用性
一般來說,一個項目的整體設(shè)計風格是一致的,頁面中肯定有幾個風格一致但有些許不同的模塊,如何在盡可能多地重用CSS代碼,盡可能少地增加新代碼,這是CSS代碼中非常重要的一點。如果CSS代碼的重用性高,我們可能只需要寫一些不一樣的地方,對頁面性能和可維護性、提高開發(fā)效率都有很大的幫助。
2、可擴展性
如果產(chǎn)品增加了某個功能,我們應(yīng)該保證新增加的CSS代碼不會影響到舊的CSS代碼和頁面,并且盡可能少地增加新代碼而重用舊代碼。
3、可修改性
如果某個模塊產(chǎn)品經(jīng)理覺得要修改樣式,或者要刪掉它,如果沒有規(guī)劃好相應(yīng)的CSS代碼,過了一段時間之后,開發(fā)人員可能已經(jīng)不記得這段代碼作用了幾個地方,不敢修改或刪除它,這樣下去CSS代碼也就越來越多,影響了頁面的性能,還造成了代碼的復(fù)雜度。
CSS代碼重構(gòu)的基本方法
前面說到了CSS代碼重構(gòu)的目的,現(xiàn)在我們來說說一些如何達到這些目的的一些基本方法,這些方法都是易于理解,容易實施的一些手段,大家平時可能也不知不覺地在使用它。
提高CSS性能的手段
首先說說如何提高CSS性能,根據(jù)頁面的加載性能和CSS代碼性能,主要總結(jié)有下面幾點:
1、盡量將樣式寫在單獨的css文件里面,在head元素中引用
有時候為了圖方便或者快速搞定功能,我們可能會直接將樣式寫在頁面的style標簽或者直接內(nèi)聯(lián)在元素上,這樣雖然簡單方便,但是非常不利于日后的維護。將代碼寫成單獨的css文件有幾點好處:
(1)內(nèi)容和樣式分離,易于管理和維護
(2)減少頁面體積
(3)css文件可以被緩存、重用,維護成本降低
2、不使用@import
這條手段已經(jīng)是眾所周知,這里簡單提一下,@import影響css文件的加載速度
3、避免使用復(fù)雜的選擇器,層級越少越好
有時候項目的模塊越來越多,功能越來越復(fù)雜,我們寫的CSS選擇器會內(nèi)套多層,越來越復(fù)雜。
建議選擇器的嵌套最好不要超過三層,比如:
header.logo.text{}
可以優(yōu)化成
haeder.logo-text{}
簡潔的選擇器不僅可以減少css文件大小,提高頁面的加載性能,瀏覽器解析時也會更加高效,也會提高開發(fā)人員的開發(fā)效率,降低了維護成本。
4、精簡頁面的樣式文件,去掉不用的樣式
很多時候,我們會把所有的樣式文件合并成一個文件,但是這樣有一個問題:很多其他頁面的CSS同時引用到當前頁面中,而當前頁面并沒有用到它們,這種情況會造成兩個問題:
(1)樣式文件偏大,影響加載速度
(2)瀏覽器會進行多余的樣式匹配,影響渲染時間。
正確的處理方法是根據(jù)當前頁面需要的css去合并那些當前頁面用到的CSS文件。
PS:合并成一個文件有一個優(yōu)點:樣式文件會被瀏覽器緩存,進入到其他頁面樣式文件不用再去下載。這條規(guī)則應(yīng)根據(jù)場景來區(qū)別對待,如果是大項目,應(yīng)該合并成不同的樣式文件,如果是簡單的項目,建議合并成一個文件即可。如果無法確認項目規(guī)模,建議分開成不同的樣式文件,日后要合并也比較方便。
5、利用CSS繼承減少代碼量
我們知道有一部分CSS代碼是可以繼承的,如果父元素已經(jīng)設(shè)置了該樣式,子元素就不需要去設(shè)置該樣式,這個也是提高性能的行之有效的方法。
常見的可以繼承的屬性比如:
color,font-size,font-family等等
不可繼承的比如:
position,display,float等
大家可以查看CSS參考手冊
提高可維護性的方法
提高CSS代碼的可維護性,簡單的說就是要讓開發(fā)人員易于理解CSS代碼,容易去修改它,不會破壞原有的功能。下面說說一些常用的手段。
1、命名與備注
命名是提高代碼可讀性的第一步,也是及其重要的一步。很多人都有這樣的體會:命名是寫代碼中最讓程序員頭疼的事情之一,尤其是對母語非英語的開發(fā)人員來說,要找一個合適貼切的名字并不容易。提高自己命名的能力,可以多看看別人的代碼。下面是CSS中的一些命名相關(guān)的建議:
頭:header
內(nèi)容:content/container
尾:footer
導(dǎo)航:nav
側(cè)欄:sidebar
欄目:column
頁面外圍控制整體佈局寬度:wrapper
左右中:left right center
登錄條:loginbar
標志:logo
廣告:banner
頁面主體:main
熱點:hot
新聞:news
下載:download
子導(dǎo)航:subnav
菜單:menu
子菜單:submenu
搜索:search
友情鏈接:friendlink
頁腳:footer
版權(quán):copyright
滾動:scroll
內(nèi)容:content
標簽:tags
文章列表:list
提示信息:msg
小技巧:tips
欄目標題:title
加入:joinus
指南:guide
服務(wù):service
注冊:regsiter
狀態(tài):status
投票:vote
合作伙伴:partner
導(dǎo)航:nav
主導(dǎo)航:mainnav
子導(dǎo)航:subnav
頂導(dǎo)航:topnav
邊導(dǎo)航:sidebar
左導(dǎo)航:leftsidebar
右導(dǎo)航:rightsidebar
菜單:menu
子菜單:submenu
標題: title
摘要: summary
2、提取重復(fù)樣式
這一個方法很容易理解,簡單說就是提取相同的樣式成為一個單獨的類再引用,這樣不僅可以精簡CSS文件大小,而且CSS代碼變少,更易于重用和維護。例如下面的例子:
原來的代碼是這樣:

CSS Code復(fù)制內(nèi)容到剪貼板

  1. .about-title{    

  2. margin: 0 auto 6rem; color: #333; text-align: center; letter-spacing: 4px;    

  3. font-size: 2rem;    

  4. }    

  5. .achieve-title{    

  6. margin: 0 auto 6rem; color: #fff; text-align: center; letter-spacing: 4px;    

  7. font-size: 2rem;    

  8. }   

這兩個樣式的區(qū)別在于文字顏色的不同,我們可以將其公共的樣式提取出來,然后再分別設(shè)置其不同的樣式

CSS Code復(fù)制內(nèi)容到剪貼板

  1. .column-title{    

  2. margin: 0 auto 6rem; text-align: center; letter-spacing: 4px; font-size: 2rem;    

  3. }    

  4. .about{    

  5. color: #333;    

  6. }    

  7. .achieve{    

  8. color:#fff;    

  9. }   

提取公用的部分,然后在頁面上分別引用column-title和about等,這樣代碼更簡潔,維護起來也更方便了。這個例子非常簡單,實際上項目中可能有更復(fù)雜的情況,總之就要要盡可能的DRY,盡可能的提取重復(fù)的東西。
3、書寫順序
這個書寫順序指的是各個樣式的書寫順序,下面是推薦的CSS書寫順序
(1)位置屬性(position, top, right, z-index, display, float等)
(2)大小(width, height, padding, margin)
(3)文字系列(font, line-height, letter-spacing, color- text-align等)
(4)背景(background, border等)
(5)其他(animation, transition等)
書寫順序不一定非得按照上面的推薦來進行,而是根據(jù)你自己的習慣,但是最好能保證前后的習慣一致的,或者團隊應(yīng)該有一個共同的代碼規(guī)范去遵守,這樣后期維護起來也會方便許多。
以上是我個人總結(jié)的一些簡單的寫好和重構(gòu)CSS代碼的方法,大家當然不必拘泥于此,有不同的意見和建議歡迎進行交流!
CSS方法論
什么是CSS方法論呢?簡單地說就是一些同行為了提高CSS的可維護性、提出的一些編寫CSS代碼的規(guī)范和方法。他們提出了一些概念,這些概念可能聽起來很高大上,但是實際你平時可能不知不覺也會用到這些所謂的CSS方法論。下面我簡單地介紹下幾個比較常見的CSS方法論。
OOCSS
OOCSS是(Object Oriented CSS),顧名思義就是面向?qū)ο蟮腃SS。
OOCSS主要有兩個原則:
1、結(jié)構(gòu)和樣式分離
我們平時一定遇到過這種情況,比如一個頁面存在著多個不同功能的按鈕,這些按鈕的形狀大小都差不多,但是根據(jù)不同的功能會有不同的顏色或背景來加以區(qū)分。如果不進行結(jié)構(gòu)和樣式分離,我們的CSS代碼可能是這樣的

CSS Code復(fù)制內(nèi)容到剪貼板

  1. .btn-primary{    

  2. width:100px;    

  3. height:50px;    

  4. padding:5px 3px;    

  5. background:#ccc;    

  6. color:#000;    

  7. }    

  8. .btn-delete{    

  9. width:100px;    

  10. height:50px;    

  11. padding:5px 3px;    

  12. background:red;    

  13. color:#fff;    

  14. }  

這兩個或者可能更多的按鈕擁有一些不同的樣式,但是它們同時擁有相同的大小樣式等,我們將其抽象的部分提取出來,結(jié)果如下:

CSS Code復(fù)制內(nèi)容到剪貼板

  1. .btn{width:100px;height:50px;padding:5px 3px;}    

  2. .primary{background:red;color:#fff;}    

  3. .delete{background:red;color:#fff;}   

這樣提取公用的樣式出來,然后按鈕同時引用btn和primary等。這種做法除了減少重復(fù)的代碼精簡CSS之外,還有一個好處是復(fù)用性,如果需要增加其他額外的按鈕,只需要編寫不同的樣式,和btn配合使用即可。
(2)容器和內(nèi)容分離
我們平時寫代碼一定寫過這樣代碼

CSS Code復(fù)制內(nèi)容到剪貼板

  1. .content h4{    

  2. font-size:20px;    

  3. color:#333;    

  4. }   

這樣的代碼就是內(nèi)容依賴于容器,沒有分離的代碼,也就是說h4的樣式依賴于.content容器,如果其他地方要用到相同的樣式,但是它的容器卻不是.content,那你可能就是要再寫一遍.something h4。
所以O(shè)OCSS推薦分離容器和內(nèi)容,可以修改成:

CSS Code復(fù)制內(nèi)容到剪貼板

  1. .title{    

  2. font-size:20px;    

  3. color:#333;    

  4. }   

關(guān)于這一點,我個人建議要分情況來看,像前面這個例子,它適合樣式和容器分離。但是比如下面這種情況:

CSS Code復(fù)制內(nèi)容到剪貼板

  1. .menu li{    

  2. font-size:12px;    

  3. }   

這種ul,li列表的樣式,我覺的就按照我們原先的做法就可以,不一定非得給一個類給li來設(shè)定樣式,即

CSS Code復(fù)制內(nèi)容到剪貼板

  1. .menu-item{    

  2. font-size:12px;    

  3. }   

這樣頁面的li標簽需要引用menu-item類。
當然采用哪一種方式更好我也不卻確定,我自己比較喜歡.menu li的寫法,大家自行思考。
這就是OOCSS的兩個基本原則,這里只是簡單介紹OOCSS,各位如果有興趣的話請自行Google查找相關(guān)資料。
SMACSS
SMACSS是什么呢,它的全稱是Scalable and Modular Architecture for CSS。簡單說就是可擴展和模塊化的CSS架構(gòu)。
SMACSS將樣式分成5種類型:Base,Layout,Module,State,Theme,我們簡單來說說每一種類型分別指什么。
1、Base
基礎(chǔ)樣式表,定義了基本的樣式,我們平時寫CSS比如reset.css就是屬于基礎(chǔ)樣式表,另外我認為清除浮動,一些動畫也可以歸類為基礎(chǔ)樣式。
2、Layout
布局樣式,用于實現(xiàn)網(wǎng)頁的基本布局,搭起整個網(wǎng)頁的基本骨架。
3、Module
網(wǎng)頁中不同的區(qū)域有這個不同的功能,這些功能是相對獨立的,我們可以稱其為模塊。模塊是獨立的,可重用的組件,它們不依賴于布局組件,可以安全的刪除修改而不影響其他模塊。
4、State
狀態(tài)樣式,通常和js一起配合使用,表示某個組件或功能不同的狀態(tài),比如菜單選中狀態(tài),按鈕不可用狀態(tài)等。
關(guān)于狀態(tài)樣式,我個人覺得要分情況進行討論:
(1)不同組件的同一狀態(tài)的樣式是一樣的,比如頭部的導(dǎo)航菜單的選中狀態(tài)樣式和側(cè)欄的菜單選中狀態(tài)樣式是一樣的,我認為這部分狀態(tài)樣式可以歸類為State
(2)不同組件的統(tǒng)一狀態(tài)的樣式是不一樣的,即兩個地方的菜單雖然都是選中狀態(tài),但是他們卻又不同的選中樣式,這部分樣式不應(yīng)該被認為是State類型,而是應(yīng)該放在其組件對應(yīng)的Module中。
5、Theme
皮膚樣式,對于可更換皮膚的站點來說,這個是很有必要的,分離了結(jié)構(gòu)和皮膚,根據(jù)不同的皮膚應(yīng)用不同的樣式文件。
BEM
BEM是Block,Element,Modifier的縮寫。下面分別來介紹一下這三個概念:
(1)Block:在BEM的理論中,一個網(wǎng)頁是由block組成的,比如頭部是個block,內(nèi)容是block,logo也是block,一個block可能由幾個子block組成。
(2)Element:element是block的一部分,具有某種功能,element依賴于block,比如在logo中,img是logo的一個element,在菜單中,菜單項是菜單的一個element
(3)Modifier:modifier是用來修飾block或者element的,它表示block或者element在外觀或行為上的改變
我們通過BEM命名法寫樣式如下:

CSS Code復(fù)制內(nèi)容到剪貼板

  1. .block{}    

  2. .block-element{}    

  3. .block-modifier{}    

  4. .block-element-modifier{}   

BEM將頁面解析為block和element,然后根據(jù)不同的狀態(tài)使用modifier來設(shè)置樣式。
我對BEM的思想理解可能不到位,對BEM的看法主要是由兩點:
(1)頁面CSS模塊化,每個block就是一個模塊,模塊間相互獨立
(2)多級的class命名,避免選擇器的嵌套結(jié)構(gòu)
關(guān)于CSS方法論
上面提到的這些CSS方法論,大家看了就會發(fā)現(xiàn),它們其實有很多思想是相同的,比如:
1、選擇器的嵌套的優(yōu)化
2、CSS代碼模塊化
3、抽象CSS代碼
…
這些方法論,我們學習的時候,最重要的是去理解其思想,不一定非得照搬它的實現(xiàn)形式,多種方法結(jié)合使用。
我自己總結(jié)的方法
談了這么多,下面來說說我自己總結(jié)的寫CSS代碼的一些關(guān)鍵點。
1、寫代碼之前:從PSD文件出發(fā)
當我們拿到設(shè)計師給的PSD時,首先不要急于寫CSS代碼,首先對整個頁面進行分析,主要關(guān)注點是下面幾個:
(1)頁面分成了幾個模塊,哪些模塊是公用的,常見的比如頭部和底部,還有一些菜單欄等等
(2)分析每一個模塊都有什么樣式,提取出公用的樣式,注意公用樣式是全局公用(整個頁面公用)還是局部公用(模塊內(nèi)公用),公用樣式包括公用的狀態(tài)樣式,比如公用的選中狀態(tài),禁用狀態(tài)等等。
2、開始寫代碼
根據(jù)對PSD文件的分析,我們就可以開始著手寫代碼,我比較推薦SMACSS將樣式分成不同類型的做法:
(1)第一步是搭好頁面的骨架,也就是base樣式,layout樣式。
(2)第二步就是依次實現(xiàn)不同的模塊,在這里我推薦BEM的命名思想,但是可以嵌套一到兩層的選擇器結(jié)構(gòu)
3、優(yōu)化代碼
我相信當我們完成基本的頁面效果后,還是會存在著一些重復(fù)的或者不夠簡潔的代碼,這時候就是要去優(yōu)化這些代碼,主要是在提取重復(fù)代碼,盡可能地精簡代碼。

到此,相信大家對“CSS代碼重構(gòu)與優(yōu)化的方法有哪些”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

文章名稱:CSS代碼重構(gòu)與優(yōu)化的方法有哪些
文章起源:http://muchs.cn/article6/jepoig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、網(wǎng)站收錄、虛擬主機全網(wǎng)營銷推廣、網(wǎng)站內(nèi)鏈、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站