超文本標記語言(英語:HyperText Markup Language,簡稱:HTML)是一種用於建立網頁的標準標記語言。HTML是一種基礎技術,常與CSS、JavaScript一起被眾多網站用於設計網頁、網頁應用程式以及行動應用程式的使用者介面[3]。網頁瀏覽器可以讀取HTML檔案,並將其彩現成視覺化網頁。HTML描述了一個網站的結構語意隨著線索的呈現,使之成為一種標記語言而非程式語言。
HTML元素是構建網站的基石。HTML允許嵌入圖像與對象,並且可以用於建立互動式表單,它被用來結構化資訊——例如標題、段落和列表等等,也可用來在一定程度上描述文件的外觀和語意。HTML的語言形式為尖括號包圍的HTML元素(如<html>
),瀏覽器使用HTML標籤和指令碼來詮釋網頁內容,但不會將它們顯示在頁面上。
HTML可以嵌入如JavaScript的手稿語言,它們會影響HTML網頁的行為。網頁瀏覽器也可以參照階層式樣式表(CSS)來定義文字和其它元素的外觀與布局。維護HTML和CSS標準的組織全球資訊網協會(W3C)鼓勵人們使用CSS替代一些用於表現的HTML元素[4]。
歷史
1980年,物理學家提姆·柏內茲-李在歐洲核子研究中心(CERN)在承包工程期間,為使CERN的研究人員使用並共享文件,他提出並建立原型系統ENQUIRE。1989年,柏內茲-李在一份備忘錄中提出一個基於網際網路的超文字系統[5]。他制定HTML並在1990年底寫出瀏覽器和伺服器軟體。同年,柏內茲-李與CERN的資料系統工程師羅伯特·卡里奧聯合為專案申請資助,但未被CERN正式批准。在他的個人筆記中[6]柏內茲-李列舉「一些使用超文字的領域」,並把百科全書列為第一項[7]。
HTML的首次公開描述出現於一個名為HTML Tags[8]的檔案中,由提姆·柏內茲-李於1991年底提及[9][10]。它描述18個元素,包括HTML初始的、相對簡單的設計。除了超連結標籤外,其他設計都深受CERN內部一個以標準通用標記語言(SGML)為基礎的檔案格式SGMLguid的影響。這些元素仍有11個存在於HTML 4中[11]。
柏內茲-李認為HTML是SGML的一個應用程式。1993年中期網際網路工程任務組(IETF)發布首個HTML規範的提案:「超文本標記語言(HTML)」網際網路草案(頁面存檔備份,存於網際網路檔案館),由柏內茲-李與丹·康納利撰寫。其中包括一個SGML文件類型定義來定義語法[12]。草案於6個月後過期,不過值得注意的是其對NCSA Mosaic瀏覽器嵌入線上圖像的自訂標籤的認可,這反映IETF把標準立足於成功原型的理念[13]。同樣,戴夫·拉格特在1993年末提出的與之競爭的網際網路草案「HTML+(超文字標記格式)」建議規範已經實現的功能,如表格與填寫表單[14]。
在HTML和HTML+的草案於1994年初到期後,IETF建立一個HTML工作群組,並在1995年完成"HTML 2.0",這是第一個旨在成為對其後續實現標準的依據的HTML規範[15]。
在IETF的主導下,HTML標準的進一步發展因競爭利益而遭受停滯。自1996年起,HTML規範一直由全球資訊網協會(W3C)維護,並由商業軟體廠商出資[16]。不過在2000年,HTML也成為國際標準(ISO/ IEC15445:2000)。HTML 4.01於1999年末發布,進一步的勘誤版本於2001年發布。2004年,網頁超文字應用技術工作小組(WHATWG)開始開發HTML5,並在2008年與W3C共同提出,2014年10月28日完成標準化[17]。
- 1991年10月
- HTML標籤[9],一個非正式CERN檔案首次公開18個HTML標籤。
- 1992年6月
- HTML DTD的首個非正式草案[29], 後續有七個修訂版[30][31][32](7月15日,8月6日,8月18日,11月17日,11月19日,11月20日,11月22日)。
- 1992年11月
- HTML DTD 1.1(首個版本號,基於RCS修訂版,版本號從1.1開始而非1.0),非正式草案。[32]
- 1993年6月
- 超文本標記語言[33]由IETF IIIR工作小組作為網際網路草案(一個粗略的建議標準)。在被第二版[34]取代一個月後,IETF又發布6個草案[35],最終在RFC1866中發布HTML 2.0。
- 1993年11月
- HTML+由IETF作為網際網路草案發布,是超文本標記語言草案的一個競爭性提案。它於1994年5月到期。
- 1995年4月 (1995年3月編寫)
- HTML 3.0[36]被提議作為IETF的標準,但直到提案在五個月過期後(1995年9月28日)[37]仍沒有進一步的行動。它包含許多拉格特HTML+提案的功能,如對表格的支援、圍繞資料的文字流和複雜的數學公式的顯示[37]。W3C開始開發自己的Arena瀏覽器作為HTML 3和階層式樣式表的試驗台[38][39][40],但HTML 3.0並沒有獲得成功。瀏覽器廠商,包括微軟和網景,選擇實現HTML3草案功能的不同子集並引入它們自己的外掛程式(見瀏覽器大戰)[16]。
- 2008年1月
- HTML5由W3C作為工作草案(連結(頁面存檔備份,存於網際網路檔案館))發布[41]。雖然HTML5的語法非常類似於SGML,但它已經放棄任何成為SGML應用程式的嘗試,除了一種替代的基於XML的HTML5序列,它已明確定義自己的「HTML」序列[42]。
- 2011年 HTML5 – 最終徵求
- 2011年5月,工作小組將HTML5推進至「最終徵求」(Last Call)階段,邀請W3C社群內外人士以確認本規範的技術可靠性。W3C開發一套綜合性測試套件來實現完整規範的廣泛互動操作性,完整規範的目標日期為2014年[43]。2011年1月,WHATWG將其「HTML5」活動標準重新命名為「HTML」。W3C仍然繼續其發布HTML5的專案[44]。
- 2012年 HTML5 – 候選推薦
- 2012年7月,WHATWG和W3C的工作產生一定程度的分離。W3C繼續HTML5規範工作,重點放在單一明確的標準上,這被WHATWG稱為「快照」。WHATWG組織則將HTML5作為一個「活動標準」(Living Standard)。活動標準的概念是從未完成但永遠保持更新與改進,可以提姆加新特性,但功能點不會被刪除。[45]
- 2012年12月,W3C指定HTML5作為候選推薦[46]階段。該階段的標準為「兩個100%完成,完全實現互動操作」。
XHTML是使用XML 1.0覆寫自HTML 4.01的獨立語言。它不再被作為單獨標準開發。
- XHTML 1.0[50], 2000年1月26日作為W3C推薦標準發布。修訂版於2002年8月1日發布,它提供與HTML 4.0和4.01相同的三個變化,這些變化被重新在XML中制定。
- XHTML 1.1[51],基於XHTML 1.0 嚴格版,2001年5月31日 作為W3C推薦標準發布。修訂版可使用模組化XHTML(頁面存檔備份,存於網際網路檔案館)的模組,2001年4月10日作為W3C推薦標準發布。
- XHTML 2.0為工作草案,但為支援HTML5與XHTML5的工作,此草案被放棄[52][53][54]。 XHTML 2.0與XHTML 1.x不相容,因此更確切的說這是一個XHTML風格的新語言而不是XHTML 1.x的更新。
- 在HTML5草案中規定一個XHTML語法,稱為「XHTML5.1」[55]。
標記
HTML標記包含標籤(及其屬性)、基於字元的資料類型、字元參照和實體參照等幾個關鍵部分。HTML標籤是最常見的,通常成對出現,比如<h1>
與</h1>
。這些成對出現的標籤中,第一個標籤是開始標籤,第二個標籤是結束標籤。兩個標籤之間為元素的內容,有些標籤沒有內容,為空元素,如<img>
。
HTML另一個重要組成部分為文件類型聲明,這會觸發標準模式彩現。
以下是一個經典的Hello World程式的例子:
<!DOCTYPE html>
<html>
<head>
<title>This is a title</title>
</head>
<body>
<p>Hello world!</p>
</body>
</html>
<html>
和</html>
之間的文字描述網頁,<body>
和</body>
之間的文字為可視頁面內容。標記文字<title>This is a title</title>
定義了瀏覽器的頁面標題。
HTML文件由巢狀的HTML元素構成。它們用HTML標籤表示,包含於尖括號中,如<p>
[57]
在一般情況下,一個元素由一對標籤表示:「開始標籤」<p>
與「結束標籤」</p>
。元素如果含有文字內容,就被放置在這些標籤之間。
在開始與結束標籤之間也可以封裝另外的標籤,包括標籤與文字的混合。這些巢狀元素是父元素的子元素。
開始標籤也可包含標籤屬性。這些屬性有諸如標識文件區段、將樣式資訊繫結到文件演示和為一些如<img>
等的標籤嵌入圖像、參照圖像來源等作用。
一些元素如換行符<br>
,不允許嵌入任何內容,無論是文字或其他標籤。這些元素只需一個單一的空標籤(類似於一個開始標籤),無需結束標籤。
許多標籤是可選的,尤其是那些很常用的段落元素<p>
的閉合端標籤。HTML瀏覽器或其他媒介可以從上下文辨識出元素的閉合端以及由HTML標準所定義的結構規則。這些規則非常複雜,不是大多數HTML編碼人員可以完全理解的。
因此,一個HTML元素的一般形式為:<tag attribute1="value1" attribute2="value2">''content''</tag>
。一些HTML元素被定義為空元素,其形式為<tag attribute1="value1" attribute2="value2">
。空元素不能封裝任何內容。例如<br>
標籤或行內標籤<img>
。一個HTML元素的名稱即為標籤使用的名稱。注意,結束標籤的名稱前面有一個斜槓「/」,空元素不需要也不允許結束標籤。如果元素屬性未標明,則使用其預設值。
HTML文件的頁首:<head>...</head>
。標題被包含在頭部,例如:
<head>
<title>The Title</title>
</head>
標題:HTML標題由<h1>
到<h6>
六個標籤構成,字型由大到小遞減:
<h1>Heading level 1</h1>
<h2>Heading level 2</h2>
<h3>Heading level 3</h3>
<h4>Heading level 4</h4>
<h5>Heading level 5</h5>
<h6>Heading level 6</h6>
段落:
<p>第一段</p> <p>第二段</p>
換行:<br>
。<br>
與<p>
之間的差異是br
換行但不改變頁面的語意結構,而p
部分的頁面成段。
<p>這是<br>一個<br>使用換行<br>段落</p>
連結:使用<a>
標籤來建立連結。href
屬性包含連結的URL位址。
<a href="https://zh.wikipedia.org/">中文維基百科的連結!</a>
注釋:
<!-- This is a comment -->
注釋有助於理解標記,但它不會在網頁上顯示。
HTML中存在以下幾種類型的標記元素:
- 用於文字的結構式標記
- 例如,
<h2>羽毛球</h2>
將「羽毛球」定義為二級標題。結構式標記不指示任何特定的彩現,但大多數網頁瀏覽器都會採用元素格式的預設樣式。要在內容上實現進一步的風格可以使用階層式樣式表(CSS)[58]。 - 用於文字外觀的表現式標記,不論其目的
- 例如,
'''粗體'''
表示視覺輸出裝置應將文字「粗體」加粗,但如果裝置無法做到這一點(如朗讀文字的聽覺裝置),就不會發生什麼現象。在這種情況下,'''粗體'''
與''斜體''
也可能有相同的視覺效果,但在本質上它們更加語意化。如同'''加強文字'''
與''強調文字''
的區別。為支援CSS的使用,大多數表現式標記在HTML 4.0規範中不再被推薦使用。
大多數元素的屬性以「名稱-值」的形式成對出現,由「=」分離並寫在開始標籤元素名之後。值一般由單引號或雙引號包圍,有些值的內容包含特定字元,在HTML中可以去掉引號(XHTML不行)[59][60]。不加引號的屬性值被認為是不安全的[61]。有些屬性無需成對出現,僅存在於開始標籤中即可影響元素[9],如img
元素的ismap
屬性[62]。
許多元素存在一些共通的屬性:
id
屬性為元素提供了在全文件內的唯一標識。它用於辨識元素,以便樣式表可以改變其表現屬性,指令碼可以改變、顯示或刪除其內容或格式化。對於提姆加到頁面的URL,它為元素提供了一個全域唯一標識,通常為頁面的子章節。例如,ID "屬性"對於https://zh.wikipedia.org/wiki/HTML#属性
class
屬性提供一種將類似元素分類的方式。常被用於語意化或格式化。例如,一個HTML文件可指定類<class="標記">
來表明所有具有這一類值的元素都從屬於文件的主文字。格式化後,這樣的元素可能會聚集在一起,並作為頁面註腳而不會出現在HTML代碼中。類屬性也被用於微格式的語意化。類值也可進行多聲明。如<class="標記 重要">
將元素同時放入標記
與重要
兩類中。style
屬性可以將表現性質賦予一個特定元素。比起使用id
或class
屬性從樣式表中選擇元素,「style」被認為是一個更好的做法,儘管有時這對一個簡單、專用或特別的樣式顯得太繁瑣。title
屬性用於給元素一個附加的說明。 大多數瀏覽器中這一屬性顯示為工具提示。lang
屬性用於辨識元素內容的語言,它可能與文件的主要語言不同。例如,在中文文件中:<p>法语<span lang="fr">c'est la vie</span>在法国的应用很普遍,意为“这就是生活” 。<p>
縮寫元素abbr
可用於說明一些屬性:
<abbr id="ID" class="术语" style="color:purple;" title="超文本标记语言">HTML</abbr>
這個例子顯示為HTML; 在大多數瀏覽器中,游標指向縮寫時會顯示標題文字「超文本標記語言」。
大多數元素採用與語言相關的屬性dir
來指定文字方向,如 "rtl"採用從右到左的文字,比如阿拉伯語、波斯語以及希伯來語[63]。
在4.0版本中,HTML定義了一系列共252個字元實體參照和1,114,050個字元值參考。二者都支援單個字元透過簡單的標記寫入。文字字元與其對應的標記彩現的效果相同。
用這種方式「跳脫」字元的能力允許字元<
與&
(當分別被寫作<
和&
時)被理解為字元資料而不是標記。例如<
通常為標籤的開頭,&
通常為字元實體參照與數字字元參照的開頭;&
或&
或&
將&
作為元素的內容或屬性的值。雙引號字元"
在不被用於屬性值的標示時必須跳脫為"
或"
或"
;相等地,當於單引號字元'
不被用於屬性值的標示時,也必須跳脫為'
或'
(或HTML5與XHTML文件中的'
[64][65])。
如果文件作者忽略了跳脫這樣的字元,一些瀏覽器會嘗試透過上下文猜測他們的意圖。如果結果仍為無效標記,這會使其他瀏覽器或使用者代理難以訪問到該文件,並使它們嘗試使用搜尋和索引來解析該文件。
那些難以輸入或不在該文件字元編碼中的字元也可透過跳脫來實現。例如通常只在西歐或南美的鍵盤出現的重音符e
(é
),可以在HTML文件中用作實體參照é
或數字參照é
或é
。 諸如UTF-8的Unicode字元編碼與所有的現代瀏覽器相容並允許直接訪問全球書寫系統幾乎所有的字元 [66]。
HTML為元素內容定義了多種資料類型,如指令碼資料、樣式表資料以及許多屬性值的類型,包括ID、名稱、URI、數字長度單位、語言、媒體描述符顏色、字元編碼、日期和時間等等。所有這些資料類型都是字元資料的特殊化。
HTML文件需要以文件類型聲明(英語非正式說法「doctype」)開頭。在瀏覽器中,文件類型聲明有助於確定彩現模式——特別是是否使用怪異模式。
文件類型聲明的初衷是透過基於文件類型定義(DTD)的SGML工具來解析並驗證HTML文件。
HTML5未定義DTD,所以在HTML5中文件類型聲明更為簡短:[67]
<!DOCTYPE html>
HTML 4文件類型聲明舉例:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
該聲明參照HTML 4.01「嚴格」版的DTD。基於SGML的驗證器可讀取DTD,正確解析這些文件並執行驗證。在現代瀏覽器中,一個有效的文件類型啟用標準模式有別於怪異模式。
另外,HTML 4.01提供過渡型與框架集型的DTD。過渡型涵蓋最廣,它可整合當前以及老舊或「過時」的標籤,而嚴格型DTD排除了過時的標籤。框架集擁有所有構建框架所需的標籤以及過渡型的標籤。[68]
語意化HTML
語意化HTML是一種編寫HTML的方式,它強調編碼資訊的含義在其格式(樣子)之上。HTML從創立之初就包括語意化標記[69],但也包括標識性標記如<font>
、<i>
和<center>
標籤。也存在一些語意上中立的span與div標籤。自1990年代末CSS開始應用於大多數瀏覽器,網頁製作者就被鼓勵使用CSS以便呈現與內容分離[70]。
在2001年一次對語意網的討論中,提姆·柏內茲-李等人給出了一種的方法,使智慧型軟體「代理人」可能有一天會自動抓取網頁進行尋找、過濾並將之前不相關的聯絡起來[71]。這種代理甚至在現在也不普遍,但一些Web 2.0、混搭和價格比較網站的想法可能會結束。這些網頁應用程式的混合與柏內茲-李的語意代理人的之間主要區別基於以下事實:當前的聚合與資訊混合通常由網頁開發者設計,他們早已知道網路位置和他們希望混搭、比較與結合的特定資料的API語意。
網頁代理的一個重要類型是網路爬蟲或搜尋引擎蜘蛛。這些軟體代理依賴於它們發現的網頁的語意解析度,因為它們一天要使用各種技術與演算法來讀取和索引數百萬個網頁並給網頁使用者提供搜尋工具,沒有這些全球資訊網的有效性就會大大降低。
為使搜尋引擎蜘蛛評估它們在HTML文件中發現的文字片段的重要性,也為那些建立標記等混合的人與更多的自動化代理工具,HTML中的語意結構需要廣泛一致地應用從而將文字的含義呈現給瀏覽者。[72]
表示性標記在當前的HTML和XHTML推薦中不被鼓勵使用。舊版本HTML中的大多數表示功能不再被允許使用,因為它們導致可訪問性變差、站點維護成本變高和文件大小變大。[73]
好的語意化HTML也改善了網頁文件的可訪問性(參見網頁內容無障礙指南)。例如,當螢幕閱讀器或音訊瀏覽器可以正確判定一個文件的結構時,視覺障礙使用者不會再因閱讀重複或無關的資訊而浪費時間。
分發
全球資訊網主要由從伺服器透過HTTP協定向瀏覽器傳送的HTML文件組成。但是,HTTP也可以被用於傳輸HTML之外的資料,例如圖像、聲音和其他內容。為使瀏覽器了解如何處理接收到的文件,在傳輸文件時必須同時傳遞檔案類型。這種元資料包含MIME類型(對於HTML 4.01或更早版本是text/html,而對於XHTML 1.0或之後的版本是application/xhtml+xml),以及字元編碼(參見HTML字元編碼方式)。
在現在的瀏覽器中,和HTML文件一起傳送的MIME類型影響文件的解讀方式。和XHTML MIME類型一起傳送的文件被認為是良構的XML,而語法錯誤會導致瀏覽器無法呈現文件。完全相同的文件如果和HTML MIME類型一起傳送,則可能被正常顯示,因為瀏覽器對HTML的語法檢查更加鬆懈些。
W3C的推薦指出,遵循規定的推薦指引的XHTML 1.0文件可標記二者任一的MIME類型[74]。XHTML 1.1還指出,XHTML 1.1文件應[75]標有兩種MIME類型[76]。
大多數圖形電子郵件客戶端允許使用HTML的子集(經常界限不清)提供格式化和無法使用純文字的語意標記。這可能包括印刷資訊,如彩色標題、強調和參照文字、內嵌圖片和圖表等。許多這樣的客戶包含一個編寫HTML電子郵件訊息的圖形化使用者介面編輯器和一個用於顯示的彩現引擎。在郵件中使用HTML受到了一些相容性的批評,由於一些盲人或具有視覺障礙的人的訪問問題,這種方式有利於偽裝的釣魚攻擊。因其訊息大小超過明文,所以它可混淆垃圾郵件過濾器。
最常用的電腦副檔名為.html,通用縮寫為.htm。它起源於某些早期作業系統與檔案系統,如DOS以及FAT資料結構的局限性,它將副檔名限制為3個字母[77]。
HTML應用程式(HTA;副檔名".hta")是一個Microsoft Windows應用程式,它在瀏覽器中使用HTML和動態HTML提供應用程式圖形介面。正規HTML檔案被限制在瀏覽器的安全模型中,只能分別透過網頁伺服器和網頁對象與站點Cookie進行通訊和操作。HTA作為完全受信任的應用程式執行,因此擁有更多的權限,如建立/編輯/刪除檔案與登錄檔項。因為它們在瀏覽器安全模式之外操作,所以HTA不能透過HTTP執行,必須下載(就像EXE檔案)並在本地檔案系統執行。
所見即所得編輯器
所見即所得編輯器使用圖形化使用者介面(GUI)顯示HTML文件,常常類似於文書處理器,所以使用者可以設計一切。編者面對的是文件,而不是代碼,所以作者並不需要太多的HTML知識。這種所見即所得的編輯模式一直受到詬病[78][79],主要因為它生成的代碼品質不高;也有人主張將其改變至WYSIWYM模型(所見即所指)。
所見即所得的編輯器仍然是一個有爭議的話題,由於人們普遍認為它們存在以下缺陷:
參見
參考文獻
延伸閱讀
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.