你所不知道的CSS高效編寫方法

? ?相信幾乎所有的程序員對HTML和CSS并不陌生,但是你真的了解它的編寫方法和規范嗎?本文將和大家一起探討CSS出色編寫方法。

1.層級書寫

位置屬性:position、top、left、bottom、right、display、float等。

盒子模型相關屬性:width、height、padding、margin、border等。

字體顏色排版屬性:font、text-align、line-height等。

視覺背景邊框等屬性:background、transition、animation、transform等。

這里說一下這樣寫的原因,把位置屬性寫在最前是為了讓我們更好的去發現css中出現的repaint(重繪)和reflow(回流),因為重繪和回流會影響頁面的加載,也就是影響網站性能。我們這樣寫可以及時發現不必要的位置屬性,并將其剔除,從而減少頁面的重繪和回流。盒模型排第2位,因為他決定了組件的尺寸和位置,其他屬性只會影響內部不會影響組件外部樣式,故放在最后。

2.代碼縮寫(shorthand)

? ?如margin、padding、border、background、animate、transition等,可提高閱讀體驗,并且也提高了編碼速度。

a.去掉0.8em前的“0”。

b.去掉0px后的“px”。

c.16進制顏色盡可能使用3個字符,譬如#dddddd,改為#ddd。

d.16進制值應該全部小寫,如#fff;在掃描文檔時,小寫字符易于分辨。

3.根據項目需求使用相應的reset

相信現在已經很少人用*{margin:0;padding:0;}這種通用選擇器進行全局重置了,因為它影響性能,我們更多人采用的是阿里的reset。雖然它很不多,但是對于不同的項目而已,有的重置是不需要的,所以沒必要全部寫進去,要看實際需求。這是一個reset.css的鏈接http://www.cssreset.com/,感興趣的可以看一下。

4.利用css選擇器,合理使用繼承

? ?a.如果父元素的多個子元素有相同的樣式,無疑把樣式定義在父元素上最佳。

? ?b.對于沒有所屬關系的平級元素,如果有很多相同的樣式,我們可以選擇使用群組選擇器,進行合并,類似于reset。

5.必要的代碼注釋

相信很多朋友跟我一樣,不愿意看別人寫的代碼,其實也不是自己不愿意,而是有些“前輩們”寫的樣式太不知所云,導致看起來頭疼,還不如自己重寫,所以必要的注釋還是可以有的;但請注意,我這里說的是必要的注釋,而不是要多寫注釋。最好按照功能的類別來對一組樣式表寫統一注釋,獨立成行。

6.制定命名規范

相信很多人對class的取名很苦惱,其實我也是,不過以前老師說過一句話很好:“如果你不知道怎么給class命名,那就去看看‘大牛們’的代碼吧!”,可以看看bootStrap、jqueryMobile等框架css的命名方式。

以下為幾點建議:

a.采用“-”、駝峰命名法

? ? 譬如left-count-down、leftCountDown,不要用eftcountdown或者 _leftcountdown(部分瀏覽器不兼容)進行命名。

b.簡寫命名

?對于左側導航“left-navgation”,我們可以簡化為“left-nav”,但前提是可以見名知意,如果達不到這種效果的話,那就老老實實寫全稱。

c.有js操作的class命名

對于進行js操作的class可采用“js-left-container”的方式進行命名。大型項目中最好在ID或class名字前加上這種標識性前綴(命名空間),使用短破折號鏈接,譬如“”qovd-js-container。因為使用命名空間可以防止命名沖突,方便維護,比如在搜索和替換操作上。

d.必要的時候使用ID選擇器

?一般可以使用class代替的,盡量不用ID,原因在于id可以作為變量使用, id更多使用與js操作,不過現在js操作也在淡化id的使用。

e.避免使用標簽與ID或class進行組合

非必要的情況下不要使用元素標簽名和ID或class進行組合,譬如div.title{margin: 20px;}。同時單個元素,多類選擇器最好不超過3個,譬如class=”menu left-content content”。

f.為選擇器添加狀態前綴

為選擇器添加狀態前綴,使其語義化,譬如“.show”,改為“.is-show”,對于js操作的元素經常使用到類似的寫法,進行元素的顯示和隱藏。

g.基于最近父元素class進行子元素命名的前綴

譬如父元素class=”new”,子元素則命名為class=”new-title”,這種習慣看你個人,如果怕看混了,就建議不要用了。

7.選擇更優的屬性值

譬如border:0px瀏覽器會解析渲染,消耗內存,而border:none,瀏覽器則不做渲染,不消耗內存。

8.盡量不用@import及css表達式

? 增加HTTP請求次數,影響加載速度,出現從而影響加載速度。替代方法:使用、使用sass或者less將多個css文件編譯成一個文件。

是XHTML標簽,頁面被加載時同步加載;@import只加載css,而且是待css解析器讀取到css文件中有@import再去請求服務器下載樣式,故有可能出現閃屏(其實就是樣式未加載完成)。前者不存在兼容性問題,后者IE5+瀏覽器才能識別(這個方面基本可以忽略)。前者可使用DOM操作控制,后者無法控制。

9.使用外聯CSS,盡量少用內聯樣式

這樣做其實也是為了嚴格保持結構 (標記),表現 (樣式),和行為 (腳本)相分離, 并盡量讓這三者之間的交互保持最低限度。

10.嵌入式資源書寫省略協議頭

省略圖像、媒體文件、樣式表和腳本等URL協議頭部聲明 ( http: , https: )。如果不是這兩個聲明的URL則不省略。省略協議聲明,使URL成相對地址,防止內容混淆問題和導致小文件重復下載。

11.其它書寫注意事項

a.在屬性名冒號結束后加一個空字符。

b.每個選擇器和注釋都獨立成行。

c.注意元素的大小寫,所有屬性都要用“;”結尾。

d.省略type=“text/css”。

e.統一設置編輯器文字縮進2-4空格。

f .建議一個屬性寫一行,畢竟代碼在上測試前,我們會使用webpack之類的 打包工具進行打包,所以你不用擔心占據空間。

g.將媒體查詢盡可能放在對應規則附近,如果放的太遠,很有可能會被遺忘。

h.為避免不必要的繼承,可以為class添加命名空間。

i.組件化、功能塊、內容塊方式編寫css。

12.前綴兼容性書寫

? ?必要的css兼容性處理還是很重要的。

13.最好避免使用的CSS “hacks”

雖然它很有誘惑力,可以當作用戶代理檢測或特殊的CSS過濾器,但它的行為太過于頻繁,會長期傷害項目的效率和代碼管理,所以能用其他的解決方案就找其他的。

14.引入less、sass、postcss、stylus等CSS預處理語言

現在基本很少直接寫CSS了,都是使用CSS預處理語言,less和sass已經很常見了,大家有時間可以看看postcss。postcss和sass無沖突, postcss不僅具有sass的功能,同時還可以可以對sass處理過后的CSS再處理,而且預處理速度也很快。

最后,附上推薦class命名表。

“偷”的圖

如果上述內容存在問題,希望大家及時指正,同時也希望大家可以補充。我始終相信知識只有分享,才會越來越好。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,869評論 18 139
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,792評論 1 92
  • <a name='html'>HTML</a> Doctype作用?標準模式與兼容模式各有什么區別? (1)、<...
    clark124閱讀 3,540評論 1 19
  • 人生就像是一面鏡子,每個人都會有面屬于自己的鏡子。鏡子前會路過形形色色的人,它在等待,靜靜地等待著那個將陪伴自己度...
    孤舟一芥閱讀 363評論 2 1
  • NEA 2:0輕取對方 1、DS+SA的小套路搭配的演練 2、TK,SA配合小狗體系的搭配 PS: 1、未來VG很...
    春愿君閱讀 136評論 0 0