在 HTML 中,並沒有嚴格意義上“哪些塊級元素裡不能放哪些塊級元素”的規定。幾乎所有塊級元素都可以互相巢狀。但是,有一些最佳實踐和約定俗成的用法,以及一些語義上的考慮,會建議避免某些塊級元素的巢狀方式。
以下是一些需要謹慎使用或避免的巢狀情況,以及原因:
-
p
元素內不能包含塊級元素: 這是 HTML 規範明確規定的。p
元素 (段落) 用於文字內容,不能包含div
,h1
-h6
,ul
,ol
,li
,dl
,dt
,dd
,table
等塊級元素。瀏覽器通常會自動關閉p
標籤,並在外部重新渲染內部的塊級元素。 -
列表元素 (
ul
,ol
) 的直接子元素應該是li
: 雖然技術上可以在列表元素內放置其他塊級元素,但語義上來說,列表項 (li
) 才是列表的直接子元素。如果需要在列表項內使用塊級元素進行佈局,應該將塊級元素放在li
元素內部。 -
表格元素 (
table
,thead
,tbody
,tfoot
,tr
,td
,th
) 的巢狀需要遵循規範: 表格元素有一套特定的巢狀規則,例如table
內可以包含thead
,tbody
,tfoot
,thead
,tbody
,tfoot
內可以包含tr
,tr
內可以包含th
或td
。不遵循這些規則可能會導致瀏覽器渲染出錯。 -
標題元素 (
h1
-h6
) 通常不巢狀: 雖然技術上可以巢狀標題元素,但從語義和可訪問性的角度來看,最好避免這樣做。標題元素用於表示文件的結構和層次,巢狀標題會使結構變得混亂。 -
避免過度巢狀: 過多的巢狀會使 HTML 結構變得複雜,難以維護和理解,也會影響頁面效能。儘量保持結構簡潔清晰。
總而言之,與其關注哪些塊級元素不能巢狀,不如關注如何正確地使用 HTML 元素來表達文件的語義和結構。遵循 HTML 規範和最佳實踐,避免不必要的巢狀,才能建立出高質量、易於維護的網頁。
除了以上這些,還有一些情況需要根據具體場景進行判斷:
-
article
、section
、aside
、nav
等語義化標籤的巢狀: 這些標籤的巢狀應該符合文件的邏輯結構。例如,article
可以巢狀section
,表示文章的不同章節,但不要過度巢狀或濫用這些標籤。 -
自定義元件的巢狀: 在使用前端框架或自定義元件時,可能會有特定的巢狀規則,需要參考相關的文件。
總而言之,靈活運用 HTML 元素,並始終牢記語義和結構的重要性,才能寫出優秀的 HTML 程式碼。