Home » 教學 » 【CSS 教學】前端工程師必看、HTML優化、13個高效整潔技巧

【CSS 教學】前端工程師必看、HTML優化、13個高效整潔技巧

CSS-Code-Snippets2
目前有寫前端語言的設計師絕大部分都會推薦用DIV+CSS來佈局進行網頁設計比較有利SEO(Search Engine Optimization搜索引擎優化)。隨之,問題就來了!沒錯~懂得用DIV+CSS來佈局進行網頁設計比較有利SEO,但是很多使用DIV+CSS來佈局之後的代碼竟比TABLE排版長的很,這樣當然是沒有效率的學習這個前端語言。




前言

CSS只要有點基礎的話,不難!但在大型專案中,就變得難以管理,特別是不同的人在CSS書寫風格上稍有不同,團隊上就更加難以溝通,為此總結了一些如何實現高效整潔的CSS代碼原則:





貼心小提醒
*紅色字體為較無效率的做法
*藍色字體為較有效率的做法
*綠色字體為註解

1.使用Reset但並非全域Reset

筆者在編寫前端語言時經常用到的狀況,瀏覽器百百種,元素的預設屬性也都不同,然而使用Reset重置流覽器元素的一些預設屬性,以讓各家瀏覽器盡量相容。
但需要注意的是,請不要使用全域Reset!
*{ margin:0; padding:0; }

這不僅僅因為它是緩慢和低效率的方法,而且還會導致一些不必要的元素也重置了外邊距和內邊距。以下提供較全域Reset更有效率做法。

/**
清除內外邊距
**/

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 ‘OO正黑體’,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; }


2.良好的命名習慣

可能是筆者在生活上的一些小強迫症,導致筆者不喜歡把程式碼亂命名一通,有好有壞啦。
無疑亂七八糟或者無語義命名的代碼,我看了會有點小抓狂。如下代碼:
.aaabb{margin:2px;color:red;}
我想即使是初學者,也不至於會在實際項目中如此命名一個class,但有沒有想過這樣的代碼同樣是很有問題的:
<h1>Myname is <span class=”red blod”>Wiky</span></h1>

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

這樣的命名就會很牙給,同樣的命名為.leftBar的側邊欄如果需要修改成右側邊欄也會很麻煩。所以,請不要使用元素的特性(顏色,位 置,大小等)來命名一個class或id,您可以選擇意義的命名 如:#navigation{…},.sidebar{…},.postwrap{…}
這樣,無論你如何修改定義這些class或id的樣式,都不影響它跟HTML元素間的聯繫。

另外還有一種情況,一些固定的樣式,定義後就不會修改的了,那你命名時就不用擔憂剛剛說的那種情況,如:
.alignleft{float:left;margin-right:20px;}
.alignright{float:right;text-align:right;margin-left:20px;}
.clear{clear:both;text-indent:-9999px;}
那麼對於這樣一個段落
<pclass=”alignleft”>我是一個段落!</p>

如果需要把這個段落由原先的左對齊修改為右對齊,那麼只需要修改className
如:alignright就可以了。


3.代碼縮寫

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


4.利用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; } /* 這樣他們才知誰是老大 */


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:72px;}
#header h1{ width:100%; margin:0 auto; 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; }
/* 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代碼排序

讓自己在寫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;}
對於這個規則並非硬性規定,但無論您採用哪種寫法,建議保持代碼一致。屬性多分行寫,屬性少可以寫一行。


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》。所以,請避免使用@import,筆者推薦多的使用<Link>也是目前主流的寫法。


11.使用外部樣式表

筆者依直覺的使用這方法是一絕,但是好像常看到很多身邊也在寫前端語言的使用者,把樣式表寫在HTML頁裡面,看了把HTML頁裡面寫成那麼攏長看了就煩躁,筆者的一點點小強迫症就快要發作了!

這個原則始終是一個很好的設計實踐。不僅易於維護修改,更重要的是使用外部檔可以提高頁面速度,因為CSS檔都能在流覽器中產生緩存。內置在 HTML文檔中的CSS則會在每次請求中隨HTML文檔重新下載,這樣會拖垮那幾一兩秒甚至0.0幾秒的速度。在實際應用中,真的沒有必要把CSS代碼撰寫在HTML文檔中:
<style type=”text/css” >#container{ .. }#sidebar{ .. }</style>

<li style=”font-family:Arial, helvetica, sans-serif; color:#666; ” >
而是使用<link>導入外部樣式表:
<link rel=”stylesheet” type=”text/css” href=”css/styles.css”/>


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代碼,減少檔大小,以獲得更高的載入速度


結語

筆者覺得這是一篇算是蠻深度在於寫前端語言的一些小知識,不管是用在任何語言上都需要使用高效整潔的方法成能到達那片藍海,很受用,經過筆者稍加整理後來這邊分享此篇文章。



延伸閱讀