如何讓CSS更加簡潔的方法

致力於讓你的CSS檔案優化是設計師一個重要的課題。

DIV+CSS的設計是一種習慣的養成,設計師在逐漸養成撰寫html的過程中,會養成不一樣的css布局習慣,如果在一開始沒有發覺部分錯誤習慣可能導致網站效能、SEO排名以及不同瀏覽器的支援性問題,將來可能會面臨需要大幅度修改的窘境。

因此定期去檢視自己的DIV+CSS習慣,是一個良好的設計師應該要注意的事項。當你不忙的時候,不妨隨時為你的習慣進行檢查,那會讓作品更加進步。接下來我們來看看幾個讓CSS更簡潔的方法。

那麼為什麼要使用DIV+CSS來撰寫網頁呢?

有很多理由,其中一個理由是使用DIV+CSS佈局進行網頁設計比較有利SEO。理由建議你參考另一篇文章

CSS如何影響SEO的排名

接下來我們來看一些如何實現高效整潔的CSS代碼原則:

1、組織你的CSS樣式表

合理的網頁 CSS 編碼與組織技巧,能夠説明你更有效率地設計出更清晰高效的代碼,樣式表大小的縮減還能減少網頁下載的時間。儘管我們會利用各種 CSS 的開發工具,比如 Topstyle、styleMaster、CSSTidy 等軟體,這些工具可以幫助我們對css檔案撰寫的更整齊,不過,隨寫、隨看、隨改仍然是我們最習慣的設計方式,在一開始的時候,通常CSS樣式表還有點層次,等到後面這里加一點,那里加一點,然後為了滿足各種瀏覽器,css檔案不免就越來越亂。因此可以用簡單的方式來進一步組織你的css檔案。

a.同一個元素 (和它的子元素) 的規則都放一起。那麼如果需要查閱頁面中某個元素究竟受哪些規則影響的時候,就不必在整個樣式表中翻來翻去了。

b.用不同檔案區分同樣的元素特性,也就是把描述某些特性的規則放到一處,把描述另一些特性的放到另一處,比如說關於顏色的定義,放到 color.css 檔中,描述字體的定義,放到 font.css 中,描述佈局的定義,放到 layout.css 中,這也能讓你的樣式表結構清晰,方便理解。最大的優點是,如果你希望換一套配色方案,可以只修改一下 color.css,完全不必擔心其他的規則是否會影響頁面的顏色。不過這種方法要注意不要讓css檔案分得太細,導致需要載入過多的檔案,影響網頁讀取的效率。

2、養成良好的命名習慣

亂七八糟或者無語義命名的css代碼,是造成維護上不便的第一個問題。就像下面的代碼:

.abcdd{padding:1px;color:blue;}

我想這樣隨意命名,即使是原來的撰寫者,在經過一段時間後,也會覺得難以迅速掌握。
另外,下面這樣的寫法同樣是很有問題的:

</pre>
<h1>Her name is <span class="blue blod">Joanne</span></h1>
<pre>

問題在於如果你需要把所有原本藍色的字體改成紅色,那修改後就樣式就會變成:

.blue{color:red;}

這樣的命名就會很讓人費解。

所以,請不要使用元素的特性(顏色,位 置,大小等)來命名一個class或id,您可以選擇意義的命名 如:#navigation{…},.sidebar{…},.postwrap{…}

這樣,無論你如何修改定義這些class或id的樣式,都不影響它跟HTML元素間的聯繫。

3、使用Reset但並非全域Reset

不同瀏覽器元素的預設屬性有所不同,使用Reset可重置流覽器元素的一些預設屬性,以達到瀏覽器的相容。但需要注意的是,請不要使用全域Reset:

<strong>*{ margin:0; padding:0; }</strong>

這種方式是一種比較緩慢和低效率的方法,而且還會導致一些不必要的元素也重置了外邊距和內邊距。在此建議採用以下的做法。

/** 清除內外邊距 **/
body, h1, h2, h3, h4, h5, h6, hr, p,
blockquote,              /** structural elements 結構元素 **/
dl, dt, dd, ul, ol, li,             /** list elements 清單元素 **/
pre,           /** text formatting elements 文本格式元素 **/
form, fieldset, legend, button, input, textarea,          /** form elements 表單元素 **/
th, td,            /** table elements 表格元素 **/
img            /** img elements 圖片元素 **/
{border:medium none;margin: 0;padding: 0;}
/** 設置預設字體 **/
body,button, input, select, textarea {
  font: 12px/1.5 '宋體',tahoma, Srial, helvetica, sans-serif;
}
h1, h2, h3, h4, h5, h6 { font-size: 100%; }
em{font-style:normal;}
/** 重置清單元素 **/
ul, ol { list-style: none; }
/** 重置超連結元素 **/
a { text-decoration: none; color:#333;}
a:hover { text-decoration: underline; color:#F40; }
/** 重置圖片元素 **/
img{ border:0px;}
/** 重置表格元素 **/
table { border-collapse: collapse; border-spacing: 0; }

4、代碼縮寫

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

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

就可以縮寫為:

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

5、利用CSS繼承

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

#container li{ font-family:Georgia, serif; }
#container p{ font-family:Georgia, serif; }
#container h1{font-family:Georgia, serif; }

就可以簡寫成:

#container{ font-family:Georgia, serif; }

6、使用多重選擇器

你可以合併多個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; }

7、適當的代碼注釋

代碼注釋可以讓別人更容易讀懂你的代碼,且合理的組織代碼注釋,可使得結構更加清晰。你可以選擇做的樣式表的開始添加目錄:

/*------------------------------------
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; }

8、保持CSS的可讀性

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

/*** 每個樣式屬性寫一行 ***/
div{
background-color:#3399cc;
color:#666;
height:300px;
margin:10px 5px;
}
/*** 所有的樣式屬性寫在同一行 ***/
div{ background-color:#3399cc; color:#666; height:300px; margin:10px 5px;}

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

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

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

9、給你的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;
}

10、利用多個 class 和多元選擇符

一個 HTML 元素可以屬於多個類,比如這樣:

</pre>
<div class="total negative">利用多個 class 和多元選擇符</div>
<pre>

將不同的類別css元素分開撰寫,然後疊加在上面:

.total {font-weight: bold;}
.negative {color: red;}

這種特性有時能夠讓你很靈巧地實現一些功能,即縮短了 HTML 代碼,又清晰了 CSS 規則。

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

CSS中有些屬性採用不同的屬性值,雖然達到的效果差不多,當性能上卻存在著差異,如
區別在於border:0把border設為0px,雖然在頁面上看不見,但按border預設值理解,流覽器依然對border-width/border-color進行了渲染,即已經佔用了記憶體值。
而border:none把border設為“none”即沒有,流覽器解析“none”時將不作出渲染動作,即不會消耗記憶體值。所以建議使用border:none;
同樣的,display:none隱藏物件流覽器不作渲染,不佔用記憶體。而visibility:hidden則會。

12、使用代替@import

首先,@import不屬於XHTML標籤,也不是Web標準的一部分,它對於較早期的流覽器相容也不高,並且對於網站的性能有某些負面的影響。具體可以參考《高性能網站設計:不要使用@import》。所以,請避免使用@import

13、將 CSS 和 JavaScript 放在外部文件中

將 CSS 和 JavaScript 放在外部文件中引用,不僅減低單個網頁的尺寸,而且意味著其他網頁也可以共用這些代碼。
這個原則始終是一個很好的設計實踐。不單可以更易於維護修改,更重要的是使用外部檔可以提高頁面速度,因為CSS檔都能在瀏覽器中產生緩存。內置在 HTML文檔中的CSS則會在每次請求中隨HTML文檔重新下載。所以,在實際應用中,沒有必要把CSS代碼內置在HTML文檔中。

14、避免使用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運算式。

15、代碼壓縮

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