如何将全局样式移动到情感范围内?

Jul*_*ode 5 javascript css emotion reactjs

我目前需要将库的通用组件集成到多个网站中。组件库目前有一个全局样式。他们以下列方式注入:

  <Global
    styles={`
        div {
          padding: 0;
        }
    `}
  />
Run Code Online (Sandbox Code Playgroud)

我希望“全局样式”仅适用于该库的组件。它们只出现在页面的一部分上。

所以我试过这个:

const Styles = styled.div`
        div {
          padding: 0;
        }
`;

const Page = () => (
    <Styles>
        <SomeComponentsOfTheLibrary />
    </Styles>
);
Run Code Online (Sandbox Code Playgroud)

但似乎所有的东西Styles都有优先权。然后,如果组件padding: 10px;将采取padding: 0;Styles

这是重现的问题:

我知道这是一个 css 问题,但我想用情感来解决它

我已经看到了:

Jul*_*ode 3

如何将全球风格融入情感范围?

@Andarist通过创建一个额外范围的 stylis 插件找到了解决方案

例子

使用 stylis 插件创建缓存以获得额外的范围

const STRONG_ID = 'very-strong-id';
const cache = createCache({
  stylisPlugins: [createExtraScopePlugin(`#${STRONG_ID}`)],
});
Run Code Online (Sandbox Code Playgroud)

在缓存提供程序中使用全局样式

     <CacheProvider value={cache}>
        <Global
          styles={css`
            div {
              background-color: red;
            }
          `}
        />
        <div id={STRONG_ID}>
          <div>I must be red (global style scoped to the parent div)</div>
          <Container>
            I must be blue (local style defined on this div)
          </Container>
        </div>
      </CacheProvider>
Run Code Online (Sandbox Code Playgroud)

那么你的全局样式的范围将是very-strong-id

您可以在这里找到示例

希望它能帮助将来的人