未识别的HTML元素的默认设置

8
如果我在我的HTML中使用自定义或不支持的元素,它们仍然可以被样式化并且浏览器会渲染它们。
例如,HTML5的main元素不受Internet Explorer 11及更早版本的支持(source)。当main由IE渲染时,涉及marginoverflow的CSS规则将被忽略。这意味着未识别元素的display值为inline
未识别元素的初始设置在哪里定义?
(注意:我不是在询问使用自定义元素的利弊,我只想知道CSS默认情况下会做什么。)

如果它是未被识别的...它怎么可能有默认属性呢?你必须检查规范。我建议这是特定于浏览器的。= https://www.w3.org/TR/custom-elements/ - Paulie_D
谢谢,@Paulie_D。我认为CSS有处理未识别元素的规则(请见此答案中的注释)。该规则可能只是采用CSS属性的初始值。我正在努力找到规范中定义的处理位置,但我的搜索没有结果。 - Michael Benjamin
我认为它们没有被定义...因为开发人员应该定义它们...所以每个浏览器的行为都是随意的。 - Paulie_D
2
这里有各种有趣的东西 - https://dev59.com/9GIj5IYBdhLWcg3wWj6d - Paulie_D
1
特别是这个 - https://www.w3.org/TR/2011/WD-html5-20110405/infrastructure.html#other-applicable-specifications - Paulie_D
显示剩余2条评论
1个回答

7

问题不在于未被识别的元素,而是所有元素。请记住CSS支持XML和HTML。在XML中,所有元素都是未被识别的。

CSS 2.1规范中第6.1.1节指出:

6.1.1 指定值

用户代理必须首先根据以下机制(按优先级顺序)为每个属性分配指定值:

  1. 如果级联结果有一个值,则使用它。但是,如果该值是“inherit”,则在下面的“'inherit'值”中定义指定值。

  2. 否则,如果属性是继承的并且元素不是文档树的根,则使用父元素的计算值。

  3. 否则使用属性的初始值。每个属性的初始值在属性的定义中指示。

根据定义,未被识别的元素不会在用户代理样式表中提到,并且由于我们正在谈论默认行为,它们也不会在作者样式表中提到。因此1不适用。

显示属性在9.2.4“display”属性中定义。在那里的规则中,它说Inherited: no,因此2不适用。

因此3适用。再次从9.2.4的规则中,我们有Initial: inline,所以这些元素是内联的。

对于HTML块级元素,默认情况下它们是块级的,仅仅因为它们在用户代理的样式表中被列为这样。同样地,其他显示值如tablelist-item等。


只是为了明确:如果没有用户代理样式表,所有元素默认都是display: inline吗?所有元素将使用CSS属性的初始值? - Michael Benjamin
1
@Michael_B - 没错。大体上是这样的:在HTML中有一些东西无法直接在CSS中复制,例如表单元素以及表格中的rowspan和colspan。因此,偶尔浏览器会将某些HTML元素视为“魔法”。 - Alohci
1
@Michael_B:是的 - 这就是为什么存在初始值的概念。 - BoltClock
@BoltClock,有趣的是:并非所有CSS属性都有初始值(例如font-familycolor)。 - Michael Benjamin
1
@Michael_B:是的,其中一些由浏览器决定,在许多情况下可以通过用户首选项进行配置。 - BoltClock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接