亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

HTML標簽閉合還是不閉合?

2019-11-14 16:46:08
字體:
來源:轉載
供稿:網友

 你在寫 HTML5 代碼的時候,是否糾結過應該寫 <br /> 還是 <br>,是寫 <input /> 還是寫 <input>。寫 <script src="script.js" /> 為什么是錯的呢?反正我糾結過,而且我發現這個話題其實比我想象中有意思的多。

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

 無內容元素(Void elements)

  無內容元素是一種不能包含任何內容的特殊元素。而其他元素,比如 <div>,則既可以不包含任何內容,又可以包含另一個元素或者文字。

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

  <br> <hr> <img> <input> <link> <meta>

  不太常見的無內容元素有:

  <area> <base> <col> <command> <embed> <keygen>
  <param> <source> <track> <wbr>

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

  <br></br> 這樣的寫法是不合法的 HTML 寫法,因為它暗示 br 可以包含內容(但 <br>你好!</br> 是完全沒有意義的)。而 <br> 和 <br /> 這兩種寫法都很常見。

  盡管我們都知道 XHTML 強制你必須寫成 <br />,但 HTML 里卻沒有明文規定。

  追溯歷史

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

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

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

  知道這層關系后,接下來進入本文最有意思的部分。

  SGML 有一個特性叫做“無尾標簽(NET,Null End Tag)”。當標簽內只有簡單的文字的時候,使用無尾標簽就可以無須再閉合這個標簽了。比如你可以把 <quote>Quoted text</quote> 寫成 <quote/Quoted text/。(你沒有看錯,這個標簽中不含 >。)

  那么,不包含任何內容的標簽就可以寫成 <quote// 了,其中 quote 是標簽名,第一個 / 用于啟用無尾標簽,第二個 / 表示無尾標簽結束。

  如果按照這個邏輯,<br// 中的前半部分 <br/ 會被解析為 <br>,那么 <br/> 豈不是要被解析為 <br>> 了嗎?如果你和我想得一樣,你肯定也會覺得這種語法很蠢。

  不幸的是 HTML4 規范的制定者們不這么認為,并且把它寫進規范里了。不過顯然當時的瀏覽器廠商對這種語法也不以為然,支持的程度不大。(在這一點上,說不定瀏覽器廠商們做了一件好事。)

  XML (也適用于 XHTML)規范的制定者意識到這種語法不怎么好,就直接沒有包含無尾標簽這種特性,
同時為無內容標簽提供了一種比較好理解的語法。這種語法的名字叫做“無元素標簽”,它看起來是這樣的:<br />。這種語法看起來非常自然,因此當時的大多數開發者都認為這才是正確的寫法。

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

  在介紹 HTML5 的新語法時, W3C 說:

HTML5 的語法完全兼容 HTML4 和 XHTML1,但是不兼容 SGML 中那些晦澀的 HTML4 特性。比如無尾標簽(<em/content/)。

  HTML5 好樣的!

 ?。ㄎ矣X得他們應該保留“短標簽”特性,比如 <strong>不錯喲</>,我覺得這個特性很酷。不過,至少現在的 HTML 已經不再是那么雜亂無章了。)

 合法性

  好吧,我們回到文章開頭關于合法性的問題,目前的 HTML5 規范中關于非內容標簽的解釋是這樣的:

此類標簽應由下列部分組成,順序須與下表保持一致:

  • 一個 “<” 字符。
  • 標簽名。
  • 此項可選,一個或多個屬性,每一個屬性的前面必須有一個或多個空格。
  • 此項可選,一個或多個空格。
  • 此項可選,一個 “/” 字符,此項只能在無內容元素中出現。
  • 一個 “>” 字符。

  倒數第二部分的 “/” 字符是可選的,而且沒有任何實際含義。所以 <br> 和 <br /> 其實沒有實質區別。

 正確性

  喜歡 XML 和 XHTML 的開發者可能會說,“對呀,雖然 / 是可選的,但是 <br /> 的寫法‘更正確’一些。”

  我必須告訴你你錯了。事實上,有觀點認為無內容標簽里的 / 其實是一個被容忍的語法錯誤。這種容忍是基于兼容性考慮的,它使得所有瀏覽器和解析器都把 <br> 和 <br /> 同等對待。

  關于這一點,Google 代碼風格指南 也明確規定了不要關閉無內容標簽。

 缺點

  當然,不關閉無內容標簽也有弊端,不過我認為這掩蓋不了它的優點:使你的代碼干凈簡潔。

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

  第二個缺點是編輯器可能對沒有閉合的無內容標簽處理不好。編輯器的開發者們必須了解無內容標簽,提供恰當的語法高亮和代碼補全。當你在編輯器里寫了一個 <input>,編輯器必須要知道它后面永遠不會接一個 </input>。

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

 我對無內容標簽的看法

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

  以 <img> 標簽為例,它有一個強制的 alt 屬性,這個屬性的存在是為了讓那些看不到圖片的用戶(可能是因為生理缺陷,也可能是因為他們使用的設備不支持圖片)知道這個圖片的內容是什么(如果圖片只是處于美觀考慮,你其實不應該添加 alt 屬性)。

  我的問題來了:為什么不用 <img> 的內容代替 alt 屬性?我認為這樣寫更直觀:

  <img src="doge.png">Image of doge</img>。

  <meta> 標簽甚至還有一個叫 content 的屬性!為什么不直接把 content 的值寫在標簽的內容里呢?<input value="Value content"> 應該寫成 <input> Value content</input> ,就像 <textarea> 那樣。其他標簽不一而足。

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

 最后的想法:<script> 標簽

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

  問題在于 <script> 標簽不是一個無內容標簽,你可以把 javaScript 寫在它里面。所以這里并沒有可選的 / 閉合標記(譯注:這就是為什么<script src="script.js" />的寫法是錯的)。

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

  原文鏈接: Matias Meno  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美小视频在线| 亚洲精品视频中文字幕| 情事1991在线| 日韩欧美aaa| 欧美插天视频在线播放| 亚洲自拍偷拍区| 91欧美激情另类亚洲| 91av在线视频观看| 日韩最新av在线| 欧美亚洲成人精品| 日韩亚洲国产中文字幕| 欧美福利视频网站| 国产丝袜一区二区三区| 奇米四色中文综合久久| 一本大道香蕉久在线播放29| 欧美午夜电影在线| 久久精品国产亚洲| 国产精品女人久久久久久| 久久亚洲精品一区二区| 国产日本欧美一区二区三区在线| 精品久久久久久久久久久久| 欧美日本高清视频| 亚洲成人久久久| 国产精品羞羞答答| 97视频免费在线看| 欧美亚洲另类激情另类| 国内精品美女av在线播放| 色综合天天综合网国产成人网| 91精品在线影院| 国产午夜精品免费一区二区三区| 久久不射热爱视频精品| 久久精品亚洲94久久精品| 亚洲天堂免费观看| 亚洲欧美日韩在线高清直播| 日韩电影第一页| 久久久精品免费| 日韩在线免费高清视频| 国产91在线高潮白浆在线观看| 在线电影欧美日韩一区二区私密| 91国产精品电影| 成人在线国产精品| 国产精品99蜜臀久久不卡二区| 欧美激情极品视频| 久久精品国产综合| 欧美日韩午夜剧场| 欧美激情第三页| 国产成人小视频在线观看| 中文字幕在线看视频国产欧美| 日韩精品免费综合视频在线播放| 日韩电影在线观看中文字幕| 亚洲成人xxx| 欧美香蕉大胸在线视频观看| 日日噜噜噜夜夜爽亚洲精品| 欧美激情视频给我| 亚洲第一页自拍| 国产免费观看久久黄| 亚洲网址你懂得| 久久久欧美精品| 日韩在线欧美在线国产在线| 久久久精品亚洲| 国内自拍欧美激情| 成人免费视频在线观看超级碰| 在线国产精品视频| 久久成人av网站| 亚洲人成网站免费播放| 中文字幕在线观看亚洲| 亚洲福利在线视频| 成人激情视频在线播放| 精品久久久免费| 亚洲人成在线观| 亚洲国产精品悠悠久久琪琪| 亚洲第一精品自拍| 成人福利在线视频| 亚洲色图日韩av| 日韩精品免费观看| 欧美精品在线视频观看| 久久久久亚洲精品成人网小说| 国产a∨精品一区二区三区不卡| 国产精品男人爽免费视频1| 国产手机视频精品| 日韩中文字在线| 97久久精品人人澡人人爽缅北| 九九热这里只有在线精品视| 欧美成人在线免费| 国产91网红主播在线观看| 最近中文字幕日韩精品| 欧美性猛交xxxxx免费看| 91精品国产高清久久久久久久久| 国产精品影片在线观看| 黑人巨大精品欧美一区免费视频| 久久成人在线视频| www.99久久热国产日韩欧美.com| 一区二区三区美女xx视频| 免费不卡欧美自拍视频| 久久视频免费观看| 国产精品久久网| 亚洲乱码国产乱码精品精天堂| 亚洲午夜女主播在线直播| 日本伊人精品一区二区三区介绍| 97视频在线播放| 久久久精品久久久久| 午夜精品一区二区三区在线播放| 精品视频中文字幕| 亚洲精品自拍视频| 777777777亚洲妇女| 日韩av电影在线播放| 国内精品400部情侣激情| 97热精品视频官网| 最近2019中文字幕mv免费看| 欧美黑人xxxx| 久久影院模特热| 亚洲精品不卡在线| 成人黄色短视频在线观看| 亚洲精品中文字幕女同| 97超碰蝌蚪网人人做人人爽| 色婷婷亚洲mv天堂mv在影片| 久久综合亚洲社区| 伊人久久久久久久久久久| 91久久精品国产| 欧美在线亚洲一区| 久久天堂av综合合色| 欧美在线观看网站| 中文字幕精品国产| 久久国产精品影片| 日本精品视频在线观看| 日韩欧美国产高清91| 久久免费精品日本久久中文字幕| 国内精品久久久久久中文字幕| 亚洲男人天堂九九视频| 国产亚洲精品久久久久久牛牛| 国产精品7m视频| 久久精品视频免费播放| 国产精品极品尤物在线观看| 日韩毛片在线观看| 久久久噜噜噜久久中文字免| 日韩精品视频免费在线观看| 国产98色在线| 91国内产香蕉| 亚洲香蕉成视频在线观看| 国产精品久久久久久av福利| 中文字幕欧美日韩va免费视频| 欧美成人激情视频免费观看| 成人精品福利视频| 日韩激情视频在线| 中文字幕亚洲一区在线观看| 色综合久久88色综合天天看泰| 亚洲深夜福利在线| 亚洲国内精品视频| 成人黄色免费片| 久久天堂av综合合色| 伊人av综合网| 亚洲最大av在线| 久久精品电影一区二区| 在线观看久久av| 亚洲精品免费在线视频| 中文字幕av一区| 欧美午夜片欧美片在线观看| 色综久久综合桃花网| 久久影院免费观看| 国内揄拍国内精品| 日韩av电影院| 欧美裸身视频免费观看| 57pao国产精品一区| 在线观看成人黄色|