HTML 總覽

超文字標記語言 (或簡稱 HTML) 是用於描述網路上文件結構的標準標記語言。HTML 包含一系列的元素和屬性,可用來標記文件的所有元件,讓文件結構有條理。

基本上,HTML 文件是節點的樹狀結構,包括 HTML 元素和文字節點。HTML 元素提供文件的語意和格式,包括建立段落、清單和表格,以及嵌入圖片和表單控制項。每個元素都可以指定多個屬性。許多元素都有內容,包括其他元素和文字。其他元素為空白,而標記和屬性則會定義其函式。

元素分為幾種類別,包括中繼資料、區段、文字、內嵌語意、表單、互動式、媒體、元件和指令碼。我們會在本系列中介紹其中大部分的內容。首先,元素是什麼?

元素

HTML 包含一系列元素,您可以用來圍繞或納入內容的不同部分,以使它出現或以特定方式出現。HTML 元素以角括號 (<>) 為標示,

我們的網頁標題是第一層標題,要使用 <h1> 標記。實際名稱「機器學習研討會」則是元素的內容。內容位於開頭與結尾標記之間。整個元素包括開頭標記、結尾標記和內容,都是元素。

組成 HTML 元素的標記和內容。

結束標記與起始標記相同,但前面加上斜線。

元素和標記並不完全相同,但許多人會交替使用這些字詞。標記名稱即為括號中的內容。標記內含括號。在本例中:<h1>。一個「元素」就是開頭和結尾標記,以及這些標記之間的所有內容,包括巢狀元素。

<p>This paragraph has some
  <strong><em>strongly emphasized</em></strong>
  content</p>

此段落元素包含其他巢狀元素。為元素建立巢狀結構時,請務必正確建立巢狀結構。HTML 標記應與開啟順序相反。在上述範例中,請注意 <em> 開始和結束的 <strong> 標記內如何開啟和關閉,以及 <strong><p> 標記中同時開啟和關閉。

瀏覽器不會顯示代碼。代碼可用來解讀網頁內容。

HTML 非常可惜,例如,如果我們省略結尾 </li> 標記,則會暗示結尾標記。

<ul>
  <li>Blendan Smooth
  <li>Hoover Sukhdeep
  <li>Toasty McToastface
</ul>

雖然不關閉 <li> 是合理的做法,但並不是建議做法。結尾 </ul> 為必要項目。在未排序清單的結尾標記省略的情況下,瀏覽器會嘗試判斷清單和清單項目的結尾位置,但您可能不同意此決定。

每個元素的規格會列出結尾標記是否為必要標記。「兩個標記都不可用」,就表示必須提供起始標記和結束標記。規格會列出所有必要的結尾標記

如果先前範例中的 <em><strong> 尚未關閉,瀏覽器不一定會為您關閉元素。不關閉 <em> 只會導致內容轉譯方式可能與預期不同。如果省略 </ul>,且下一個標記是清單父項容器的結束標記,您很幸運。另一方面,如果是開頭的 <h1> 標記,瀏覽器會假設標頭是清單的一部分,包括沿用樣式。有些省略結尾標記會造成問題較大:如果不關閉某些標記 (例如 <script><style><template><textarea><title>),會使後續內容中斷,如以下範例所示。

即使某些內容不小心使用斜體或縮排標題,也無法破壞商家。大部分內容在 200x300 文字區域中顯示時不會顯示樣式,因為您忘了新增 </textarea>,或完全無法顯示,因為忘記關閉 </style> 會導致網站無法使用。

在某些情況下,即使標記中沒有相關標記,瀏覽器仍會包含元素。由於元素可以是隱含的,因此即使標記不含標記,元素仍可能存在。瀏覽器會在你的內容和表格列周圍加上 <body></body>,甚至是在表格列附近新增 <tbody></tbody>。雖然可以省略標記,但請勿這麼做。此外,正如先前所述,請確認這些巢狀結構是否正確。您未來將成為標記的維護者,以及負責程式碼集的其他人,都由衷感謝。

元素分為兩種:已取代和未取代。

非取代元素

上一節標記的段落、標題和清單全都不會取代。非取代的元素會包含開頭和 (有時選用) 結尾標記,且可能含有文字和其他標記做為子元素。這些包含的標記可將詞組或圖片轉換為超連結、將句子變成標題、強調字詞等等。

已取代和 void 元素

在大多數表單控制項中,系統會將取代的元素替換為圖形使用者介面 (UI) 小工具,在大多數圖片中則使用光柵或可擴充圖片檔。被物件取代時,每個物件都會有預設外觀。視物件類型和瀏覽器而定,適用的樣式會受到限制。舉例來說,大多數瀏覽器都會啟用有限的 UI 小工具和相關虛擬元素樣式。如果是光柵圖片、高度、寬度、裁剪和篩選,則可以透過 CSS 輕鬆完成,但絕無僅有。另一方面,除非包含光柵圖片,否則使用與 HTML 類似的 XML 標記語言可縮放向量圖形,但都具有完整擴充性。而且可完全樣式。請注意,如果 CSS 供應商是連結至嵌入該 SVG 的 HTML 檔案,您是否能為嵌入的 SVG 設定樣式,取決於 SVG 的設定方式。

在這個範例中,<img><input> 這兩個取代的元素會分別替換成非文字內容:圖片和圖形使用者介面物件。

<input type="range">
<img src="switch.svg" alt="light switch">

上述 HTML 的輸出內容:

電燈開關

被替換的元素和 void 元素常常感到困惑。Void 元素都是自行關閉的元素,以單一標記表示。這表示沒有這類 void 元素的結尾標記。您可以選擇在標記結尾加上斜線,多數使用者所發現的標記更容易閱讀。延續這個範例,我們會使用斜線自行關閉代碼:

<input type="range"/>
<img src="switch.svg" alt="light switch"/>

結尾的斜線是舊校,表示元素為自行關閉,且沒有相符的結束或結尾標記。

Void 元素不得包含文字內容或巢狀元素。Void 元素包括 <br><col><embed><hr><img><input><link><meta><source><track><wbr> 等。

大部分取代的元素均為 void 元素,但並非全部。系統會替換 videopictureobjectiframe 元素,但並非無效。它們則可以包含其他元素或文字,因此都有結尾標記。

大多數的 void 元素會遭到取代;但再次強調,如同我們看到 baselinkparammeta 一樣。為什麼 void 元素無法取代任何內容,也沒有在螢幕上顯示任何內容?提供內容相關資訊!資訊是由屬性。

屬性

您可能已註意到<img><input>範例不只包含起始標記的元素類型。這些額外以空格分隔的名稱/值組合 (有時候可以是選填值) 稱為「屬性」。屬性是 HTML 的一大優勢。本系列文章會介紹數百種屬性和屬性值,不過我們稍後只會討論這幾項屬性和加入方式。

屬性可以提供元素的相關資訊。和開頭標記相同的屬性一樣,不會顯示在內容中,但可以用於定義內容在視障 (輔助技術和搜尋引擎) 使用者眼前的顯示方式。

屬性則只會顯示在開頭標記中。開頭標記一律是以元素類型為開頭。類型後面可以加上零或多個屬性,並以一或多個空格分隔。大多數的屬性名稱後面都會加上等號,並用屬性值括住屬性,並以左引號和右引號括住。

含屬性的起始標記。

本例的錨點連結包含兩個屬性,這兩個屬性已將內容「Registration」轉換成加入內部錨定連結,當使用者點選、輕觸連結,或使用鍵盤或其他裝置啟用連結時,該屬性會捲動至目前瀏覽器分頁中的 id="register" 屬性。

屬性可定義元素的行為、連結和功能。我們會在本系列的「屬性」部分中介紹更多屬性。請注意,有些屬性屬於全域性質,也就是說,這些屬性可以顯示在任何元素的起始標記中。某些元素只會套用至多個元素,而非所有元素,有些則只會套用至單一元素。

大多數的屬性為名稱/值組合。布林值屬性若為 true、false 或與屬性名稱相同,您可以只加入屬性,不必輸入值。

<img src="switch.svg" alt="light switch" ismap />

這張圖片有三個屬性:srcaltismapsrc 屬性是用來提供 SVG 圖片素材資源的位置。alt 屬性提供描述圖片內容的替代文字。ismap 屬性為布林值,因此不需要值。這封電子郵件只是要說明什麼是屬性。有關這些屬性的詳細說明,請參閱圖片一節。

雖然引用屬性並非一律必要,但有時是如此。如果值包含空格或特殊字元,就必須加上引號。因此,建議您一律引用。如果屬性值實際上並非加上引號,請務必在屬性之間加入一或多個空格。不過,為確保內容清晰易讀,建議使用引號和空格。

HTML 不區分大小寫,但有些屬性的值。規格中定義的值不區分大小寫。未定義為關鍵字的字串通常區分大小寫,包括 idclass 值。

請注意,如果 HTML 中的屬性值區分大小寫,在 CSS 和 JavaScript 的屬性選取器中使用時,屬性值會區分大小寫。

為了讓標記更容易閱讀,建議您 (但非必須) 為標記中的所有元素名稱和屬性名稱使用小寫英文字母來標記 HTML,並為所有屬性值引用。如果您聽到「XHTML 樣式標記」一詞,也就是在結尾有斜線的空白元素,這就是所謂的「XHTML 樣式標記」。

元素外觀

語意元素的預設外觀是由使用者代理程式樣式表設定。大多數的瀏覽器會使用實際樣式表來達到這個目的,有些瀏覽器則會在程式碼中模擬這類設定。最終結果相同。雖然使用者代理程式樣式表的部分限制是由 HTML 規格所設定,但瀏覽器的緯度值相當龐大,因此不同瀏覽器之間存在一些差異。

您選擇的元素以及您使用的標記應該適用於顯示內容,因為標記具有語意意義。元素的「語意」(或稱 role) 對於輔助技術相當重要,在某些情況下甚至會影響搜尋引擎。請使用 HTML 來建立內容架構,而不是定義內容外觀。外觀是 CSS 的領域,雖然許多會改變內容外觀的元素 (例如 <h1><strong><em>) 具有語意含意,但外觀也可能因為作者樣式而改變。

<h1>This header has both <strong>strong</strong> and <em>emphasized</em> content</h1>

元素、屬性和 JavaScript

文件物件模型 (DOM) 是 HTML 文件結構和內容的資料表示法。在瀏覽器剖析 HTML 時,它會為看到的每個元素和文字區段建立 JavaScript 物件。這些物件分別稱為節點,即元素節點和文字節點。

您可以定義每個 HTML 元素功能的介面。HTML DOM API 可透過 DOM 存取及控制每個 HTML 元素,並提供 HTML 元素及繼承該元素的所有 HTML 類別介面。HTMLElement 介面代表 HTML 元素及其所有子節點。其他每個元素都會透過繼承自該元素的介面實作。每個繼承介面都有建構函式、方法和屬性。透過沿用的 HTMLElement 屬性,您可以存取每個全域屬性以及 inputpointertransitionanimation 事件。您可以透過個別元素的子類型 (例如 HTMLAnchorElementHTMLImageElement),存取元素專屬的屬性值和方法。

隨堂測驗

測試您對 HTML 的瞭解程度

請使用 HTML 元素設定樣式。

請再試一次。系統會使用 CSS (而非 HTML) 設定樣式。
答對了!HTML 元素是用來描述內容。

選取替換的元素。

<img>
答對了!
<p>
請再試一次。
<ul>
再試一次
<input>
答對了!

請選取所有正確敘述。

屬性可描述 HTML 元素的樣式。
請再試一次。
含有空格或特殊字元的屬性值必須置於引號內。
答對了!最佳做法是引用所有屬性,避免發生成本波動。
屬性會新增至元素的起始標記。
答對了!
HTML 區分大小寫。
請再試一次。