HTML標簽嵌套到底怎樣才算是規(guī)范?

最近在看《web前端開發(fā)最佳實踐》,看到有一個小節(jié)的標題是 過時的塊狀元素和行內(nèi)元素 ,之前聽到的關(guān)于HTML標簽的嵌套規(guī)范一直在講,甚至面試的時候還被問到,但是自己在之前的工作中,的的確確用<a>標簽包過塊元素,為了能有一個更好的用戶體驗,模擬的一個按鈕。那個時候就有困惑,不是行內(nèi)元素不能嵌套塊元素么?直到看到這段才大概了解了一些,因為我用的文檔申明是HTML5的,所以解析結(jié)構(gòu)會按照HTML5的標準。

這是我之前匯總的一些標簽嵌套規(guī)范:

  • ul,li/ol,li/dl,dt,dd擁有父子級關(guān)系的標簽;ul、ol下都只能跟li,dl下只能跟dt.dd。
  • p,dt,h標簽里面不能嵌套塊元素;
  • a標簽不能嵌套a;
  • 行內(nèi)元素不能嵌套塊元素;

看一下下面這段結(jié)構(gòu),據(jù)說是來自facebook的代碼

<ul>
  <li>
    <h4><a href=""><div></div></a></h4>
  </li>
</ul>

很明顯,不符合上面嵌套規(guī)則最后一條,因為它在內(nèi)聯(lián)元素<a>元素中嵌套了塊元素元素<div>

頁面元素的兩個基本類型:行內(nèi)元素和塊狀元素,在HTML5新規(guī)范中,已經(jīng)淡化了元素的這兩種分類,取而代之的方案是更具有語義的HTML元素的分類方式。

因為在構(gòu)建HTML的過程中,首先要考慮的是語義,判斷使用的元素合適與否,就是要判斷元素對應的標簽是否符合當前元素所表達的語義,而不是元素的樣式是不是更符合當前的UI設(shè)計。

為了消除塊元素和行內(nèi)元素這兩個概念引起的混淆(到底什么時候用行內(nèi)元素,什么時候用塊元素,其中元素又那么多,怎么分?),HTML5中的分類比HTML 4.01中的分類更具體,總共分為7類,每種元素并不限于某一類型,有可能某個元素屬于多個類型。

  • Flow(流式元素):

這個分類基本上包含了HTML 4.01中的塊狀元素和行內(nèi)元素。

a, abbr, address, area(如果它是map元素的后裔), article, aside, audio, b, bdi, bdo, 
blockquote, br, button, canvas, cite, code, command, 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, map, mark, math, menu, meter,nav, 
noscript, object, ol, output, p, pre, progress, q, ruby, s, samp, script, section, select, 
small, span, strong, style(如果該元素設(shè)置了scoped屬性), sub, sup, svg, table,textarea, time, 
u, ul, var, video, wbr, text
  • Heading(標題元素):
h1, h2, h3, h4, h5, h6, hgroup
  • Sectioning(章節(jié)元素):
article, aside, nav, section
  • Phrasing(段落元素):

基本上等同于HTML 4.01中行內(nèi)元素的范圍

a(如果其只包含段落式元素), abbr, area(如果它是map元素的后裔), audio, b, bdi, 
bdo, br, button, canvas, cite, code, command, datalist, del(如果其只包含段落式元素), 
dfn, em, embed, i,iframe, img, input, ins(如果其只包含段落式元素), kbd, keygen, label, 
map(如果其只包含段落式元素), mark, math, meter, noscript, object, output, progress, q, 
ruby, s, samp, script,select, small, span, strong, sub, sup, svg, textarea,
time, u, var, video, wbr, text
  • Embedded(嵌入元素):

嵌入式元素是引用或插入到文檔中其他資源的元素。

audio, canvas, embed, iframe, img, math, object, svg, video
  • Interactive(交互元素):

交互式元素是專門用于與用戶交互的元素。

a, audio(如果設(shè)置了controls屬性), button, details, embed, iframe, img(如果設(shè)置了usemap屬性), 
input(如果"type"屬性不為hidden狀態(tài)), keygen, label, menu(如果"type"屬性為toolbar狀態(tài)),
object(如果設(shè)置了usemap屬性), select, textarea, video(如果設(shè)置了controls屬性)
  • Metadata(元數(shù)據(jù)元素):
base,command,link,meta,noscript,script,style,title
HTML5規(guī)范中的標簽類型關(guān)系圖

最后

希望大家有時間可以去看一下這篇《HTML標簽嵌套規(guī)則》,我也是參考了很多,而且在文章的最后總結(jié)中,驗證了我之前匯總的規(guī)則中的一處錯誤,即:<h1>~<h6>元素內(nèi)嵌入<div>等元素所有瀏覽器可以解析正常。

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

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

  • HTML標簽解釋大全 一、HTML標記 標簽:!DOCTYPE 說明:指定了 HTML 文檔遵循的文檔類型定義(D...
    米塔塔閱讀 3,520評論 1 41
  • HTML4的元素嵌套規(guī)則 在我們的印象中會有這樣的嵌套規(guī)則: 內(nèi)聯(lián)元素不能嵌套塊元素 元素和 元素不能嵌套塊元素 ...
    zpeople閱讀 1,159評論 0 1
  • 學習HTML的最佳網(wǎng)站沒有之一http://www.w3school.com.cn/html/ 關(guān)于HTML/HT...
    Amyyy_閱讀 2,365評論 0 16
  • HTML5 標簽comment 注釋標簽用于在源文檔中插入注釋。注釋內(nèi)容不會被瀏覽器顯示。為代碼編寫注釋的好處是...
    才気莮孒閱讀 4,228評論 1 25
  • 2016-12-31 一年的最后一天,恨不得時間停留,不要過去。然而,它就那么一秒一秒的過去了。這一年,什么目標也...
    優(yōu)雅桃子閱讀 288評論 0 1

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