CSS優化,如何寫出高效整潔的CSS代碼

CSS優化的原則

1、不影響頁面的佈局

2、去掉不必要的樣式

3、合併相同的樣式

4、儘可能縮小樣式的大小

CSS樣式中常見的問題

1、除body之外的樣式重寫了與body一樣的樣式,如:

body{font-size:12px;color:red;}
h1{font-size:16px;color:red;}

h1在頁面解析的時候已經繼承了body中的屬性,所以color:red;就沒有必要再次重寫了。

2、0加單位與不加單位意義一樣,如:

h1{margin:0px;}
h1{margin:0;}
/*上面兩個樣式完全等價,其中下面樣式寫法更好*/

3、完全相同的樣式沒有必要寫兩次。如:

h1{color:red;}
h2{color:red;}
/*上面兩個樣式一樣,我們可以進行合併*/
h1,h2{color:red;}

4、一些樣式的縮寫,如 margin,padding

h1{margin-top:5px;margin-right:5px;margin-bottom:5px;margin-left:5px;}
/*上面的樣式可以進行縮寫*/
h1{margin:5px;}

5、顏色可以簡寫,如:

h1{color:#000000;}
/*上面的樣式可以簡寫成*/
h1{color:#000;}

CSS優化主要的好處

1、提高CSS文件的易讀性

2、減小CSS文件的大小

3、能夠相對的加快瀏覽器的加載速率

CSS學起來並不難,但在大型項目中,就變得難以管理,特別是不同的人在CSS書寫風格上稍有不同,團隊上就更加難以溝通,爲此總結了一些如何實現高效整潔的CSS代碼原則。

1、使用reset但非全局reset

不同瀏覽器元素的默認屬性有所不同,使用reset可重置瀏覽器元素的一些默認屬性,以達到瀏覽器的兼容。但需要注意的是,請不要使用全局reset:

*{margin:0;padding:0;}

這不僅僅因爲它是緩慢和低效率的方法,而且還會導致一些不必要的元素也重置了外邊距和內邊距。在此建議參考YUI Reset和Eric Meyer的做法。reset並不是一成不變的,具體還需要根據項目的不同需求做適當的修改,以達到瀏覽器的兼容和操作上的便利性。我使用的reset如下:

@charset "utf-8";
/* 
	@名稱: reset
	@功能: 重設瀏覽器默認樣式
*/
/* 防止用戶自定義背景顏色對網頁的影響,添加讓用戶可以自定義字體 */
html {
	color:black;
	background:white;
}
/* 內外邊距通常讓各個瀏覽器樣式的表現位置不同 */
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td,hr,button,article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section {
	margin:0;
	padding:0;
}
/* 要注意表單元素並不繼承父級 font 的問題 */
body,button,input,select,textarea {
	font:12px/120% SimSun,arial,sans-serif;
}
input,select,textarea {
	font-size:100%;
}
/* 去掉各Table  cell 的邊距並讓其邊重合 */
table {
	border-collapse:collapse;
	border-spacing:0;
}
/* IE bug fixed: th 不繼承 text-align*/
th {
	text-align:inherit;
}
/* 去除默認邊框 */
fieldset,img {
	border:0;
}
/* ie6 7 8(q) bug 顯示爲行內表現 */
iframe {
	display:block;
}
/* 去掉 firefox 下此元素的邊框 */
abbr,acronym {
	border:0;
	font-variant:normal;
}
/* 一致的 del 樣式 */
del {
	text-decoration:line-through;
}
address,caption,cite,code,dfn,em,th,var {
	font-style:normal;
	font-weight:500;
}
/* 去掉列表前的標識, li 會繼承 */
ol,ul {
	list-style:none;
}
/* 對齊是排版最重要的因素, 別讓什麼都居中 */
caption,th {
	text-align:left;
}
/* 來自yahoo, 讓標題都自定義, 適應多個系統應用 */
h1,h2,h3,h4,h5,h6 {
	font-size:100%;
	font-weight:500;
}
q:before,q:after {
	content:'';
}
/* 統一上標和下標 */
sub, sup {
	font-size:75%;
	line-height:0;
	position:relative;
	vertical-align:baseline;
}
sup {
	top:-0.5em;
}
sub {
	bottom:-0.25em;
}
/* 讓鏈接在 hover 狀態下顯示下劃線 */
a:hover {
	text-decoration:underline;
}
/* 默認不顯示下劃線,保持頁面簡潔 */
ins,a {
	text-decoration:none;
}

2、良好的命名習慣

無疑亂七八糟或者無語義命名的代碼,誰看了都會抓狂。就像這樣的代碼:

.aaabbb{margin:2px;color:red;}

我想即使初學者,也不至於會在實際項目中如此命名一個class。

3、代碼縮寫

CSS代碼縮寫可以提高寫代碼的速度,精簡代碼量。在CSS裏面有不少可以縮寫的屬性,包括margin,padding,border,font,background和顏色值,如果學會了代碼縮寫,原本這樣的代碼:

p{
	font-family:Arial,Helvetica,sans-serif;
	font-size:1.2em;
	line-height:1.4em;
	padding-top:5px;
	padding-bottom:10px;
	padding-left:5px;
}

就可以縮寫爲:

p{
	font:1.2em/1.4em Arial,Helvetica,sans-serif;
	padding:5px 0 10px 5px;
}

具體的CSS縮寫規則,請點擊下面的地址:

http://blog.csdn.net/athrunzero/article/details/7388102

4、利用CSS的繼承

如果頁面中父元素的多個子元素使用相同的樣式,那最好把他們相同的樣式定義在其父元素上,讓他們繼承這些CSS樣式。這樣你可以很好的維護你的代碼,並且還可以減少代碼量。那麼本來這樣的代碼:

#content li{color:red;}
#content p{color:red;}
#content h1{color:red;}

就可以簡寫成:

#content{color:red;}

5、使用多重選擇器

你可以合併多個CSS選擇器爲一個,如果他們有共同的樣式的話。這樣做不但代碼簡潔且可爲你節省時間和空間。如:

h1{ font-family:Arial, Helvetica, sans-serif; font-weight:normal; }
h2{ font-family:Arial, Helvetica, sans-serif; font-weight:normal; }
h3{ font-family:Arial, Helvetica, sans-serif; font-weight:normal; }
/*上面三個樣式可以合併*/
h1, h2, h3{ font-family:Arial, Helvetica, sans-serif; font-weight:normal;}

6、適當的代碼註釋

代碼註釋可以讓別人更容易讀懂你的代碼,且合理的組織代碼註釋,可使得結構更加清晰。

你可以選擇做的樣式表的開始添加目錄:

/*------------------------------------  
     1. Reset  
     2. Header  
     3. Content  
     4. SideBar  
     5. Footer  
----------------------------------- */

如此你代碼的結構就一目瞭然,你可以容易的查找和修改代碼。

而對於代碼的主內容,也應適當的加以劃分,甚至在有必要的地方在對代碼加以註釋說明,這樣也有利於團隊開發:

/***  Header  ***/   
#header{ height:145px; position:relative; }  
#header h1{ width:324px; margin:45px 0 0 20px; float:left;  height:72px;}  
/***  Content  ***/  
#content{ background:#fff; width:650px; float:left; min-height:600px; overflow:hidden;}  
#content h1{color:#F00}/* 設置字體顏色 */  
#content .posts{ overflow:hidden; }  
#content .recent{ margin-bottom:20px; border-bottom:1px solid #f3f3f3; position:relative; overflow:hidden; }  
/***  Footer  ***/  
#footer{ clear:both; padding:50px 5px 0; overflow:hidden;}  
#footer h4{ color:#b99d7f; font-family:Arial, Helvetica, sans-serif; font-size:1.1em; } 

7、給你的CSS代碼排序

如果代碼中的屬性都能按照字母排序,那查找修改的時候就能更加快速:

/*** 樣式屬性按字母排序 ***/  
div{  
    background-color:#3399cc;  
    color:#666;  
    font:1.2em/1.4em Arial, Helvetica, sans-serif;  
    height:300px;  
    margin:10px 5px;  
    padding:5px 0 10px 5px;  
    width:30%;  
    z-index:10;  
}

8、保持CSS的可讀性

書寫可讀的CSS將會使得更容易查找和修改樣式。對於以下兩種情況,哪種可讀性更高,我想不言而明。

/*** 每個樣式屬性寫一行 ***/  
div{  
    background-color:#3399cc;  
    color:#666;  
    font: 1.2em/1.4em Arial, Helvetica, sans-serif;  
    height:300px;  
    margin:10px 5px;  
    padding:5px 0 10px 5px;  
    width:30%;  
    z-index:10;  
}  
/*** 所有的樣式屬性寫在同一行 ***/  
div{ background-color:#3399cc; color:#666; font: 1.2em/1.4em Arial, Helvetica, sans-serif;  height:300px; margin:10px 5px; padding:5px 0 10px 5px; width:30%; z-index:10; } 

當對於一些樣式屬性較少的選擇器,我會寫到一行:

/*** 選擇器屬性少的寫在同一行 ***/  
div{ background-color:#3399cc; color:#666;}

對於這個規則並非硬性規定,但無論採用哪種寫法,我的建議是始終保持代碼一致。屬性多的分行寫,屬性少於3個可以寫一行。

9、選擇更優的樣式屬性值

CSS中有些屬性採用不同的屬性值,雖然達到的效果差不多,當性能上卻存在着差異,如:

區別在於border:0把border設爲0px,雖然在頁面上看不見,但按border默認值理解,瀏覽器依然對border-width/border-color進行了渲染,即已經佔用了內存值。

而border:none把border設爲“none”即沒有,瀏覽器解析“none”時將不作出渲染動作,即不會消耗內存值。所以建議使用border:none;

同樣的,display:none隱藏對象瀏覽器不作渲染,不佔用內存。而visibility:hidden則會。

10、使用<link>代替@import

首先,@import不屬於XHTML標籤,也不是Web標準的一部分,它對於較早期的瀏覽器兼容也不高,並且對於網站的性能有某些負面的影響。所以,請避免使用@import

11、使用外部樣式表

這個原則始終是一個很好的設計實踐。不單可以更易於維護修改,更重要的是使用外部文件可以提高頁面速度,因爲CSS文件都能在瀏覽器中產生緩存。內置在HTML文檔中的CSS則會在每次請求中隨HTML文檔重新下載。所以,在實際應用中,沒有必要把CSS代碼內置在HTML文檔中。

12、避免使用CSS表達式(Expression)

CSS表達式是動態設置CSS屬性的強大(但危險)方法。Internet Explorer從第5個版本開始支持CSS表達式。下面的例子中,使用CSS表達式可以實現隔一個小時切換一次背景顏色:

background-color: expression( (new Date()).getHours()%2 ? "#B8D4FF" : "#F08A00" );

如上所示,expression中使用了JavaScript表達式。CSS屬性根據JavaScript表達式的計算結果來設置。

表達式的問題就在於它的計算頻率要比我們想象的多。不僅僅是在頁面顯示和縮放時,就是在頁面滾動、乃至移動鼠標時都會要重新計算一次。給CSS表達式增加一個計數器可以跟蹤表達式的計算頻率。在頁面中隨便移動鼠標都可以輕鬆達到10000次以上的計算量。

如果必須使用CSS表達式,一定要記住它們要計算成千上萬次並且可能會對你頁面的性能產生影響。所以,在非不得已,請避免使用CSS表達式。

13、代碼壓縮

當你決定把網站項目部署到網絡上,那你就要考慮對CSS進行壓縮,出去註釋和空格,以使得網頁加載得更快。壓縮代碼,可以採用一些工具,如YUI Compressor利用它可精簡CSS代碼,減少文件大小,以獲得更高的加載速度。


PS:博客搬家了,以後不再 CSDN 更新了,見諒。最新博客地址:http://www.cnblogs.com/yjzhu/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章