2016-02-28 93 views
8

如果我在我的HTML中使用自定義元素或不受支持的元素,仍然可以對其進行樣式化,並且瀏覽器將呈現它們。無法識別的HTML元素的默認設置

例如,Internet Explorer 11及更早版本(source)不支持HTML5 main元素。當main由IE呈現時,涉及marginoverflow的CSS規則將被忽略。這意味着無法識別元素的display值是inline

定義無法識別元素的初始設置在哪裏?

(注意:我不要求有關使用自定義元素的利弊,我只是想知道什麼CSS的默認操作。)

+0

如果它是無法識別的......怎麼能有默認屬性?你必須檢查規格。我建議它是瀏覽器特定的。 = https://www.w3.org/TR/custom-elements/ –

+0

謝謝,@Paulie_D。我的印象是,CSS有處理無法識別的元素的規則(請參閱[本答覆中的註釋](http://stackoverflow.com/a/35688664/3597276))。規則可能只是採取CSS屬性的初始值。我試圖找到規範中的處理定義,但我的搜索沒有結果。 –

+0

我在想什麼是他們**沒有被定義......因爲開發人員應該定義他們...所以它是任意的,每個瀏覽器的功能。 –

回答

5

這與其說無法識別元素,如所有元素。請記住,CSS支持XML和HTML。在XML中,所有的元素都是無法識別

在CSS 2.1規範,section 6.1.1說:

6.1.1的指定值

用戶端必須指定值首先分配給基於 每個屬性在以下機制(按優先級的順序):

  1. 如果在一個值的級聯結果, 用它。除此之外,如果值爲'繼承',則指定的值在「繼承」下面的「 值」中定義。

  2. 否則,如果該屬性是繼承的,並且該元素不是文檔樹的根目錄,請使用父元素的計算結果值 。

  3. 否則,使用屬性的初始值。每個屬性的初始值在屬性的定義中指出。

根據定義,未知的元素不會在用戶代理樣式表中提到,因爲我們正在談論的默認行爲,將不會在作者樣式表或者提及。所以1不適用。

的顯示屬性在9.2.4 The 'display' property定義。在那裏的規則,它說Inherited: no,所以2不適用。

所以3適用。同樣來自9.2.4的規則,我們有Initial: inline,所以元素是內聯的。

對於HTML塊級元素,它們是由缺省塊僅僅是因爲它們在用戶代理的樣式表列出象這樣。同樣,對於其它的顯示值,例如tablelist-item

+0

只是要清楚:如果不是用戶代理樣式表,所有元素默認情況下是「display:inline」?所有元素都會使用CSS屬性的初始值? –

+1

@Michael_B - 沒錯。無論如何:或多或少:HTML中有一些不能直接在CSS中複製的東西。例如表單元素,表格中的rowspan和colspan。所以瀏覽器偶爾會將一些HTML元素視爲「魔術」。 – Alohci

+1

@Michael_B:是的 - 這就是爲什麼存在初始值的概念。 – BoltClock