海楓科技前端編碼風(fēng)格規(guī)范之Html規(guī)范

原則

1.規(guī)范。保證代碼規(guī)范,趨html5,遠(yuǎn)xhtml,保證結(jié)構(gòu)表現(xiàn)行為相互分離。
2.簡潔。保證代碼的最簡化,避免多余的空格、空行,保持代碼的語義化,盡量使用具有語意的元素,避免使用樣式屬性和行為屬性。任何時(shí)候都要用盡量簡單、盡量少的元素解決問題。

語義化:比如head元素來定義頭部標(biāo)題,p元素來定義文字段落,用a元素來定義鏈接錨點(diǎn)等等。
有根據(jù)有目的地使用html元素,對于可訪問性、代碼重用、代碼效率來說意義重大。

3.實(shí)用。遵循標(biāo)準(zhǔn),但是不能以犧牲實(shí)用性為代價(jià)。
4.忠誠。選擇一套規(guī)范,然后始終遵循。不管代碼由多少人參與,都應(yīng)該看起來像一個(gè)人 的一樣。

語法

1.小寫。html標(biāo)簽、html屬性全部小寫。
2.嵌套。所有元素必須正確嵌套。
3.閉合。雙標(biāo)簽必須閉合,單標(biāo)簽(自關(guān)閉標(biāo)簽)不閉合。
錯(cuò)誤書寫:

<br/> <hr/>

正確書寫:

<br> <hr>

注釋

1.詳盡注釋。解釋代碼解決問題、解決思路、是否為新方案等。
2.模塊注釋。建議不使用模塊結(jié)束注釋。
html文件中的注釋:

<div class="news"> 建議不使用結(jié)束模塊的注釋,因?yàn)檫@樣太丑,并且加重文件負(fù)荷

jsp文件中的注釋:

<%-- --%>

3.待辦注釋。

<%-- TODO:待辦事項(xiàng) --%>

文檔

1.文檔類型使用html5標(biāo)準(zhǔn)文檔類型,文檔類型聲明之前,不允許出現(xiàn)任何非空字符。不允許添加<meta>強(qiáng)制改變文檔模式。

推薦使用 HTML5 的文檔類型聲明 <!DOCTYPE html> (建議使用 text/html 格式的 HTML。避免使用 XHTML。XHTML 以及它的屬性,比如application/xhtml+xml 在瀏覽器中的應(yīng)用支持與優(yōu)化空間都十分有限)

2.html元素上指定lang屬性。顯示頁面語言,有助于語言合成工具來確定怎樣發(fā)音,以及翻譯工具決定使用的規(guī)則,等等。
3.指定明確的字符編碼。讓瀏覽器輕松、快速的確定適合網(wǎng)頁內(nèi)容的渲染方式。
4.IE兼容模式。Internet Explorer支持使用兼容性<meta>標(biāo)簽來指定使用什么版本的IE來渲染頁面。如果不是特殊需要,通常通過edge mode來通知IE使用最新的兼容模式。

<meta http-equiv="X-UA-Compatible" content="IE=Edge">

5.head部分的順序:a.<meta>元素,b.<title>元素,c.樣式表。
6.可以使用IE條件注釋的方式兼容IE,但是不要添加額外的樣式表。
錯(cuò)誤的書寫:

`

`

正確的書寫:

<html class="ie8" lang="zh-cn"> <![endif] --> <html class="ie7" lang="zh-cn"> <![endif] -->

7.現(xiàn)在雙核瀏覽器:360、搜狗、QQ等瀏覽器可以讓網(wǎng)頁默認(rèn)使用webkit內(nèi)核渲染,代碼如下:

<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> //使用chrome內(nèi)核渲染。沒有則以最高版本IE渲染

屬性

1.雙引號(hào)屬性值,不要使用單引號(hào)。
2.省略type屬性。使用style、link、script,不用指定type屬性,因?yàn)閠ext/css和text/javascript分別是他們的默認(rèn)值。
3.省略Boolean屬性值。Boolean屬性不用添加取值,disabled,checked,selected等。
4.省略u(píng)rl類屬性資源協(xié)議頭。
5.屬性順序。html屬性應(yīng)該按照特定的順序出現(xiàn)以保證易讀性。class->id,name,自定義屬性->data-->src,for,type,href->title,alt->aria-,role。
6.自定義屬性。自定義屬性格式為hyphone-開頭,后跟原生屬性,如:

<div hyphone-id="id" hyphone-name="name" hyphone-width="width"></div>

7.多媒體元素添加替代屬性。圖像增加alt屬性,音視頻增加替代文字。

元素

1.避免冗余標(biāo)簽。
2.段落文字用<p>,避免使用<br>。
3.列表項(xiàng)放在<ul>、<ol>、<dl>,不要使用一系列的<div><p>
4.form button應(yīng)制定type類型,使用type="submit"、type="reset"type="button"。
5.table布局中有效使用<thead>、<tbody>、<th>??梢园?code><tfoot>放在<tbody>前提高加載速度。

格式

1.soft tab【2個(gè)英文格式的空格】。
2.嵌套縮進(jìn)。
3.刪除行位空格。
4.塊元素、列表元素、表格元素都放在新行。
5.inline元素視情況換行。
6.努力保持每行長度小于120列,如果太長可換行。
如果由于換行的空格引發(fā)了不可預(yù)計(jì)的問題,那將所有元素并入一行也是可以接受的,格式警告總好過錯(cuò)誤警告。
錯(cuò)誤書寫:

`
<img class="block-element" id="unicorn"
src="http://hyphoneit.com/images/img.jpg" alt="unicron,
rainbows, poop and stuff"

`

正確書寫:

`
<img
class="block-element"
id="unicorn"
src="http://hyphoneit.com/images/img.jpg"
alt="unicron, rainbows, poop and stuff"

`

腳本加載

出于性能考慮,腳本異步加載很關(guān)鍵。

一段腳本放置在<head>內(nèi),比如<script src="hyphone.js"></script>,其加載會(huì)一直阻塞DOM解析,直至它完全地加載和執(zhí)行完畢。這會(huì)造成頁面顯示的延遲。特別是一些重量級(jí)的腳本,對于用戶體驗(yàn)來說是一個(gè)巨大的影響。

異步加載腳本可緩解這種性能影響。

如果只需兼容IE10+,可將html5的async屬性加至腳本中,它可防止阻塞DOM的解析,甚至可以將腳本引用寫在<head>里也沒有影響。
如需兼容老舊的瀏覽器,實(shí)踐表明可使用動(dòng)態(tài)注入的腳本加載器??梢钥紤]使用yepnope或labjs。注入腳本的一個(gè)問題是:一直要等到CSS對象文檔已就緒,它們才開始加載(短暫滴再CSS加載完畢之后),這就對需要及時(shí)觸發(fā)的JS造成一定的延遲,多少也影響了用戶體驗(yàn)。

綜上所述,兼容老舊瀏覽器(IE9-)時(shí),應(yīng)遵循以下規(guī)則:

腳本引用寫在body結(jié)束標(biāo)簽之前,并帶上async屬性。
title,alt->aria-*,role。
>6.自定義屬性。自定義屬性格式為hyphone-開頭,后跟原生屬性,如:
>>>> <div hyphone-id="id" hyphone-name="name" hyphone-width="width"></div> >>

>7.多媒體元素添加替代屬性。圖像增加alt屬性,音視頻增加替代文字。

#元素
>1.避免冗余標(biāo)簽。
>2.段落文字用<p>,避免使用<br>。
>3.列表項(xiàng)放在<ul>、<ol>、<dl>,不要使用一系列的<div><p>。
>4.form button應(yīng)制定type類型,使用type="submit"、type="reset"type="button"。
>5.table布局中有效使用<thead>、<tbody>、<th>。可以把<tfoot>放在<tbody>前提高加載速度。

#格式
>1.soft tab【2個(gè)英文格式的空格】。
>2.嵌套縮進(jìn)。
>3.刪除行位空格。
>4.塊元素、列表元素、表格元素都放在新行。
>5.inline元素視情況換行。
>6.努力保持每行長度小于120列,如果太長可換行。
>如果由于換行的空格引發(fā)了不可預(yù)計(jì)的問題,那將所有元素并入一行也是可以接受的,格式警告總好過錯(cuò)誤警告。
>錯(cuò)誤書寫:
>>>> <img class="block-element" id="unicorn" >> src="http://hyphoneit.com/images/img.jpg" alt="unicron, >> rainbows, poop and stuff" >> > >>

>正確書寫:
>>>> <img >> class="block-element" >> id="unicorn" >> src="http://hyphoneit.com/images/img.jpg" >> alt="unicron, rainbows, poop and stuff" >> > >>

#腳本加載
>出于性能考慮,腳本異步加載很關(guān)鍵。
>>一段腳本放置在<head>內(nèi),比如<script src="hyphone.js"></script>,其加載會(huì)一直阻塞DOM解析,直至它完全地加載和執(zhí)行完畢。這會(huì)造成頁面顯示的延遲。特別是一些重量級(jí)的腳本,對于用戶體驗(yàn)來說是一個(gè)巨大的影響。

>異步加載腳本可緩解這種性能影響。
>>如果只需兼容IE10+,可將html5的async屬性加至腳本中,它可防止阻塞DOM的解析,甚至可以將腳本引用寫在<head>里也沒有影響。
如需兼容老舊的瀏覽器,實(shí)踐表明可使用動(dòng)態(tài)注入的腳本加載器。可以考慮使用yepnope或labjs。注入腳本的一個(gè)問題是:一直要等到CSS對象文檔已就緒,它們才開始加載(短暫滴再CSS加載完畢之后),這就對需要及時(shí)觸發(fā)的JS造成一定的延遲,多少也影響了用戶體驗(yàn)。

>綜上所述,兼容老舊瀏覽器(IE9-)時(shí),應(yīng)遵循以下規(guī)則:
>>腳本引用寫在body結(jié)束標(biāo)簽之前,并帶上async屬性。
這雖然在老舊瀏覽器中不會(huì)異步加載腳本,單它只阻塞了body結(jié)束標(biāo)簽之后的DOM解析,這就大大降低了其阻塞影響。而在現(xiàn)代瀏覽器中,腳本將在DOM解析器發(fā)現(xiàn)body尾部的script標(biāo)簽才進(jìn)行加載,此時(shí)加載屬于異步加載,不會(huì)阻塞DOM解析。

推薦書寫方法:

<!DOCTYPE html> <head> <link rel="stylesheet" href="hyphone.css"> </head> <body> <script src="hyphone.js" async></script> </body> </html>

關(guān)注點(diǎn)分離

理解web中如何和為何區(qū)分不同的關(guān)注點(diǎn),這很重要。這里的關(guān)注點(diǎn)主要指的是:信息(HTML結(jié)構(gòu))、外觀(CSS)和行為(JavaScript)。為了使它們成為可維護(hù)的干凈整潔的代碼,我們要盡可能的將它們分離開來。
嚴(yán)格地保證結(jié)構(gòu)、表現(xiàn)、行為三者分離,并盡量使三者之間沒有太多的交互和聯(lián)系。

即,盡量在文檔和模板中只包含結(jié)構(gòu)性的HTML;而將所有表現(xiàn)代碼,移入樣式表中;將所有動(dòng)作行為,移入腳本中。在此之外,為使得它們之間的聯(lián)系盡可能的小,在文檔和模板中也盡量少地引入樣式和腳本文件。
清晰的分層意味著:
1.不使用超過一到兩張樣式表( common.css, self.css
2.不使用超過一到兩個(gè)腳本(學(xué)會(huì)用合并腳本)
3.不使用行內(nèi)樣式(<style>.no-good{}</style>
4.不在元素上使用style屬性(<hr style="border-top:5px solid black">
5.不使用行內(nèi)腳本(<script>alert('no good')</script>
不使用表象元素(<b>、<u>、<center>、<font>
不使用表象class名(red,left,center

錯(cuò)誤書寫:

<!DOCTYPE html> <head> <link rel="stylesheet" href="base.css"> <link rel="stylesheet" href="grid.css"> <link rel="stylesheet" href="type.css"> <link rel="stylesheet" href="modules/user.css"> </head> <body> <h1 style="font-size:3rem"></h1> <b>海楓科技</b> <center>海楓科技</center> <script> alert('海楓科技'); </script> <div class="red">海楓科技</div> </body> </html>

正確書寫:

<!DOCTYPE html> <head> <link rel="stylesheet" href="common.css"> <link rel="stylesheet" href="modules/user.css"> </head> <body> <h1 class="title"></h1> <div class="sub-title">海楓科技</div> <span class="comment">海楓科技</span> <div class="important">海楓科技</div> <script src="hyphone.js" async><script> </body> </html>

HTML內(nèi)容至上

不要讓非內(nèi)容信息污染了你的HTML?,F(xiàn)在貌似有一種傾向:通過HTML來解決設(shè)計(jì)問題,這是顯然不對的。HTML就應(yīng)該只關(guān)注內(nèi)容。
HTML標(biāo)簽的目的,就是為了不斷地展示內(nèi)容信息。

不要引入一些特定的HTML結(jié)構(gòu)來解決一些視覺設(shè)計(jì)問題
不要講img元素當(dāng)做專門用來做視覺設(shè)計(jì)的元素

不推薦的書寫:

<span class="text-box"> <span class="square"></span> Hellow Hyphone! </span> .text-box > .square{ display: inline-block; width: 1rem; height: 1rem; background-color: red; }

推薦書寫:

<span class="text-box"> Hellow Hyphone! </span> .text-box:before{ content: ""; display: inline-block; width: 1rem; height: 1rem; background-color: red; }

圖片和SVG圖形能被引入到HTML中的唯一理由是它們呈現(xiàn)出了與內(nèi)容相關(guān)的一些信息。

不推薦的書寫:

<span class="text-box"> ![](square.svg) Hellow Hyphone! </span>

推薦書寫:

<span class="text-box"> Hellow Hyphone! </span> .text-box:before{ content: ""; display: inline-block; width: 1rem; height: 1rem; background: url(square.svg) no-repeat; background-size: 100%; }

命名規(guī)范

文件名稱命名統(tǒng)一用小寫的英文字母,不得包含漢字空格數(shù)字和特殊符號(hào)等,遵循兩個(gè)原則:1.方便理解;2.方便查找。
不推薦

產(chǎn)品.html index_%.html about-us.html 1.html

推薦

product.html index.html about.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,120評(píng)論 1 92
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,544評(píng)論 19 139
  • 1.行內(nèi)元素和塊級(jí)元素?img算什么?行內(nèi)元素怎么轉(zhuǎn)化為塊級(jí)元素? 行內(nèi)元素:和有他元素都在一行上,高度、行高及外...
    極樂君閱讀 2,601評(píng)論 0 20
  • 是的,無感。 貼一下我對那句口號(hào)「我們終將改變潮水的方向」的觀感: 有個(gè)故事說一個(gè)東方人和一個(gè)西方人同時(shí)見到一道壯...
    好生菜_春藤家長學(xué)院閱讀 1,004評(píng)論 0 0
  • 周六湖南衛(wèi)視的《頭號(hào)驚喜》,當(dāng)張柏芝笑顏如花出場的那一刻,真心覺得時(shí)光有種神奇的魔力。 前幾年,她負(fù)面纏身,憔悴慌...
    丫丫小火閱讀 723評(píng)論 2 11

友情鏈接更多精彩內(nèi)容