為什麼是錯的呢?反正我糾結過,而且我發現這個話題其實比我想像中有意思的多。"/> 為什麼是錯的呢?反正我糾結過,而且我發現這個話題其實比我想像中有意思的多。">
搜尋
首頁web前端html教學html標籤到底閉合還是不閉合

  你在寫 HTML5 程式碼的時候,是否糾結過應該寫
還是
,寫 還是寫 。寫 為什麼是錯的呢?反正我糾結過,而且我發現這個話題其實比我想像中有意思的多。

  如果你對我的研究過程不感興趣,你可以直接跳到「合法性」這一節得到答案。

 無內容元素(Void elements)

  無內容元素是一種不能包含任何內容的特殊元素。而其他元素,如

,則既可以不包含任何內容,又可以包含另一個元素或文字。

  比較常見的無內容元素有:

  


html標籤到底閉合還是不閉合



##   較不常見的無內容元素有:

  

  

  現存所有的無內容元素就是以上這些了。

  
這樣的寫法是不合法的 HTML 寫法,因為它暗示 br 可以包含內容(但
你好! 是完全沒有意義的)。而

這兩種寫法都很常見。

  雖然我們都知道 XHTML 強制你必須寫成
,但 HTML 裡卻沒有明文規定。

  追溯歷史

#   為了完全地了解無內容元素,我們有必要了解一下它的歷史。

  HTML、XML 和 XHTML 都是基於 SGML 的,SGML 的全名是“標準通用標記語言”,起草於1986年。
  HTML 和 XML 都派生自 SGML,其中 XML 是 SGML 的約束性子集,而 XHTML 是基於 XML 的。

# XHTML 基本上和 HTML 一樣,但是是基於 XML 的。

#   知道這層關係後,接下來進入本文最有趣的部分。

  SGML 有一個特性叫做「無尾標籤(NET,Null End Tag)」。當標籤內只有簡單的文字的時候,使用無尾標籤就可以無須再閉合這個標籤了。例如你可以把 Quoted text 寫成 。)

#   那麼,不包含任何內容的標籤就可以寫成

  如果按照這個邏輯,
,那麼
豈不是要被解析為
> 了嗎?如果你跟我想得一樣,你一定也會覺得這種文法很蠢。

  不幸的是 HTML4 規範的製定者們不這麼認為,並且把它寫進規範裡了。不過顯然當時的瀏覽器廠商對這種語法也不以為然,支援的程度不大。 (在這一點上,說不定瀏覽器廠商們做了一件好事。)
    #   XML (也適用於 XHTML)規範的製定者意識到這種語法不怎麼好,就直接沒有包含無尾標籤這種特性,
  • 同時為無內容標籤提供了一種比較好理解的語法。這種語法的名字叫做“無元素標籤”,它看起來是這樣的:
    。這種語法看起來非常自然,因此當時的大多數開發者都認為這才是正確的寫法。

      幸運地是 HTML 一直在改進,W3C 的成員一直在從他們過去作出的錯誤中學習經驗教訓。因此 HTML5 相比之前的版本才有這麼大的進步。
  •   在介紹 HTML5 的新語法時, W3C 說:


    # HTML5 的語法完全相容於 HTML4 和 XHTML1,但不相容於 SGML 中那些晦澀的 HTML4 特性。例如無尾標籤(
  • #   HTML5 好樣的!

  • (我覺得他們應該保留「短標籤」特性,例如不錯喲>,我覺得這個特性很酷。不過,至少現在的HTML 已經不再是那麼雜亂無章了。)
  •  合法性

      好吧,我們回到文章開頭關於合法性的問題,目前的 HTML5 規範中關於非內容標籤的解釋是這樣的:######### 此類標籤應由下列部分組成,順序須與下表一致:################ 一個 “
  • # 此項可選,一個或多個屬性,每一個屬性的前面必須有一個或多個空格。


  • # 此項可選,一個或多個空格。


  • # 此項可選,一個 “/” 字符,此項只能在無內容元素中出現。


  • # 一個 “>” 字元。

  倒數第二部分的 “/” 字元是可選的,而且沒有任何實際意義。所以

其實沒有實質差別。

 正確性

  喜歡 XML 和 XHTML 的開發者可能會說,「對呀,雖然 / 是可選的,但是
的寫法『更正確』一些。」

#   我必須告訴你你錯了。事實上,有觀點認為無內容標籤裡的 / 其實是一個被容忍的語法錯誤。這種容忍是基於相容性考慮的,它使得所有瀏覽器和解析器都把

同等對待。

  關於這一點,Google 程式碼風格指南 也明確規定了不要關閉無內容標籤。

 缺點

  當然,不關閉無內容標籤也有弊端,不過我認為這掩蓋不了它的優點:使你的程式碼乾淨簡潔。

  第一個缺點就是開發者必須知道哪些標籤的無內容標籤。假設你不知道 html標籤到底閉合還是不閉合 是不是無內容標籤,那麼當你找不到它的閉合標籤時,你就會疑惑到底應不應該關閉這個標籤。不過無內容標籤總共也只有那麼幾個,而且一般一眼就能看出來某個標籤是不是無內容標籤。

  第二個缺點是編輯器可能對沒有閉合的無內容標籤處理不好。編輯器的開發者必須了解無內容標籤,提供適當的語法高亮和程式碼補全。當你在編輯器裡寫了一個 ,編輯器必須知道它後面永遠不會接一個 。

  但是這些功能實作起來很簡單,我所知道的編輯器對這方面支援得都還挺好,所以這算不上一個真正的缺點。

 我對無內容標籤的看法

#   我覺得無內容標籤這個概念其實是可以從 HTML 中剔除的,我們完全可以為這些標籤添加內容,來取代它的某些屬性。

html標籤到底閉合還是不閉合 標籤為例,它有一個強制的alt 屬性,這個屬性的存在是為了讓那些看不到圖片的使用者(可能是因為生理缺陷,也可能是因為他們使用的裝置不支援圖片)知道這張圖片的內容是什麼(如果圖片只是處於美觀考慮,你其實不應該加入alt 屬性)。

  我的問題來了:為什麼不用 html標籤到底閉合還是不閉合 的內容來取代 alt 屬性?我認為這樣寫比較直觀:

  html標籤到底閉合還是不閉合Image of doge。

   標籤甚至還有一個叫 content 的屬性!為什麼不直接把 content 的值寫在標籤的內容裡呢? 應該寫成 Value content ,就像

  所以真正應該保留的無內容標籤只有少數幾個,只不過 W3C 必須考慮向後相容性,所以要改變現狀還是很困難的。

 最後的想法:<script> 標籤</script>

#   這個標籤真的很困擾我,因為它的意義很簡單,寫法卻很囉嗦。 這種寫法看起來似乎是錯的,因為 <script> 的內容與 my-script.js 並沒有邏輯關聯。 (HTML 規格允許你同時為它添加內容和 src 屬性)</script>

  問題在於 <script> 標籤不是無內容標籤,你可以把 JavaScript 寫在它裡面。所以這裡並沒有可選的 / 閉合標記(譯註:這就是為什麼<script src="script.js" />的寫法是錯的)。 </script>

  使用 標籤來代替 <script> 就完美了,因為它已經被用於導入外部文件,而且提供了所有必需的屬性。當然,Web 平台總是需要考慮向後相容,不然所有不支援這種語法的舊式瀏覽器全都無法解析你的頁面了。 </script>

  原文連結: Matias Meno   翻譯: 伯樂線上 - 方應杭

以上是html標籤到底閉合還是不閉合的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
HTML中的布爾屬性是什麼?舉一些例子。HTML中的布爾屬性是什麼?舉一些例子。Apr 25, 2025 am 12:01 AM

布爾屬性是HTML中的特殊屬性,不需要值即可激活。 1.布爾屬性通過存在與否控制元素行為,如disabled禁用輸入框。 2.它們的工作原理是瀏覽器解析時根據屬性的存在改變元素行為。 3.基本用法是直接添加屬性,高級用法可通過JavaScript動態控制。 4.常見錯誤是誤以為需要設置值,正確寫法應簡潔。 5.最佳實踐是保持代碼簡潔,合理使用布爾屬性以優化網頁性能和用戶體驗。

如何驗證您的HTML代碼?如何驗證您的HTML代碼?Apr 24, 2025 am 12:04 AM

HTML代碼可以通過在線驗證器、集成工具和自動化流程來確保其清潔度。 1)使用W3CMarkupValidationService在線驗證HTML代碼。 2)在VisualStudioCode中安裝並配置HTMLHint擴展進行實時驗證。 3)利用HTMLTidy在構建流程中自動驗證和清理HTML文件。

HTML與CSS和JavaScript:比較Web技術HTML與CSS和JavaScript:比較Web技術Apr 23, 2025 am 12:05 AM

HTML、CSS和JavaScript是構建現代網頁的核心技術:1.HTML定義網頁結構,2.CSS負責網頁外觀,3.JavaScript提供網頁動態和交互性,它們共同作用,打造出用戶體驗良好的網站。

HTML作為標記語言:其功能和目的HTML作為標記語言:其功能和目的Apr 22, 2025 am 12:02 AM

HTML的功能是定義網頁的結構和內容,其目的在於提供一種標準化的方式來展示信息。 1)HTML通過標籤和屬性組織網頁的各個部分,如標題和段落。 2)它支持內容與表現分離,提升維護效率。 3)HTML具有可擴展性,允許自定義標籤增強SEO。

HTML,CSS和JavaScript的未來:網絡開發趨勢HTML,CSS和JavaScript的未來:網絡開發趨勢Apr 19, 2025 am 12:02 AM

HTML的未來趨勢是語義化和Web組件,CSS的未來趨勢是CSS-in-JS和CSSHoudini,JavaScript的未來趨勢是WebAssembly和Serverless。 1.HTML的語義化提高可訪問性和SEO效果,Web組件提升開發效率但需注意瀏覽器兼容性。 2.CSS-in-JS增強樣式管理靈活性但可能增大文件體積,CSSHoudini允許直接操作CSS渲染。 3.WebAssembly優化瀏覽器應用性能但學習曲線陡,Serverless簡化開發但需優化冷啟動問題。

HTML:結構,CSS:樣式,JavaScript:行為HTML:結構,CSS:樣式,JavaScript:行為Apr 18, 2025 am 12:09 AM

HTML、CSS和JavaScript在Web開發中的作用分別是:1.HTML定義網頁結構,2.CSS控製網頁樣式,3.JavaScript添加動態行為。它們共同構建了現代網站的框架、美觀和交互性。

HTML的未來:網絡設計的發展和趨勢HTML的未來:網絡設計的發展和趨勢Apr 17, 2025 am 12:12 AM

HTML的未來充滿了無限可能。 1)新功能和標準將包括更多的語義化標籤和WebComponents的普及。 2)網頁設計趨勢將繼續向響應式和無障礙設計發展。 3)性能優化將通過響應式圖片加載和延遲加載技術提升用戶體驗。

HTML與CSS vs. JavaScript:比較概述HTML與CSS vs. JavaScript:比較概述Apr 16, 2025 am 12:04 AM

HTML、CSS和JavaScript在網頁開發中的角色分別是:HTML負責內容結構,CSS負責樣式,JavaScript負責動態行為。 1.HTML通過標籤定義網頁結構和內容,確保語義化。 2.CSS通過選擇器和屬性控製網頁樣式,使其美觀易讀。 3.JavaScript通過腳本控製網頁行為,實現動態和交互功能。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。