为什么 Custom Elements 会在外部的 CSS 样式中失效?

Custom Elements(自定义元素)是 Web Components 规范其中的一部分。它允许开发者创建和注册自定义的 HTML 元素,而不是只能使用内置的 HTML 元素。但是,我们发现在某些情况下,Custom Elements 在外部的 CSS 样式中会失效。本文将会解释为什么会出现这种现象,并提供解决方案。

问题的背景

通常情况下,我们可以通过以下方法来定义一个 Custom Element:

--------- -----------------------
  -------
    -- ---- ------ --- --- ------ ------- --
  --------

  ---- --- --------- -- --- ------ ------- ---
-----------

--------
  ----- --------------- ------- ----------- -
    ------------- -
      --------
      ----- -------- - ---------------------------------------------
      ----- ------- - -----------------

      ------------------- ----- ------ ----------------------------------------
    -
  -

  ------------------------------------------ -----------------
---------

这段代码定义了一个名为 my-custom-element 的 Custom Element,并在它的内部添加了一些 CSS 样式和 HTML 结构。当我们在 HTML 中使用这个元素时,它会自动应用样式和结构,如下所示:

---------------------------------------

但是,当我们在外部样式表中定义样式时:

----------------- -
  ------ ----
-

我们会发现,在浏览器中元素不会应用 color: red 样式。

问题的原因

这是因为浏览器在加载 CSS 样式表时,会先解析 HTML 文档,然后再应用样式。换言之,当浏览器加载文档时,Custom Element 还不存在,因此浏览器无法找到匹配的元素。因此,CSS 样式表中定义的样式无法应用在 Custom Element 上。这也是为什么当我们将样式定义放在 Custom Element 的内部时,就可以正常应用样式。

解决方案

为了解决这个问题,一个常见的方法是在 Custom Element 的构造函数中动态地向文档添加样式。例如:

--------
  ----- --------------- ------- ----------- -
    ------------- -
      --------
      ----- -------- - ---------------------------------------------
      ----- ------- - -----------------

      ----- ----- - --------------------------------
      ----------------- - -
        ----------------- -
          ------ ----
        -
      --

      ------------------- ----- ------ ----------------------
      -----------------------------------------------------
    -
  -

  ------------------------------------------ -----------------
---------

通过动态添加样式表,我们可以在 Custom Element 中设置样式。这样,我们就可以在外部 CSS 样式表中定义样式,并将其应用到自定义元素中。例如:

-------
  ----------------- -
    ------ ----
  -
--------

---------------------------------------

现在,它将显示为红色。

结论

Custom Elements 在外部的 CSS 样式表中失效是由于浏览器在加载 CSS 样式表时,先解析 HTML 文档,然后再应用样式。通过动态添加样式表,我们可以在 Custom Element 中设置样式,并在外部 CSS 样式表中定义样式。这为我们提供了一种解决方案,使我们可以更灵活地控制 Custom Element 的样式。

因此,在实际开发中,我们应该始终考虑 Custom Elements 是否同时在内部和外部样式表中使用,以便在必要时能够采取适当的措施。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672033de2e7021665e0122d8