Web前端:11個(gè)讓你代碼整潔的原則
寫Web頁面就像我們建設(shè)房子一樣,地基牢固,房子才不會(huì)倒。同樣的,我們制作Web頁面也一樣,一個(gè)良好的HTML結(jié)構(gòu)是制作一個(gè)美麗的網(wǎng)站的開始,同樣的,良好的CSS只存在同樣良好的HTML中,所以一個(gè)干凈的,語義的HTML的優(yōu)點(diǎn)很多,那么平時(shí)制作中,我們做到了這一點(diǎn)嗎?我們一起來看一張圖片:
上圖展示了兩段代碼,我想大家都只會(huì)喜歡***種,我們先不說其語義,至少他的結(jié)構(gòu)讓我們看上去清爽,而第二種呢?一看就是糟糕的代碼的代碼,讓人討厭的代碼。那么要怎么樣才能寫出一個(gè)好的代碼,整潔的代碼呢?下面我們就從以下十一個(gè)方面一起來學(xué)習(xí),只要大家以后在寫代碼的時(shí)候能堅(jiān)持下面的十二個(gè)原則,保準(zhǔn)你的代碼質(zhì)量能上去,而且你寫的代碼會(huì)人見人愛。
一、DOCTYPE的聲明
如果我們想做好一件事情,首先要知道我們有哪些權(quán)利去做,就如“DOCTYPE”的聲明,我們沒有必要去討論是否使用HTML4.01或者XHTML1.0或者說現(xiàn)在的HTML5都提供了嚴(yán)格版本或者過渡版本,這些都能很好的支持我們寫的代碼:
由于我們現(xiàn)在的布局不需要table布局也能做出很好的布局,那么我們就可以考慮不使用過渡型而使用嚴(yán)格型的“DOCTYPE”,為了向后兼容,我建議使用HTML5的聲明模式:
- <!DOCTYPE HTML>
- <html lang="en-US">
如果想了解更多這方面的知識(shí),可以點(diǎn)擊:
W3C: Recommended DTDs to use in your Web document
Fix Your Site With the Right DOCTYPE!
No more Transitional DOCTYPEs, please
二、字符集和編碼字符
在每個(gè)頁面的開始中,我們都在<head>中設(shè)置了字符集,我們這里都是使用“UTF-8”
- <meta charset="UTF-8" />
而且我們?cè)谄綍r(shí)寫頁面中時(shí),時(shí)常會(huì)碰到"&"這樣的符號(hào),那么我們不應(yīng)該直接在頁面這樣寫“&”:
我們應(yīng)該在代碼中使用字符編碼來實(shí)現(xiàn),比如說“&”我們?cè)诖a中應(yīng)該使用“&”來代替它。
如果想了解更多這方面的知識(shí),可以點(diǎn)擊:
A tutorial on character code issues
三、正確的代碼縮進(jìn)
在頁面編輯中,代碼的縮進(jìn)有沒有正確,他不會(huì)影響你網(wǎng)站的任何功能,但要是你沒有一個(gè)規(guī)范的縮進(jìn)原則,讓讀你代碼的人是非常的生氣,所以說正確的代碼縮進(jìn)可以增強(qiáng)你的代碼可讀性。標(biāo)準(zhǔn)程序的縮進(jìn)應(yīng)該是一個(gè)制表符(或幾個(gè)空格),形像一點(diǎn)的我們來看下文章開頭那張圖,或者一起來看下面展示的這張圖,你看后就知道以后自己的代碼要怎么樣書寫才讓人看了爽:
不用說,大家都喜歡下面的那種代碼吧。這只是一個(gè)人的習(xí)慣問題,不過建議從開始做好,利人利已。有關(guān)于這方面的介紹,大家還可以參考:Clean up your Web pages with HTML TIDY
四、外鏈你的CSS樣式和Javascript腳本
頁面中寫入CSS樣式有很多種方法,有些直接將樣式放入頁面的“<head>”中,這將是一個(gè)很不好的習(xí)慣,因?yàn)檫@樣不僅會(huì)搞亂我們的標(biāo)記,而且這些樣式只適合這一個(gè)HTML頁面。所以我們需要將CSS單獨(dú)提出,保存在外部,這樣后面的頁面也可以鏈接到這些樣式,如果你頁面需要修改,我們也只需要修改樣式文件就可以。正如下圖所示:
上面我們所說的只是樣式,其實(shí)javascript腳本也和CSS樣式是同一樣的道理。圖文并說,我最終想表達(dá)的意思是“在制作web頁面中,盡量將你的CSS樣式和javascript腳本單獨(dú)放在一個(gè)文件中,然后通過鏈接的方式引用這些文件,這樣做的***好處是,方便你的樣式和腳本的管理與修改。”
五、正確的標(biāo)簽嵌套
我們?cè)趯慔TML時(shí)總是需要標(biāo)簽的層級(jí)嵌套來幫我們完成HTML的書寫,但這些HTML的嵌套是有一定的規(guī)則的,如果要細(xì)說的話,我們可能要用幾個(gè)章節(jié)來描述,那么我今天這里要說的是,我們?cè)趯慔TML時(shí)不應(yīng)該犯以下這樣的超級(jí)錯(cuò)誤:
上圖的結(jié)構(gòu)我們是常見的,比如說首頁的標(biāo)題,那么我們就應(yīng)該注意了,不能把“<h1>”放在“<a>”標(biāo)簽中,換句話說,就是不能把塊元素放在行內(nèi)(inline)元素中。上面只是一個(gè)例子,只是希望大家在平時(shí)的制作中不應(yīng)該犯這樣的超級(jí)錯(cuò)誤。
#p#
六、刪除不必要的標(biāo)簽
首先我們一起來看一個(gè)實(shí)例的截圖:
上圖明顯是一個(gè)導(dǎo)航菜單的制作,在上圖的實(shí)例中:有一個(gè)“div#topNav”包住了列表“ul#bigBarNavigation”,而“div”和“ul”列表都是塊元素,加上“div”此處用來包“ul”根本就沒有起到任何作用。雖然“div”的出現(xiàn)給我們制作web頁面帶來了極大的好處,但我們也沒有必要到處這樣的亂用,不知道大家平時(shí)有沒有注意這樣的細(xì)節(jié)呢?我是犯這樣的錯(cuò)誤,如果你也有過這樣的經(jīng)歷,那么從今天開始,從現(xiàn)在開始,我們一起努力來改正這樣的錯(cuò)誤。
有關(guān)于如何正確的使用標(biāo)簽,大家感興趣的話可以點(diǎn)擊:Divitis: what it is, and how to cure it.
七、使用更好的命名
這里所說的命名就是給你的頁面中相關(guān)元素定義類名或者是ID名,很多同學(xué)都有這類的習(xí)慣,比如說有一個(gè)元素字體是紅色的,給他加上“red”,甚至布局都寫“left-sidebar”等,但是你有沒有想過,如果這個(gè)元素定義了“red”后,過幾天客戶要求使用“藍(lán)色”呢?或者又說,那時(shí)的“left-sidebar”邊欄此時(shí)不想放在左邊了,而是想放在右邊,那么這樣一來我們前面的命名可以說是一點(diǎn)意義都沒有了,正如下面的一個(gè)圖所示:
那么定義一個(gè)好的名就很得要了,不但自己能看懂你的代碼,而且別人也能輕松讀懂你的代碼,比如說一個(gè)好的類名和ID名“mainNav”、“subNav”、“footer”等,他能描述所包含的事情。不好的呢,比如前面所說的。
如果想了解更多這方面的知識(shí),可以點(diǎn)擊:
Standardizing CSS class and id names
CSS Tip #2: Structural Naming Convention in CSS
CSS coding: semantic approach in naming convention
CSS Naming Conventions and Coding Style
八、離開版本的CSS
我們?cè)谠O(shè)計(jì)菜單時(shí),有時(shí)要求所有菜單選項(xiàng)的文本全部大寫,大家平時(shí)是不是直接在HTML標(biāo)簽中就將他們?cè)O(shè)置成大寫狀態(tài)呢?如果是的話,我覺得不好,如果為了將來具有更好的擴(kuò)展性,我們不應(yīng)該在HTML就將他們?cè)O(shè)置為全部大寫,更好的解決方法是通過CSS來實(shí)現(xiàn):
九、定義<body>的類名或ID名
大家平時(shí)制作web頁面時(shí)不知道有沒有碰到這樣的問題,就是整站下來,使用了相同的布局和結(jié)構(gòu),換句話說,你在頁面的布局上使用了相同的結(jié)構(gòu),相同的類名,但是突然你的上級(jí)主管說應(yīng)客戶的需求,有一個(gè)頁面的布局需要邊欄和主內(nèi)容對(duì)換一下。此時(shí)你又不想為了改變一下布局而修改整個(gè)頁面的結(jié)構(gòu),此時(shí)有一個(gè)很好的解決辦法,就是在你的這個(gè)頁面中的“<body>”中定義一個(gè)特殊的類名或ID名,這樣來你就可以輕松的達(dá)到你所要的需求。這樣的使用,不知道大家使用過沒有:
給“<body>”定義獨(dú)特的類和ID名稱是非常強(qiáng)大的,不僅僅是為了像上面一樣幫你改變布局,最主要的是有時(shí)他能幫你實(shí)現(xiàn)頁面中的某一部分達(dá)到特殊效果,而又不影響其它頁面的效果。為什么有這樣的功能,不用我說我想大家都是知道的。因?yàn)槊總€(gè)頁面的內(nèi)容都是“<body>”的后代元素。
如果想了解更多這方面的知識(shí),可以點(diǎn)擊:
ID Your Body For Greater CSS Control and Specificity
Case study: Re-using styles with a body class
十、驗(yàn)證你的代碼
人不免會(huì)出錯(cuò),我們編寫代碼的時(shí)候也是一樣的,你有時(shí)候總會(huì)小寫或多寫,比如說忘了關(guān)閉你的元素標(biāo)簽,不記得寫上元素必須的屬性,雖然有一些錯(cuò)誤不會(huì)給你帶來什么災(zāi)難性的后果,但也不免會(huì)給你帶來你無法意估的錯(cuò)誤。所以建議您寫完代碼的時(shí)候去驗(yàn)證你一下你的代碼。驗(yàn)證后的代碼總是比不驗(yàn)證的代碼強(qiáng):
為一有效的驗(yàn)證你的代碼,我們可以使用相關(guān)的工具或者瀏覽器的插件來幫助我們完成。如果你的代碼沒有任何錯(cuò)誤,W3C驗(yàn)證工具會(huì)在你們面前呈現(xiàn)綠色的文字,這樣讓你是無比的激動(dòng)人心,因?yàn)樵俅巫C明了你寫的代碼經(jīng)得起W3C的標(biāo)準(zhǔn)。
如果想了解更多這方面的知識(shí),可以點(diǎn)擊:
The W3C Markup Validation Service
Free Site Validator (checks entire site, not just one page)
十一、邏輯順序
這是一個(gè)很少見的錯(cuò)誤情況,因?yàn)槲蚁氪蠹覍戫撁娑疾粫?huì)把邏輯順序打亂,換句話說,如果可能的話,讓你的網(wǎng)站具有一個(gè)先后邏輯順序是***的,比如說先寫頁頭,在寫頁體,***寫頁腳。當(dāng)然有時(shí)也會(huì)碰到特殊情況,如何頁腳部分在于我們代碼的邊欄以上,這可能是因?yàn)樗钸m合你的網(wǎng)站設(shè)計(jì)需求,這樣或許是可以理解的,但是如果你有別的方式實(shí)現(xiàn),我們都應(yīng)該把頁腳是放在一個(gè)頁面的***,然后在通過特定的技術(shù)讓它達(dá)到你的設(shè)計(jì)需求:
上面我們一起討論了多個(gè)如何讓你開始寫一個(gè)整潔的HTML代碼。從一個(gè)項(xiàng)目的開始,這一切都是非常容易的,但是如果需要你去修復(fù)一個(gè)現(xiàn)有的代碼,那多少都會(huì)有一定的難度。上面說這么多主要是告訴您將要如何學(xué)習(xí)編寫一個(gè)良好的、整潔的HTML代碼,并且一直堅(jiān)持這樣的編寫。希望讀完這篇文章垢,在你的下一個(gè)項(xiàng)目中,你能從頭開始,堅(jiān)持寫一個(gè)整潔的HTML代碼。希望大家喜歡這樣的教程。***在結(jié)束此教程之前,讓我們大家一起來感謝Chris Coyier給我們帶來這么好的經(jīng)驗(yàn)之談——《12 Principles For Keeping Your Code Clean》如果你有什么好的經(jīng)驗(yàn),希望與我們一起分享。
原文鏈接:http://kb.cnblogs.com/page/148238/
【編輯推薦】