重拾HTML

HTML作為頁面的骨架,可能簡單得不值一提,但是要清晰、透徹地寫出一份HTML可能你需要了解更多

本文知識點如下:

  • HTML快速講解
  • meta元信息
  • 語義化
  • 代碼規范

HTML快速講解

HTML叫超文本標記語言

如果你把“超文本標記語言”分開讀,那就很好理解了:超文本(鏈接)標記

概念清楚了,我們再來看看可能只有一些老頭子才會問的問題(你可以跳過這部分,現在已經可以不關注這個問題了,但有些老文章還會說起這個問題,所以稍微解答下):

XHTMLXML是什么鬼

簡單說,我們現在的HTML,其實是HTML 4.01(這個東西也有版本的)。但是它并不嚴格,在HTML中即使你不按要求寫上結束標簽,瀏覽器打開可能一樣好好的

為了不讓你亂寫,就有了XHTML,但是這東西殺傷力太大,對以前的HTML中的錯誤無法包容,很多程序員為了避免重新修改以前雖然錯了但是還能正常顯示的頁面,實際采用XHTML的很少

然后,HTML5登場,HTML5作為新一代標準身份出來,與XHTML不同的是,HTML5引入了新特性,同時不破壞以前的代碼

XHTML現在來看只是作為4和5作為中間的一個產物

最后來說說xml

xmlSGML(標準通用標記語言)的一個子集,而HTML也是SGML的子集,兩個應用場景不同,xml更關注的是數據

順便提一句,從HTML5起,HTML不再堅守SGML的語法。

來看代碼吧

為了避免每次敲重復的內容以及保持代碼規范,你可以自己寫一個空模板,每次直接使用就行了。下邊是我使用的模板:

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
    <head>
      <meta charset="utf-8" />
       <title>網站標題</title>
      <meta name="description" content="不超過150個字符">
      <!-- 使用最新的IE和chrome -->
      <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
      <!-- 禁止手機上縮放 -->
      <meta name ="viewport" content ="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
      <!-- 禁止百度轉碼 -->
      <meta http-equiv="Cache-Control" content="no-siteapp">
      
      <link rel="stylesheet" href="css/normalize.css">
      <link rel="stylesheet" href="css/main.css">
    </head>
    <body>

    </body>
</html>

meta 元信息

meta有兩個作用(分別對應namehttp-equiv屬性)

  1. 提供頁面信息給計算機識別——name
    name屬性對應網頁內容,以便于搜索引擎機器人查找、分類,其中最常用的是description和keywords;還有就是瀏覽器廠商定義的meta值,譬如ios的諸多屬性移動端頁面必帶的viewport。
  2. 模擬http響應報頭——http-equiv
    http-equiv 舉一個最常見例子
    <meta charset="utf-8">
    設置編碼方式,其實它完整寫法是這樣的
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    除了設置編碼,還有cookie,refresh等
    如果感興趣,可以讀讀這篇文章
    更多的meta標簽,可以參考常用的HTML頭部標簽

語義化

初學者需要避免的是,遇到塊級元素都是<div>, 行內元素都是<span>。HTML5引入了更多的語義標簽,比如:

  • <header>——頁眉
  • <footer>——頁腳
  • <article>——文章
  • <nav>——導航

html5語義化標簽參考
語義化一方面是SEO,另外一方面,自己也更好組織代碼;在后邊實際給大家體會怎么寫語義化的結構,現在先有個概念。
對于IE有些HTML5標簽不支持,可以引入normalize.css。

代碼規范

這部分內容來自mdo,你可以參看原文

語法

  • 用兩個空格來代替制表符(tab) -- 這是唯一能保證在所有環境下獲得一致展現的方法。
  • 嵌套元素應當縮進一次(即兩個空格)。
  • 對于屬性的定義,確保全部使用雙引號,絕不要使用單引號。
  • 不要在自閉合(self-closing)元素的尾部添加斜線 -- HTML5 規范中明確說明這是可選的。
  • 不要省略可選的結束標簽(closing tag)(例如,</li> 或 </body>)。
<!DOCTYPE html>
<html lang="zh-cmn-Hans">
  <head>
    <title>Page title</title>
  </head>
  <body>
    <img src="images/company-logo.png" alt="Company">
    <h1 class="hello-world">Hello, world!</h1>
  </body>
</html>

HTML5 doctype

為每個 HTML 頁面的第一行添加標準模式(standard mode)的聲明,這樣能夠確保在每個瀏覽器中擁有一致的展現。

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
  <head>
  </head>
</html>

語言屬性

根據 HTML5 規范,強烈建議為 html 根元素指定 lang 屬性,從而為文檔設置正確的語言。這將有助于語音合成工具確定其所應該采用的發音,有助于翻譯工具確定其翻譯時所應遵守的規則等等。
更多關于 lang 屬性的知識可以從 此規范 中了解。

這里列出了語言代碼表

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
  <head>
  </head>
</html>

IE 兼容模式

IE 支持通過特定的 <meta> 標簽來確定繪制當前頁面所應該采用的 IE 版本。除非有強烈的特殊需求,否則最好是設置為 edge mode,從而通知 IE 采用其所支持的最新的模式。

閱讀這篇 stack overflow 上的文章可以獲得更多有用的信息。

字符編碼

通過明確聲明字符編碼,能夠確保瀏覽器快速并容易的判斷頁面內容的渲染方式。這樣做的好處是,可以避免在 HTML 中使用字符實體標記(character entity),從而全部與文檔編碼一致(一般采用 UTF-8 編碼)。

<head>
  <meta charset="utf-8">
</head>

引入 CSS 和 JavaScript 文件

根據 HTML5 規范,在引入 CSS 和 JavaScript 文件時一般不需要指定 type 屬性,因為 text/css 和 text/javascript 分別是它們的默認值。

HTML5 spec links
Using link
Using style
Using script

<!-- External CSS -->
<link rel="stylesheet" href="code-guide.css">

<!-- In-document CSS -->
<style>
  /* ... */
</style>

<!-- JavaScript -->
<script src="code-guide.js"></script>

實用為王

盡量遵循 HTML 標準和語義,但是不要以犧牲實用性為代價。任何時候都要盡量使用最少的標簽并保持最小的復雜度。

屬性順序

HTML 屬性應當按照以下給出的順序依次排列,確保代碼的易讀性。

  • class
  • id, name
  • data-*
  • src, for, type, href
  • title, alt
  • aria-*, role
    class 用于標識高度可復用組件,因此應該排在首位。id 用于標識具體組件,應當謹慎使用(例如,頁面內的書簽),因此排在第二位。
<a class="..." id="..." data-modal="toggle" href="#">
  Example link
</a>

<input class="form-control" type="text">

<img src="..." alt="...">

布爾(boolean)型屬性

布爾型屬性可以在聲明時不賦值。XHTML 規范要求為其賦值,但是 HTML5 規范不需要。

更多信息請參考 WhatWG section on boolean attributes

元素的布爾型屬性如果有值,就是 true,如果沒有值,就是 false。
如果一定要為其賦值的話,請參考 WhatWG 規范:

如果屬性存在,其值必須是空字符串或 [...] 屬性的規范名稱,并且不要再收尾添加空白符。
簡單來說,就是不用賦值。

<input type="text" disabled>

<input type="checkbox" value="1" checked>

<select>
  <option value="1" selected>1</option>
</select>

減少標簽的數量

編寫 HTML 代碼時,盡量避免多余的父元素。很多時候,這需要迭代和重構來實現。請看下面的案例:

<!-- Not so great -->
<span class="avatar">
  <img src="...">
</span>
<!-- Better -->
<img class="avatar" src="...">
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內容

  • 格式后期處理。 Jeremy Keith在 Fronteers 2010 上的主題演講 今天我想跟大家談一談HTM...
    LordZhou閱讀 1,145評論 0 17
  • HTML、XML、XHTML 有什么區別 1.HTML 是用來描述網頁的一種語言,指的是超文本標記語言 (Hype...
    饑人谷_牛牛閱讀 707評論 0 2
  • 1. 瀏覽器頁面有哪三層構成,分別是什么,作用是什么? 構成:結構層、表示層、行為層分別是:HTML、CSS、Ja...
    程序猿人王小賤閱讀 1,890評論 1 11
  • 1.HMML,XML,XHTML有什么區別 1、html即是超文本標記語言(Hyper Text Markup L...
    饑人谷_oathy閱讀 623評論 0 1
  • HTML、XML、XHTML有什么區別? XMLXML是The Extensible Markup Languag...
    zx9426閱讀 442評論 0 1