javascript - 使用 CSS 模块在父组件中设置 Mui 子组件的样式
问题描述
我正在关注这些文档,以便在我正在使用的组件(菜单)中设置材质 ui 组件(纸张)的样式。
我正在使用 CSS 模块来设置我的组件的样式(使用 Webpack 作为捆绑器):
// 菜单.js
import React from 'react';
import { StyledEngineProvider } from '@mui/material/styles';
...
import styles from './styles.module.css';
import Menu from '@mui/material/Menu';
import MenuItem from '@mui/material/MenuItem';
const MyMenu = (props) => {
...
return (
<StyledEngineProvider injectFirst>
<div id="my-menu">
<Button id="button-react-component" onClick={handleClick}>
My Menu
</Button>
<Menu
id="menu-react-component"
...
className={styles.menu}
>
<MenuItem ...>
<span> Example 1 <span>
</MenuItem>
</Menu>
</div>
);
}
// 样式.module.css
.menu {
color: white;
}
.menu .MuiPaper-root {
background-color: red
}
// Also tried :
.menu .root {
background-color: red
}
我的目标是让MuiPaper
组件具有给定的背景颜色。MuiPaper
是来自组件的Menu
组件,但我没有MuiPaper
直接使用,因为我只是声明了父级(<Menu>
)。
理想情况下,我想使用.css
文件进行样式设置。我使用 webpack 将我的 css 文件捆绑到模块中。
请注意背景颜色“红色”如何未应用于最后一个屏幕截图。
谢谢 :)
解决方案
CSS 模块不能覆盖来自另一个 CSS 模块(或其他地方)的样式。有几种方法可以解决这个问题:
- 专门为
.menu
论文添加另一个类,例如,并通过在组件上.menuPaper
添加它:PaperProps
Menu
.menuPaper {
background-color: blue;
}
<Menu
id="menu-react-component"
...
className={styles.menu}
PaperProps={{ className: styles.menuPaper }}
>
- 将选择器添加
:global
到您的 css 选择器:
.menu :global .MuiPaper-root {
background-color: red;
}
CSS 模块通过在 CSS 类名末尾添加唯一 ID 来“修改”CSS 类名。选择:global
器可用于禁用此功能并保留类名。
这两种方法的区别在于,如果您的组件中有多个 Menu 组件MyMenu
,则使用该:global
方法将使所有Menu
实例都MyMenu
位于同一背景中。使用该PaperProps
方法,只有特定Menu
的 s withPaperProps={{ className: styles.menuPaper }}
才能应用样式。
css-loader
文档:https ://github.com/webpack-contrib/css-loader#scope
MUIMenu
文档:https ://mui.com/api/menu/#props (另见Popover
组件)
推荐阅读
- javascript - 简单的 unshift 和 unique 在 JavaScript 中不起作用
- c++ - 获取中的 std::tuple 重复类型 T
(tuple) - 编译时断言失败 - jenkins - 我刚刚安装了 Jenkins 并且丢失了我的用户名。我怎么找到这个?
- python - Django:如何将值从一个 CBV 传递到另一个
- python - 当我已经设置了文档频率上限时,不删除停用词是不是很糟糕?
- selenium-chromedriver - Selenium Command Line Runner 可以使用经过身份验证的本地 Chrome 配置文件运行 .side 文件吗?
- mongodb - 在 golang 中使用全局 mongo (mgo) 数据库有什么缺点?
- python - 医学数据库研究资料?
- javascript - 使用 jquery 显示从 json 到 html 的数据
- python - 如何打印任何网站内容?(使用类似我的代码的东西)