您好,登錄后才能下訂單哦!
在優化css之前我們需要了解下css是怎么進行工作的,我們都知道css是由選擇器,屬性和屬性值構成的。
我們可能會這樣寫上一行代碼
//css .con .loulan1 p span{ display: block; } //html<div class="con"> <div class="loulan"> <p><span>文字</span></p> </div></div>
在這里我們對con類里面的loulan類里的p標簽里面的span標簽進行樣式定義。我說出來都嫌累更別說寫起來了,其實你可以把瀏覽器看作一個人,它渲染起來肯定也會浪費性能。
而且css的匹配原理不是從左到右的,而是從右到左的,也就是說我們的這行代碼里面,先查找到頁面里面所有的span元素形成一個集合,再在所有的span元素往上查找,看看有多span的父元素是p元素或者父元素的父元素是p元素或者......慢慢尋找,把父元素不是p元素的刪去,再往上查找看集合里的有p元素又多少它的父元素的類是loulan...瀏覽器說:我好累...
其實呢瀏覽器從右到左進行查找的好處是為了盡早過濾掉一些無關的樣式規則和元素。并且Firefox 稱這種查找方式為 keyselector(關鍵字查詢),所謂的關鍵字就是樣式規則中最后(最右邊)的規則,上面的 key 就是 span。人家本來是為了能盡快過濾到一些無關樣式規則的,我們這里缺一層套一層,層層不停歇。所以只是想定義一個span的樣式在span上加個類豈不是更好。有人這時要說了,那樣是需要在每個元素上都加上類嗎?那肯定不是必須的,只不過我們要了解瀏覽器是怎么查找匹配的,然后結合現在的結構來做出一個最好的最方便的寫法。
//css .loulanSpan{ display: block; } //html<div class="con"> <div class="loulan"> <p><span class="loulanSpan">文字</span></p> </div></div>
這里說下CSS的 ID Class Tag選擇器的權值,也就是他們的優先級,權值越大,優先級越高
ID:100
Class:10
Tag:1
有了上面兩個的基礎我們再詳細說下應該怎樣來優化css提高性能
1,減少css嵌套,最好不要套三層以上,一般情況下塊級元素加上類,里面的內聯元素不用加,css寫的時候塊級class套內聯tag,這樣不僅可以減少css文件大小,還能減少性能浪費。
2,不要在ID選擇器前面進行嵌套,ID本來就是唯一的而且人家權值那么大,前方嵌套完全是浪費性能。
3,建立公共樣式類,把長段相同樣式提取出來作為公共類使用,比如我們常用的清除浮動,單行超出顯示省略號等等等,當然如果你使用sass,繼承會讓你更加方便,同時我是比較提倡使用sass的,之后肯定也會寫一篇sass的博客。
4,縮寫css,其中包括縮寫maigin,padding,顏色值等等,要是有兩個或者兩個以上的margin-****,寫成margin: * * * *有助于文件大小。
5,減少通配符*或者類似[hidden="true"]這類選擇器的使用,挨個查找所有...這性能能好嗎?當然重置樣式這些必須的東西是不能少的。
6,有些人喜歡在類名前面加上標簽名:p.ty_p 來進行更加精確的定位,但是這樣往往效率更差,類名應該在全局范圍除非公用是唯一的,所以這種做法是應該便面的。
7,巧妙運用css的繼承機制,在css中很多屬性是可以繼承的比如顏色字體等等,父節點定義了,子節點就無需定義。
8,拆分出公共css文件,對于比較大的項目我們可以將大部分頁面的公共結構的樣式提取出來放到單獨css文件里,這樣一次下載后就放到緩存里,當然這種做法會增加請求,具體做法應以實際情況而定。
9,不用css表達式,可能大家接觸比較少,但是要記住的是無論我們怎么炫酷,到了最后都是靜態的,所以表達式只是讓你的代碼顯得更加炫酷,但是他對性能的浪費可能是超乎你的想象的,因為它并不只是計算一次,一些小的事件可能都會增加它為了有效準確而進行計算求值的次數。
10,少用css rest,可能你會覺得重置樣式是規范,但是其實其中有很多的操作是不必要不友好的,有需求有興趣的朋友可以選擇normolize.css
11,cssSprite,合成所有icon圖片,用寬高加上bacgroud-position的背景圖方式顯現出我們要的icon圖,這是一種十分實用的技巧,極大減少了http請求。
當然我們還需要一些善后工作,CSS壓縮(這里提供一個在線壓縮 YUI Compressor ,當然你會用其他工具來壓縮是十分好的),GZIP壓縮,Gzip是一種流行的文件壓縮算法,詳細做法可以谷歌或者百度。
當然css性能優化技術可能不僅僅是這些
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。