2016-03-04 61 views
3

如果你只有一行,它是否有效的HTML省略表中的tr元素?如果無效,所有當前的瀏覽器是否按照預期進行解釋?是否沒有tr有效的表?

換句話說,這是否......

<table> 
    <td>column 1</td> 
    <td>column 2</td> 
</table> 

...行爲相同,這...

<table> 
    <tr> 
    <td>column 1</td> 
    <td>column 2</td> 
    </tr> 
</table> 

+0

什麼這樣的問題背後的原因是什麼? – Spidey

+0

@Nimesh如果你不能改變的HTML,但只有CSS和你想使用單排一個表(例如,用於導航菜單),有時有什麼你可以使用「顯示:表單元格」。以一個UL標籤和許多LI標籤爲例,UL標籤不包含在其他元素中。唯一可能的方法是在UL上使用「display:table」,在LI元素上使用「display:table-cell」。這似乎在我測試的瀏覽器中起作用。 – Max

+0

你怎麼才能改變CSS而不是HTML?它是由某個應用程序動態生成的嗎? – Spidey

回答

2

儘管這不是一個有效的HTML按照該規範,現代瀏覽器不規矩嚴格,並提供一個更可讀的輸出給用戶,而不是垃圾是有時的錯誤開發人員(不指向你)。

什麼是有效的,什麼不是,無法確定。此外,如果某些錯誤的代碼被瀏覽器解析,目前無法確保在未來的版本中是否也會這樣做。

檢查以下摘錄約Browser's Error Tolerance從HTMLRocks文章 How Browsers Work: Behind the scenes of modern web browsers。該鏈接還包含一些關於糾錯的例子。

錯誤處理在瀏覽器中相當一致,但足夠驚人 它不是HTML規範的一部分。像書籤和 後退/前進按鈕,它只是多年來在瀏覽器 中開發的東西。有許多已知的無效HTML結構在許多網站上重複,並且瀏覽器試圖以與其他瀏覽器一致的方式修復它們。

HTML5規範確實定義了其中一些要求。 (WebKit的在該 HTML解析器類的開頭註釋很好地總結了這一點。)

解析器解析標記化輸入到文檔中,建立了 文檔樹。如果文檔格式正確,解析它是直接的 。

不幸的是,我們必須處理很多不是 格式良好的HTML文檔,因此解析器必須能夠容忍錯誤。

我們必須採取至少以下錯誤情況的護理:

  1. 正在添加的元素被明確一些外 標籤內禁止。在這種情況下,我們應該關閉所有標籤,直到 禁止元素,然後添加它。

  2. 我們不允許直接添加元素。這可能是因爲 人寫文檔忘記一些標籤之間(或該 標籤中是可選之間)。這可能是以下標籤 的情況:HTML HEAD BODY TBODY TR TD LI(我忘記了嗎?)。

  3. 我們要添加一個內聯元素中塊元素。關閉所有 內聯元素直到下一個更高的塊元素。

  4. 如果這沒有幫助,請關閉元素,直到允許我們添加 元素或忽略標記。

您還可以檢查W3C文章Validating your HTML > Different browsers interpret invalid HTML differently

有效的HTML是你與瀏覽器製造商 唯一的合同。 HTML規範說你應該怎麼寫呢, 他們應該如何解釋您的文檔

....

不同的瀏覽器的行爲都不是不正確;他們都是 試圖填補你的不正確的代碼的差距。底線是, 儘可能避免無效標記!

請注意,HTML5修復了這個問題,因爲它首次在HTML歷史記錄中定義了瀏覽器應該如何處理格式不正確的標記。在 時間來寫作然而,對於這個HTML5錯誤處理的支持是不 跨瀏覽器的普及,所以你還不能依靠它。

4

按照標準這是無效的,但tbody,tr,td瀏覽器忽略這些標籤和相應的結束標籤。但是你不能在標籤之外寫這些標籤。 請看下面的例子爲創建表:http://www.w3schools.com/html/tryit.asp?filename=tryhtml_table_elements

+1

我不確定你是否正確理解我的問題。我澄清了我的例子。如果它無效,至少所有的瀏覽器解釋是否符合預期? – Max

+0

根據語法這是無效的,但瀏覽器忽略這些標記,因此它在我檢查的地方工作。找到給定的鏈接。 –

+0

對不起,瀏覽器在這裏忽略了哪些標籤?在我的例子中,沒有「tr」,因爲它缺失可以忽略。您鏈接到的頁面不回答我的問題,因爲它既不是w3c規範,它會告訴我我的語法是否有效,也沒有測試結果說明沒有tr的語法在所有瀏覽器中都適用。事實上,它至少在Firefox桌面上,但有更多的瀏覽器。 – Max