我可以仅将样式应用于我的应用程序组件吗?

Posted

技术标签:

【中文标题】我可以仅将样式应用于我的应用程序组件吗?【英文标题】:Can I apply a style only to my applications components? 【发布时间】:2022-01-10 07:03:14 【问题描述】:

所以我想为我的整个应用做一些事情,比如

  div 
    width: 100%;
  

这很好用。但是,一旦我开始包含期望 div 具有不同默认值的 3rd 方组件,它就会开始导致问题 - 我需要发现任何发生这种情况的情况。

是否有任何解决方法,这样我的应用程序中的组件会获得一些默认样式,但它不会渗入 3rd 方的东西?我使用styled-components 来应用样式,但这个问题可能适用于其他库。

【问题讨论】:

您标记了您的问题shadow-dom。 shadowDOM 内部的<div>s 永远不会被全局 CSS 样式化。这就是 shadowDOM 的主要目的。 【参考方案1】:

如果您可以使用类标记第三方组件,请说thirdParty。否则,如果您可以在第三方组件周围添加带有标签的包装器。然后你可以像这样使用:not()

/* your local rules */
div:not(.thirdParty, .thirdParty *) 
  width: 100%;
  background-color: lightgreen;
  text-align: center;
<div>local one</div>

<div class="thirdParty">third party Parent
  <div>---third party child
    <div>------third party grand child</div>
  </div>
</div>

<div>local two</div>

【讨论】:

以上是关于我可以仅将样式应用于我的应用程序组件吗?的主要内容,如果未能解决你的问题,请参考以下文章

仅将 CSS 样式表应用于单个 UserControl

我可以避免使用 Vue.js 组件的重复样式吗?

是否可以将焦点应用于我的 React 组件之一内的输入元素,而无需直接将 ref 分配给输入标签?

如何仅将加载状态应用于 livewire 中的特定组件

如何仅将 CSS 样式应用于文本

Chrome不会将我的XSLT样式表应用于我的本地XML文件