这些 HTML <c- g> 标签是什么?未定义的自定义元素?

What are these HTML <c- g> tags? Undefined custom element?

在查看 HTML 标准的源代码时,有一些我不认识的标签..

例如在这个片段中:

    <pre><code class='idl'>[<c- g>Exposed</c->=<c- n>Window</c->]
<c- b>interface</c-> <dfn id='htmlparagraphelement' data-dfn-type='interface'><c- g>HTMLParagraphElement</c-></dfn> : <a id='the-p-element:htmlelement' href='dom.html#htmlelement'><c- n>HTMLElement</c-></a> {
  [<a id='the-p-element:htmlconstructor' href='dom.html#htmlconstructor'><c- g>HTMLConstructor</c-></a>] <c- g>constructor</c->();

  // <a href='obsolete.html#HTMLParagraphElement-partial'>also has obsolete members</a>
};</code></pre>

来自https://html.spec.whatwg.org/multipage/grouping-content.html

我认为这些可能是自定义元素,但看起来它们并不是通过自定义元素注册表定义的。这是询问 customElements 对象的结果。

>>> customElements.get('c')
undefined
>>> customElements.get('c-')
undefined

这是允许的吗? (我猜是这样,因为它来自 HTML 标准 ,但它仍然让我感到惊讶)。浏览器如何知道这些元素应该如何显示?例如 display: blockdisplay: inline.

这些是由 bikeshed's highlighter 生成的自定义元素(并且有效 HTML)。

没有必要将它们定义为自定义元素,因为它们不会带来任何特定行为,它们所做的只是......节省带宽。

这是the commit摘录:

TERRIBLE-HACK-ALERT Switch to using <c- kt> instead of <span clas…

…s='kt'> to cut the weight of highlighting in half. Still valid HTML!

显然,通过从 <span class="kt"> 切换到 <c- kt>(以及 span.kt {c-[kt]{),他们节省了一半由突出显示引起的权重。

虽然正如他们所说,这是一个“糟糕的 hack”,但在构建生成大多数 Web 标准页面的工具时仍然有意义,这可能会变得非常冗长。


关于此类自定义元素的默认显示,我将引用Alohci's ,它确实很好:

All elements take the initial, or inherited for inherited properties, value of each CSS property until specified otherwise. So they would be display:inline


关于您期望在规范来源中仅看到最佳实践,最好不要这样假设。阅读这些页面的内容,不要看它们是如何构建的。
大多数 HTML 编辑不会查看生成页面的工具,他们使用充满模板的伪HTML 语言编写规范。
或者在 source:

<!-- Note: This file is NOT HTML, it's a proprietary language that is then post-processed into HTML. -->