css - last-of-type 不适用于 IE11 和 Edge 中的自定义元素

标签 css html css-selectors internet-explorer-11 microsoft-edge

.foo bar:last-of-type {
  background-color: red;
}
<div class="foo">
  <bar>bar</bar>
  <bar>bar</bar>
  <bar>bar</bar>
  <span>span</span>
</div>

<div class="foo">
  <bar>bar</bar>
  <bar>bar</bar>
  <bar>bar</bar>
  <baz>baz</baz>
</div>

在 Chrome 和 Firefox 中,最后一个 bar 显示为红色。然而,在 IE11 和 Edge 中,它在第二种情况下不起作用。这是怎么回事?

最佳答案

IE 似乎将所有未知元素视为相同的元素类型。如果删除 bar 类型选择器,您将看到 IE 匹配 baz 元素(并且仅匹配该元素):

.foo :last-of-type {
  background-color: red;
}
<div class="foo">
  <bar>bar</bar>
  <bar>bar</bar>
  <bar>bar</bar>
  <span>span</span>
</div>

<div class="foo">
  <bar>bar</bar>
  <bar>bar</bar>
  <bar>bar</bar>
  <baz>baz</baz>
</div>

这种行为也出现在 Microsoft Edge 中。

Microsoft 是否承认这是一个错误?好吧,我还没有发现任何与此相关的错误报告。这是否违反规范?这取决于您是否认为未知元素属于同一元素类型(请注意,我说的是 DOM,而不是 HTML)。选择器和 DOM 规范都没有提到未知元素(大概是因为未知元素首先是不符合规范的)。

请注意,我一直说“未知元素”,因为在您注册自定义元素之前,您实际上并没有自定义元素(从而使它像所有其他标准元素一样成为已知元素)。此外,IE 不支持任何即将发布的标准定义的自定义元素,并且 Microsoft Edge 尚未提供该功能。自定义元素很好,只要您使用的浏览器支持该功能或其 polyfill。与任何其他有意偏离标准的元素一样,未知元素是明确的不良做法,可能导致意外行为,even if the spec requires browsers to treat them as first-class citizens for the purposes of the DOM and CSS ,其原因在 this answer 中有充分论证。 .

关于css - last-of-type 不适用于 IE11 和 Edge 中的自定义元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38666233/

相关文章:

CSS floats 'boxes' 布局不同大小的盒子

javascript - 如果父 div hasClass() 则显示跨度

html - 在同一个 id 中列出多个元素并用逗号分隔是否正确?

css - 恶作剧,同时调整右侧绝对定位的 div

javascript - Emotion CSS 宏有什么作用,我该如何使用它?

javascript - 如何在 javascript 中没有键的情况下对 forEach 结果进行分组?

javascript - 为什么 'v-show'命令影响html正常布局(div的位置发生意外变化)

html - 动态输入框中的字符数

css - 有没有办法在 CSS 中查询具有多个类的元素?

css - 悬停时边框颜色变化