原文鏈接:https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories

-
主要內(nèi)容目錄
- 元數(shù)據(jù)
- 流
- 章節(jié)
- 標(biāo)題
- 短語(yǔ)
- 內(nèi)嵌
- 交互
- 可觸
- 表單
-
次要內(nèi)容目錄
- 腳本支持元素
- 透明內(nèi)容模型
- 其他內(nèi)容模型
每個(gè)HTML標(biāo)簽都是一定數(shù)量的內(nèi)容目錄中的一員,內(nèi)容目錄是一個(gè)具有相同特性的標(biāo)簽組。標(biāo)簽組的劃分是不嚴(yán)格的,因?yàn)閷?shí)際上組內(nèi)的標(biāo)簽之間是沒(méi)有任何聯(lián)系的,但是對(duì)于定義和描述他們必須遵守的行為和規(guī)則來(lái)說(shuō)是十分有幫助的,尤其是當(dāng)你深入到他們的錯(cuò)綜復(fù)雜的細(xì)節(jié)中時(shí)。有些元素,不屬于任何這些內(nèi)容目錄。
有三種內(nèi)容目錄:
- 主要內(nèi)容目錄,描述了許多標(biāo)簽遵循的普通內(nèi)容規(guī)則。
- 表單內(nèi)容目錄,描述了表單相關(guān)標(biāo)簽的內(nèi)容規(guī)則。
- 特殊內(nèi)容目錄,描述了一些稀有標(biāo)簽的內(nèi)容規(guī)則,有時(shí)只在特定的上下文中生效。
主要內(nèi)容目錄
元數(shù)據(jù)內(nèi)容
元數(shù)據(jù)類(lèi)型標(biāo)簽會(huì)修改當(dāng)前演示文檔或是剩余文檔的行為,例如建立到其他文檔的鏈接,或者是實(shí)現(xiàn)與其他文檔的通信。
屬于這個(gè)目錄的標(biāo)簽包括:<base>, <command>, <link>, <meta>, <noscript>, <script>, <style> and <title>
流式內(nèi)容
流式內(nèi)容標(biāo)簽典型特征是包含文本或者是內(nèi)嵌內(nèi)容。屬于此類(lèi)的標(biāo)簽包括:<a>, <abbr>, <address>, <article>, <aside>, <audio>, <b>,<bdo>, <bdi>, <blockquote>, <br>, <button>, <canvas>, <cite>, <code>, <command>, <data>, <datalist>, <del>, <details>, <dfn>, <div>, <dl>, <em>, <embed>, <fieldset>, <figure>, <footer>, <form>, <h1>, <h2>, <h3>, <h4>, <h5>, <h6>, <header>, <hgroup>, <hr>, <i>, <iframe>, <img>, <input>, <ins>, <kbd>, <keygen>, <label>, <main>, <map>, <mark>, <math>, <menu>, <meter>, <nav>, <noscript>, <object>, <ol>, <output>, <p>, <pre>, <progress>, <q>, <ruby>, <s>, <samp>, <script>, <section>, <select>, <small>, <span>, <strong>, <sub>, <sup>, <svg>, <table>, <template>, <textarea>, <time>, <ul>, <var>, <video>, <wbr> 和文本節(jié)點(diǎn).
有一些標(biāo)簽也屬于此類(lèi),但前提是需要滿(mǎn)足一些條件
- <area>,是<map>標(biāo)簽的子標(biāo)簽時(shí)。
- <link>, itemprop屬性有初始值時(shí)。
- <meta>, itemprop屬性有初始值時(shí)。
- <style>, scoped屬性有初始值時(shí)。
章節(jié)內(nèi)容
屬于章節(jié)內(nèi)容模型的標(biāo)簽?zāi)軌蛟?strong>清晰地在大綱中劃分一部分區(qū)域出來(lái),例如<header><footer>和標(biāo)題內(nèi)容標(biāo)簽。
屬于章節(jié)內(nèi)容的標(biāo)簽有<article>, <aside>, <nav> 和<section>.
標(biāo)題內(nèi)容
標(biāo)題內(nèi)容定義了章節(jié)的標(biāo)題,由一個(gè)顯式的章節(jié)內(nèi)容標(biāo)簽標(biāo)記或者隱式的由標(biāo)題內(nèi)容標(biāo)簽自己定義。
屬于標(biāo)題內(nèi)容的標(biāo)簽有<h1>,<h2>,<h3>,<h4>,<h5>,<h6>以及<hgroup>。
短語(yǔ)內(nèi)容
短語(yǔ)內(nèi)容定義了他包含的文本和包含的標(biāo)簽,多個(gè)短語(yǔ)內(nèi)容組成段落。
短語(yǔ)內(nèi)容標(biāo)簽包括:<abbr>, <audio>, <b>, <bdo>, <br>, <button>, <canvas>, <cite>, <code>, <command>, <data>, <datalist>, <dfn>, <em>, <embed>, <i>, <iframe>, <img>, <input>, <kbd>, <keygen>, <label>, <mark>, <math>, <meter>, <noscript>, <object>, <output>, <progress>, <q>, <ruby>, <samp>, <script>, <select>, <small>, <span>, <strong>, <sub>, <sup>, <svg>, <textarea>, <time>, <var>, <video>, <wbr>和非空純文本。
有一些需要滿(mǎn)足特定條件才屬于此目錄的標(biāo)簽:
- <a>, 僅包含內(nèi)容短語(yǔ)時(shí)
- <area>, 是<map>標(biāo)簽的子孫元素時(shí)
- <del>, 僅包含內(nèi)容短語(yǔ)時(shí)
- <ins>, 僅包含內(nèi)容短語(yǔ)時(shí)
- <link>, itemprop屬性有初始值時(shí)
- <map>, 僅包含內(nèi)容短語(yǔ)時(shí)
- <meta>, itemprop屬性有初始值時(shí)
內(nèi)嵌內(nèi)容
內(nèi)嵌內(nèi)容標(biāo)簽導(dǎo)入其他內(nèi)容,或者插入內(nèi)容到其他標(biāo)簽語(yǔ)言和文檔命名空間中。屬于這個(gè)目錄的標(biāo)簽有:```<audio>,<canvas>,<embed>,<iframe>,<img>,<math>,<object>,<svg>,<video>.
交互內(nèi)容
交互內(nèi)容標(biāo)簽包含專(zhuān)門(mén)為了用戶(hù)交互而設(shè)計(jì)的標(biāo)簽。屬于這個(gè)目錄的標(biāo)簽有:<a>, <button>, <details>, <embed>, <iframe>, <keygen>, <label>, <select>, and <textarea>.
有一些需要滿(mǎn)足特定條件才屬于此目錄的標(biāo)簽:
- <audio>, controls屬性有初始值時(shí)
- <img>, usemap屬性有初始值時(shí)
- <input>, type類(lèi)型不在隱藏狀態(tài)中時(shí)
- <menu>,type類(lèi)型不在工具欄狀態(tài)中時(shí)
- <object>, usemap屬性有初始值時(shí)
- <video>, controls屬性有初始值時(shí)
可觸內(nèi)容
內(nèi)容既不空也不隱藏;它是呈現(xiàn)的內(nèi)容,是實(shí)質(zhì)性的。其模型是流程內(nèi)容或措辭內(nèi)容的元素應(yīng)該至少有一個(gè)可觸摸的節(jié)點(diǎn)。
表單相關(guān)內(nèi)容
表單相關(guān)內(nèi)容包含具有表單所有者的標(biāo)簽,由form屬性暴露出去。一個(gè)表單父節(jié)點(diǎn)可以是<form>元素,也可以是其id在表單屬性中被指定了的元素。
<button>
<fieldset>
<input>
<keygen>
<label>
<meter>
<object>
<output>
<progress>
<select>
<textarea>
這個(gè)目錄由于較為復(fù)雜,因此還有幾個(gè)子目錄:
可枚舉的
在 form.elements 和 fieldset.elements IDL 集合中列舉出的元素. 包括 <button>,<fieldset>,<input>,<keygen>,<object>,<output>,<select> 和 <textarea>
可標(biāo)記的
與<label>標(biāo)記相關(guān)的標(biāo)簽,包括<button>,<input>,<keygen>,<meter>,<output>,<progress>,<select> 和 <textarea>。
可提交的
可用來(lái)在表單提交時(shí),組成表單數(shù)據(jù)的元素。包括<button>,<input>,<keygen>,<object>,<select>和<textarea>
可重置的
表單重置時(shí)會(huì)影響到的標(biāo)簽。包括:<input>,<keygen>,<output>,<select> 和 <textarea>.
次要內(nèi)容目錄
還有一些次要的內(nèi)容目錄可以簡(jiǎn)單了解下。
腳本支持標(biāo)簽
腳本支持標(biāo)簽不直接影響文檔渲染后輸出的結(jié)果。相反,它們通過(guò)直接包含或指定腳本代碼來(lái)支持腳本,或者通過(guò)指定什么數(shù)據(jù)被腳本使用。
腳本支持標(biāo)簽包括:
- <script>
- <template>
透明內(nèi)容模型
如果一個(gè)標(biāo)簽屬于特殊內(nèi)容模型, 即使將透明內(nèi)容更換為子元素,其內(nèi)容必須由合法的HTML5元素組成。
例如,<del> 和 <ins> 是透明的:
<p>We hold these truths to be <del><em>sacred & undeniable</em></del> <ins>self-evident</ins>.</p>
如果這兩個(gè)元素被移除,這個(gè)程序段依然是合法的。
<p>We hold these truths to be <em>sacred & undeniable</em> self-evident.</p>
其他內(nèi)容模型
sectioning root
sectioning root category 的作用是把它的內(nèi)容與常規(guī)的大綱隔離。
譯文完畢。
附:
如果你有耐心讀到這里,恭喜你,你將會(huì)了解到vue的單文件組件對(duì)于本文中一些不被人所熟知的標(biāo)簽的應(yīng)用。
來(lái)看個(gè)vue官方的hello world單文件組件:

單文件組件主要包含3個(gè)標(biāo)簽,<template>,<script>,<style>。
我們從上述標(biāo)簽中找出這3個(gè)標(biāo)簽屬于的分類(lèi)。
- <template>:流式標(biāo)簽,腳本支持標(biāo)簽。(flow content , Script-supporting elements。)
- <script>:元數(shù)據(jù)標(biāo)簽,流式標(biāo)簽,短語(yǔ)標(biāo)簽,腳本支持標(biāo)簽。(Metadata content , Flow content , Phrasing content , Script-supporting elements)
- <style>:元數(shù)據(jù)標(biāo)簽,流式標(biāo)簽(因?yàn)榇藭r(shí)scoped有定義,也就是style標(biāo)簽中的樣式只作用于當(dāng)前當(dāng)文件組件的作用域)。(Metadata content , Flow content(the scoped attribute is present))
再來(lái)簡(jiǎn)單分析下。
template,符合流式標(biāo)簽和腳本支持的特點(diǎn)。主要包含包含內(nèi)嵌內(nèi)容和文本:例如雙向數(shù)據(jù)綁定模板;而且也包含腳本代碼且指定數(shù)據(jù)被腳本使用:例如事件處理函數(shù)的調(diào)用。
script,主要符合元數(shù)據(jù)和腳本支持的特點(diǎn)。元數(shù)據(jù)的原因是這里可以導(dǎo)入依賴(lài),也能實(shí)現(xiàn)組件間通信,或者是vuex通信;會(huì)有腳本支持的情況,例如事件處理函數(shù)的定義。
style,主要是流式標(biāo)簽,沒(méi)有元數(shù)據(jù)的成分。因?yàn)檫@里加的scoped主要是為了內(nèi)嵌樣式內(nèi)容。
翻譯此文之前,我還以為template標(biāo)簽和style的scoped是尤雨溪自己創(chuàng)造出來(lái)的,翻譯完才發(fā)現(xiàn),原來(lái)是W3C組織定義的,被自己的天真和無(wú)知所打敗,看來(lái)要好好審視下"精通html,css和javascript"這句話(huà)了。
努力成為優(yōu)秀的前端開(kāi)發(fā)工程師!
期待和大家交流,共同進(jìn)步,歡迎大家加入我創(chuàng)建的與前端開(kāi)發(fā)密切相關(guān)的技術(shù)討論小組:
- SegmentFault技術(shù)圈:ES新規(guī)范語(yǔ)法糖
- SegmentFault專(zhuān)欄:趁你還年輕,做個(gè)優(yōu)秀的前端工程師
- 知乎專(zhuān)欄:趁你還年輕,做個(gè)優(yōu)秀的前端工程師
- Github博客: 趁你還年輕233的個(gè)人博客
- 前端開(kāi)發(fā)QQ群:660634678
微信公眾號(hào): 人獸鬼 / excellent_developers
努力成為優(yōu)秀前端工程師!
