从 CSS 模块内访问全局类

1 javascript css sass reactjs css-modules

我正在开发一个使用 ReactJS 和 CSS 模块的项目,每个 React 组件都有一个相应的 SASS 文件。

编写 CSS 时,每个类都会附加“三重下划线随机字符串”,例如.myClass__e7G3A

我的应用程序根据滚动位置将一个类(顶部”或“向下”)附加到主体标记,我希望我的组件对此做出响应。

我遇到的问题是,如果我在 CSS 模块中添加 或.top.down那么它也会将唯一标识符附加到该类的末尾。

例如

JSX:

<div className={styles.main}>
  Main content goes here.
</div>
Run Code Online (Sandbox Code Playgroud)

呈现的 HTML:

<body class="top">
  <div class="main___iZy2A">
    Main content goes here.
  </div>
</body>
Run Code Online (Sandbox Code Playgroud)

SASS 文件:

.top .main {
  margin-top: 0;
}
.down .main {
  margin-top: 100px;
}
Run Code Online (Sandbox Code Playgroud)

编译后的CSS:

.top___Gvf3S .main___iZy2A {
  margin-top: 0;
}
.down___kpd3S .main___iZy2A {
  margin-top: 100px;
}
Run Code Online (Sandbox Code Playgroud)

期望的 CSS 结果:(并且.top没有.down唯一标识符)

.top .main___iZy2A {
  margin-top: 0;
}
.down .main___iZy2A {
  margin-top: 100px;
}
Run Code Online (Sandbox Code Playgroud)

我确信我只是缺少一个简单的标识符或可以实现此目的的东西。

希望你能帮忙。谢谢。

Ori*_*ori 8

在选择器上使用:global :

:global(.top) .main___iZy2A {
  margin-top: 0;
}
:global(.down) .main___iZy2A {
  margin-top: 100px;
}
Run Code Online (Sandbox Code Playgroud)

:global或者和的组合:local(如果您有多个全局选择器):

:global .top .top--left :local .main___iZy2A {
  margin-top: 0;
}
:global .down .down--right :local .main___iZy2A {
  margin-top: 100px;
}
Run Code Online (Sandbox Code Playgroud)