6

所以我正在构建一个反应应用程序并有一个快速的问题。如果我有两个单独的组件:分别使用 CSS 类 navigation.css 和 navigationLogo.css。在 navigation.css 我有一个名为 .main 的类,在 navigationLogo.css 我想要一个像这样的类:

.main .main_in_logo {
 color: red;
}

但是使用 CSS 模块我无法做到这一点,有什么想法可以解决吗?

4

5 回答 5

4

我只是觉得这里的解释不够完整。在 CSS 中,您执行 .parentSelector .childSelector 以选择孩子。相同的规则适用于 css 模块,但在您的 html/jsx 中,您应该向父级和子级添加相关的 className -> styles.parentSelector , styles.childSelector。

<div className={styles.container}>text</div>

这样你就可以在你的CSS中拥有类似的东西:

.banner .container{
background-color:reb;
}
.banner .container{
background-color:blue;
}

有时您使用库,并且想要更改库内 DOM 的某处,但您无法更改其源代码。在这种情况下,您可以像这样使用 :global :

.parentElement :global(div)
.parentElement :global(#some-lib-element-selector)
于 2021-10-12T13:36:09.540 回答
2

我一直在寻找同样的问题,但在这里没有找到解决方案,可能是因为该帖子已有 3 年历史。在我看来,公认的答案是,但不仅仅是我的,不可扩展。

我真的不知道这是否是新事物,但我发现我会在适用于 CSS 模块的 vanilla CSS 中做什么。

这是我所做的并且完全适合我的需求:


/* parent.css */
.main {
   ...some CSS...
}

/* logo.css */
@value main from "./parent.css";

.logo {
   ...some CSS...
}

.main .logo {
   color: red
}

在这里,我们使用@value,这是一个 CSS 模块变量,它允许我们与另一个文件绑定以构建一个选择器,其中包括父级“main”的最终名称。

对我来说很奇怪,花了一些时间才知道这个解决方案,我希望这会节省一些时间并帮助其他人!

于 2021-04-13T20:03:12.943 回答
1

为什么需要创建.main .main_in_logo- 带有父元素的样式的主要思想是不要在将来破坏您的 css 与其他样式。但是使用 css 模块是不可能的,因为您的样式将永远是独一无二的。

但即使你真的需要它,你也可以为这两个组件使用全局 css -关于 react-css-modules 的全局 css 的文档。

于 2017-02-12T20:06:29.463 回答
0

在 ReactjS 中使用 CSS 模块时,您无需指定所指的子类。

这样做:

.main_in_logo {
     color: red;
}

在样式表中就足够了。

于 2018-07-26T15:13:20.057 回答
0

子组件不应具有依赖于父 css 类名的 css 规则。

孩子应该是:

.main_in_logo { color: red; }

如果需要定义同时涉及父子的样式,那么最简单的方法是完全在父子中定义样式:

/* navigation.css */
.main .main_in_logo {
   color: red;
}

然后让父母将 css 类传递给孩子并告诉孩子使用它:

// Navigation.js
<NavigationLogo className={navigationCss.main_in_logo} />

// NavigationLogo.js
<div className={"foo " + this.props.className}>stuff</div>
于 2017-02-12T20:17:00.417 回答