HTML 元素嵌套关系

a>div 是否合法?

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>default style</title>
  </head>
  <body>
    <div><a href="#">DIV &gt; A</a></div>  // [!code focus:5]
    <a href="#"><div>A &gt; DIV</div></a>
    <p>
      <a href="#"><div>P &gt; A &gt; DIV</div></a>
    </p>
  </body>
</html>

HTML4

HTML5

文档地址:HTML Standard (whatwg.org)

The a element

The p element

所以浏览器最终会将上面的 HTML 案例解析为

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>default style</title>
  </head>
  <body>
    <div><a href="#" target="_self">DIV &gt; A</a></div>   // [!code focus:5]
    <a href="#" target="_self"><div>A &gt; DIV</div></a>
    <p><a href="#" target="_self"></a></p>
    <div><a href="#" target="_self">P &gt; A &gt; DIV</a></div>
    <p></p>
  </body>
</html>

判断元素嵌套是否合法

  1. 使用 The W3C Markup Validation Service 检查 HTML 文档是否符合其规范。
  2. 查阅 Allowed nesting of elements in HTML 4 (and XHTML 1.0) (jkorpela.fi) 和 W3C HTML Standard (whatwg.org) 文档。查找元素的 Categories 和 Content model,然后看被嵌套的元素属不属于它的 Content model。如果属于就可以嵌套,如果不属于就不能嵌套。