【问题标题】:Do custom HTML elements inherit parent CSS styles?自定义 HTML 元素是否继承父 CSS 样式?
【发布时间】:2016-07-15 00:14:36
【问题描述】:

在 HTML 中创建自定义元素时,子标签是否继承父标签的 CSS 样式?

这是我的测试用例,来自 Chrome:

var h1bProto = document.registerElement ('h1-b', 
{
  prototype: Object.create (HTMLHeadingElement.prototype),
  extends: "h1"
});

当我使用新的 h1bProto 附加一个孩子时,它会生成一个带有 is="h1-b" 的 H1 标签,示例如下:

var node = document.body.appendChild (new hibProto());
node.textContent = "Hello";

<h1 is="h1-b">Hello</h1>

你好

这给了我父母的 CSS 样式。但是,如果我通过先创建元素然后附加节点来添加节点,则代码如下所示:

var node = document.createElement ("h1-b");
node.textContent = "Hello";
document.body.appendChild (node);

<h1-b>Hello</h1-b>

你好

是我遗漏了什么,还是孩子没有继承父母的 CSS 样式?如果他们不这样做,那么使用 Shadow DOM 是不是最好的解决方法?

【问题讨论】:

    标签: javascript html css custom-controls


    【解决方案1】:

    根据W3 spec you aren't going crazy!

    尝试使用自定义的内置元素作为自主自定义 元素将不起作用;也就是说,点击 我?将简单地创建一个没有特殊的 HTMLElement 行为。

    Aka,在您的示例中,使用 &lt;h1-b&gt; 制作标签将不会应用 &lt;h1&gt; 标签的样式或行为。相反,您必须创建一个 &lt;h1&gt; 标记,并将 is 属性设置为您的自定义元素的名称。我在规范中链接到的部分实际上很好地解释了如何创建标签。

    总而言之,你只需要像这样制作你的元素:

    document.createElement("h1", { is: "h1-b" });
    

    想到这一点的一个原因是大多数机器人不解析您的 javascript。因此,他们将很难弄清楚你的 dom 中的元素到底是什么。想象一下,如果机器人没有意识到您的 &lt;h1-b&gt; 元素真的是 &lt;h1&gt; 元素,那么您的 seo 会崩溃多少!

    【讨论】:

    • 嗯...搜索引擎优化的...是的,同意! =)
    • @E Net Arch。如果这回答了您的问题,您可以将其标记为您的答案吗?如果不能,您能告诉我们原因吗?
    • 在考虑了自定义 Ht ML 标签如何干扰 SEO 之后,我不得不不同意。但是,我在这里提出您的理由,以便其他人理解。 P 标签帮助机器人了解 TEXT 的位置,而不是在标签属性值中嵌入数据的自定义标签。而且,这与 XML 不同,它使用名称值对,可以将其转换为 HTML。所有这些,拓宽了我的话题,也让我脱离了话题。
    • 虽然这个答案确实解决了问题....这是默认行为..我希望其他人能提供他们的观点。从那以后,我与之交谈过的许多其他开发人员都在他们的文档中使用了自定义标签。然而,他们的观点只会解决 SEO 问题,这在技术上是题外话。
    • 啊,如果您对 SEO 部分有异议,我很乐意删除我的答案的那部分(因为这只是推测)。然后我们可以再发一个 SO 帖子,我很乐意将我的猜想粘贴在那里作为答案。这有点罗嗦,但可能是这样的问题:“为什么 W3 规范会阻止您使用自定义的内置元素作为自主自定义元素”。这样我们就可以重点关注这个答案,而其他帖子也会得到很好的关注。
    猜你喜欢
    • 2016-10-11
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多