css規(guī)則(2)-優(yōu)化css

css.jpg

廣州這熱天氣越來越變態(tài)了,熱但狭!披诗,回歸正傳,css是一門很有學問的知識立磁,可能有些人會覺得css不過如此呈队,我只需要記住幾個常用屬性的設(shè)置就可以掌握css,號稱精通css了唱歧。但是宪摧,css不是表面看起來那樣簡單的,要寫出性能更好颅崩,更簡潔并且更加有拓展性的css沒有積累和沉淀是不可能完成的几于。今天的主題是css優(yōu)化方面,可能你在網(wǎng)上看到過類似文章沿后,但我相信沿彭,我的這篇文章多少會對你有幫助的!

一尖滚、css引入方式

1喉刘、直接在標簽中使用style書寫css樣式
2瞧柔、html中使用style
3、使用@import引用外部CSS文件
4睦裳、使用link引用外部CSS文件

這四種方法非剃,按理來說,我們用的最多的應該是第四種方法了推沸,確實如此,樣式與結(jié)構(gòu)分離是最好的原則券坞。第一第二種方案鬓催,有人覺得可能更加方便,不引入外部文件恨锚,減少了css文件的http請求宇驾,但是這種css的書寫方式對頁面的維護與調(diào)試造成更大的影響,是不建議采取的猴伶,當我們網(wǎng)頁的css更多更大了课舍,首先是不利于閱讀的,其次他挎,調(diào)試也是相對于外部css要困難的筝尾。第三種方法@import引入的css也是可以的。對于@import簡單介紹一下:@import指定導入的外部樣式表及其目標媒體办桨。該規(guī)則必須在樣式表頭部最先聲明筹淫。并且其后的分號是必需的,如果省略了此分號呢撞,外部樣式表將無法正確導入损姜,并會生成錯誤信息。
例如

@import url(example.css) screen and (min-width:800px);
@import url(example.css) screen and (width:800px),(color);
@import url(example.css) screen and (min-device-width:500px) and (max-device-width:1024px);

兼容性是非常不錯的殊霞〈菰模基本上都支持,出來古老的IE6和IE7绷蹲。言歸正傳棒卷。使用@import導入式會在整個網(wǎng)頁裝載完后再裝載CSS文件,因此這就導致了一個問題祝钢,如果網(wǎng)頁比較大則會兒出現(xiàn)先顯示無樣式的頁面娇跟,閃爍一下之后,再出現(xiàn)網(wǎng)頁的樣式太颤。這是導入式固有的一個缺陷苞俘。@import影響css文件的加載速度,為了性能優(yōu)化龄章,我們使用link方式引入css吃谣。

二乞封、css的簡寫

很多時候,我們書寫的css樣式里面會出現(xiàn)類似

div{ display:block; width:100%; margin-top:20px; margin-bottom:20px; margin-left:20px; margin-right:20px;}

1岗憋、當然了肃晚,這么簡單的css簡寫,我相信大家是可以搞定的仔戈,我也只是來強調(diào)這個問題而已了关串。首先,我們知道div是塊級元素监徘,塊級元素的display:block,當一個元素的display為block時候晋修,那么它的width是100%;也就是說上面display:block;和width完全是可以省略的,還有凰盔,margin可以簡寫成margin:20px;簡寫四個值分別是上右下左墓卦,簡寫三個值就是上 左右 下,簡寫為一個户敬。類似的css簡寫形式還有很多落剪。例如

.class{ border-color:#fff; border-style:solid; border-width:1px;}

簡寫

.class{border:1px solid #fff;}

還有字體屬性font,background,padding等等,對于那些可以簡寫的盡量精簡代碼尿庐。比如顏色值忠怖,建議用小寫.class{color:#FFFFFF;}簡寫.class{color:#fff;}如果顏色每兩位的值相同,可以縮寫一半

2抄瑟、有的屬性值為0的時候脑又,我們可以不加單位,例如

.class{ width:0; left:0;}

要養(yǎng)成寫css都用簡寫形式锐借,多去觀察css代碼中问麸,有的東西是可以不要的,有的東西是可以簡寫優(yōu)化的钞翔,千萬不要覺得這沒什么严卖,積少成多的,厚積薄發(fā)布轿。好的css書寫習慣和更加精簡的書寫方式能節(jié)省css文件的大小哮笆,優(yōu)化網(wǎng)站整體性能,更加容易閱讀汰扭。
這些好處是會在以后的項目越做越大的時候體現(xiàn)出來稠肘。專業(yè)的人一看你寫的css代碼風格就能了解你的水平了÷苊可能有的人書寫css的時候喜歡按照相關(guān)的屬性聲明應當歸為一組项阴,一定順序排列。這樣書寫也是可以很工整的笆包,并且subline還有相關(guān)插件可以按照我們自己設(shè)置的規(guī)則去設(shè)置环揽。個人覺得這個是完全可以的略荡,樣式寫的很工整。(慚愧啊歉胶,我一直都是按照自己想法來排順序的汛兜,對這種寫法比較支持,雖然沒有對樣式文件減少大型ń瘛).
3粥谬、多利用css繼承的特性,不用每一個選擇器上都寫一大堆可以從祖先元素基礎(chǔ)下來的的屬性辫塌,可以基礎(chǔ)的屬性有很多漏策,例如

font、text-index璃氢、text-align、line-height狮辽、color一也、text-transform、word-spacing喉脖、visibility等等

我們也不需要去記住他們椰苟,css手冊一查就可以了解了,并且我們用多了自然而然就可以很清楚的知道树叽∮吆可能有幸情況很特殊,例如我在a的父元素設(shè)置了color题诵,為什么a的color沒有繼承下來呢洁仗?因為有些標簽的屬性有默認的值,例如表單元素性锭,鏈接等等赠潦,具體可以參考下http://css.doyoe.com/

三、css背景精靈圖

CSS Sprites在國內(nèi)很多人叫css精靈草冈,是一種網(wǎng)頁圖片應用處理方式她奥。它允許你將一個頁面涉及到的所有零星圖片都包含到一張大圖中去,這樣一來怎棱,當訪問該頁面時哩俭,載入的圖片就不會像以前那樣一幅一幅地慢慢顯示出來了。對于當前網(wǎng)絡(luò)流行的速度而言拳恋,不高于200KB的單張圖片的所需載入時間基本是差不多的凡资,所以無需顧忌這個問題。CSS Sprites其實就是把網(wǎng)頁中一些背景圖片整合到一張圖片文件中谬运,再利用CSS的“background-image”讳苦,“background- repeat”带膜,“background-position”的組合進行背景定位,background-position可以用數(shù)字精確的定位出背景圖片的位置鸳谜。在網(wǎng)頁訪問中膝藕,客戶端每需要訪問一張圖片都會向服務(wù)器發(fā)送請求,所以咐扭,訪問的圖片數(shù)量越多芭挽,請求次數(shù)也就越多,造成延遲的可能性也就越大蝗肪。所以袜爪,CSS Sprites技術(shù)加速的關(guān)鍵,并不是降低質(zhì)量薛闪,而是減少個數(shù)辛馆,當然隨之而來的增加內(nèi)存消耗,CSS Sprites圖片繁瑣的合成等缺點在網(wǎng)站性能的提升前豁延,也就不足為道了昙篙。

類似于上圖,如果把一個一個圖標都單獨弄出來用的話诱咏,是非常方便的苔可,但是,每多一個圖片文件就是多一個HTTP請求了袋狞,為了更好的性能焚辅,建議在不是很復雜的情況下能用CSS Sprites就盡量用。

四苟鸯、css選擇器優(yōu)化

說到這個css選擇器的優(yōu)化同蜻,我們應該要知道,瀏覽器對css選擇器是怎么匹配的早处,比如 .class span 瀏覽器是怎么“定位”到span的埃仪。首先我們先拋出結(jié)論,css的匹配規(guī)則是從右往左的陕赃,沒錯卵蛉,不是從左到右。css會先找到選擇權(quán)最右邊的那個選擇符么库,然后再往左邊不斷往上找傻丝。這個 .class span中,首先會找到所有的span元素诉儒,然后再找span的父級元素是否有類名class葡缰,找不到再往祖先元素找,知道找到符合span的祖先元素為類名.class為止。最簡單粗暴的方法就是直接給span一個類名泛释,或者ID滤愕,但是那也是不現(xiàn)實的,只能說怜校,我們要根據(jù)實際情況來找適合的解決方案了间影。
比如說,我們應該盡量減少css后臺選擇器過長的情況茄茁,這樣的選擇器效率是不高的魂贬。在頁面上,建議同意用類名來命名裙顽,不要用ID付燥,不是說ID不好,而是類名更加合適愈犹。
說到這個ID键科、Class之類的,隨便了解下css選擇器的優(yōu)先級

ID:100
Class:10
Tag:1

css的權(quán)重中漩怎,ID是最大的勋颖,類名次之,標簽最小扬卷。這個數(shù)字有什么用呢牙言,舉個例子

html
<div id="div" class="div">測試<div>

css
#div{ background:red}
.div{ background:orange;}
div{ background:yellow;}

如果不知道css選擇器權(quán)重的話酸钦,我們可以會覺得div的背景顏色是yellow怪得,因為后面的會覆蓋前面所寫的。但實際上不是得卑硫,div的背景是red徒恋,因為,ID權(quán)重為100欢伏,類名權(quán)重為10入挣,標簽最小為1,是按這個css的優(yōu)先級來計算最后用什么樣式的硝拧,如果是組合選擇器的話径筏,做加法運算就可以了。比如

#div a{} /*優(yōu)先級101*/.div li{} /*優(yōu)先級11*/body .div a{} /*優(yōu)先級12*/

這個也是可以做為css優(yōu)化的又一個點了障陶,選擇器性能越好滋恬,網(wǎng)站的性能就越好!建議選擇器的嵌套最好不要超過三層抱究。

五恢氯、減少css動畫渲染的性能損耗

盡可能多的利用硬件能力,如使用3D變形來開啟GPU加速

-webkit-transform:tanslate3d(0,0,0);

3D變形會消耗更多的內(nèi)存與功能,應確實有性能問題時采取使用它勋拟,兼在權(quán)衡
在條件允許情況下勋磕,盡可能少的使用box-shadow與gradient,他們對瀏覽器渲染性能損耗比較大敢靡,尤其在同一個元素同時使用了他們挂滓。
盡量的讓動畫元素不在文檔流中,以減少重排(關(guān)于瀏覽器渲染頁面是的重排與重繪醋安,下次我們再討論)杂彭,這里簡單說下

參考與伯樂在線文章http://blog.jobbole.com/46722/

瀏覽器從下載文檔到顯示頁面的過程是個復雜的過程,這里包含了重繪和重排吓揪。各家瀏覽器引擎的工作原理略有差別亲怠,但也有一定規(guī)則。簡單講柠辞,通常在文檔初次加載時团秽,瀏覽器引擎會解析HTML文檔來構(gòu)建DOM樹,之后根據(jù)DOM元素的幾何屬性構(gòu)建一棵用于渲染的樹叭首。渲染樹的每個節(jié)點都有大小和邊距等屬性习勤,類似于盒子模型(由于隱藏元素不需要顯示,渲染樹中并不包含DOM樹中隱藏的元素)焙格。當渲染樹構(gòu)建完成后图毕,瀏覽器就可以將元素放置到正確的位置了,再根據(jù)渲染樹節(jié)點的樣式屬性繪制出頁面眷唉。由于瀏覽器的流布局予颤,對渲染樹的計算通常只需要遍歷一次就可以完成。

重繪是一個元素外觀的改變所觸發(fā)的瀏覽器行為冬阳,例如改變visibility蛤虐、outline、背景色等屬性。瀏覽器會根據(jù)元素的新屬性重新繪制,使元素呈現(xiàn)新的外觀肘交。重繪不會帶來重新布局,并不一定伴隨重排饲常。
開發(fā)中,比較好的實踐是盡量減少重排次數(shù)和縮小重排的影響范圍狼讨。這部分討論已經(jīng)超出css了贝淤,我們先交流有關(guān)css的知識。

六熊楼、壓縮css文件

最后寫好樣式后霹娄,還可以對css進行壓縮能犯,來減少css文件的體積。對于一個壓縮文件犬耻,比如一個文件style.css踩晶,我們壓縮后可以改為style.min.css,網(wǎng)上有很多在線工具,可以搜索一下自己喜歡的壓縮工具枕磁,我個人喜好是用http://tool.oschina.net/codeformat/css

本文的全部內(nèi)容就到這了渡蜻,歡迎大家留言補充。會不定時的更新有關(guān)css優(yōu)化的知識~

歡迎訪問我的個人網(wǎng)站zhengyepan
原創(chuàng)文章计济,轉(zhuǎn)載請注明出處茸苇,謝謝歡迎一起討論交流

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市沦寂,隨后出現(xiàn)的幾起案子学密,更是在濱河造成了極大的恐慌,老刑警劉巖传藏,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腻暮,死亡現(xiàn)場離奇詭異,居然都是意外死亡毯侦,警方通過查閱死者的電腦和手機哭靖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侈离,“玉大人试幽,你說我怎么就攤上這事∝阅耄” “怎么了铺坞?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蔗坯。 經(jīng)常有香客問我康震,道長燎含,這世上最難降的妖魔是什么宾濒? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮屏箍,結(jié)果婚禮上绘梦,老公的妹妹穿的比我還像新娘。我一直安慰自己赴魁,他們只是感情好卸奉,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颖御,像睡著了一般榄棵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天疹鳄,我揣著相機與錄音拧略,去河邊找鬼。 笑死瘪弓,一個胖子當著我的面吹牛垫蛆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腺怯,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼袱饭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了呛占?” 一聲冷哼從身側(cè)響起虑乖,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晾虑,沒想到半個月后决左,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡走贪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年佛猛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坠狡。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡继找,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出逃沿,到底是詐尸還是另有隱情婴渡,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布凯亮,位于F島的核電站边臼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏假消。R本人自食惡果不足惜柠并,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望富拗。 院中可真熱鬧臼予,春花似錦、人聲如沸啃沪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽创千。三九已至缰雇,卻和暖如春入偷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背械哟。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工盯串, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人戒良。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓体捏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親糯崎。 傳聞我的和親對象是個殘疾皇子几缭,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,734評論 1 92
  • 轉(zhuǎn)載請聲明 原文鏈接地址 關(guān)注公眾號獲取更多資訊 第一部分 HTML 第一章 職業(yè)規(guī)劃和前景 職業(yè)方向規(guī)劃定位...
    程序員poetry閱讀 16,524評論 32 459
  • 一:在制作一個Web應用或Web站點的過程中沃呢,你是如何考慮他的UI年栓、安全性、高性能薄霜、SEO某抓、可維護性以及技術(shù)因素的...
    Arno_z閱讀 1,141評論 0 1
  • 習慣了有你在身邊的日子,一切都可以不在乎惰瓜》窀保可以勇敢的追著世界跑,累了便回到你的懷抱崎坊;可以放心地走向前方未知的道路备禀,...
    那只狐貍閱讀 295評論 2 9
  • 今天是培訓的第四天,福建教育學院體育藝術(shù)研修部音樂教研室主任奈揍、副教授吳蔚老師給我們帶來了專題講座上午是福建省高中音...
    幽香怡人閱讀 1,286評論 0 2