首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CSS模块在父组件中设置MUI子组件的样式

使用CSS模块在父组件中设置MUI子组件的样式
EN

Stack Overflow用户
提问于 2021-11-15 20:06:26
回答 1查看 332关注 0票数 1

我遵循these docs是为了在我正在使用的组件(菜单)中设置材料ui组件(纸张)的样式。

我正在使用CSS模块来设计我的组件的样式(以Webpack为捆绑器):

// menu.js

代码语言:javascript
复制
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>
  );
}

// styles.module.css

代码语言:javascript
复制
.menu {
  color: white;
}

.menu .MuiPaper-root {
  background-color: red
}

// Also tried : 
.menu .root {
  background-color: red
}

我的目标是让MuiPaper组件具有给定的背景色。MuiPaper是一个来自Menu组件的组件,但我并没有直接使用MuiPaper,因为我只是声明了父组件(<Menu>)。

理想情况下,我希望使用.css文件来设置样式。我使用webpack将我的css文件捆绑成模块。

下面是我在浏览器中看到的内容:

请注意,在最后一个屏幕截图上没有应用背景色“红色”。

谢谢:)

EN

回答 1

Stack Overflow用户

发布于 2021-11-15 21:17:31

CSS模块不能覆盖来自另一个CSS模块(或其他地方)的样式。有几种方法可以解决这个问题:

  1. 添加另一个专门用于.menu论文的类,例如.menuPaper,并通过PaperPropsMenu组件上添加它:

代码语言:javascript
复制
.menuPaper {
  background-color: blue;
}
代码语言:javascript
复制
<Menu
  id="menu-react-component"
  ...
  className={styles.menu}
  PaperProps={{ className: styles.menuPaper }}
>

  1. :global选择器添加到css选择器中:

代码语言:javascript
复制
.menu :global .MuiPaper-root {   
    background-color: red; 
}

CSS模块通过在CSS类名的末尾添加一个唯一的ID来“模块化”CSS类名。可以使用:global选择器禁用此功能并保留类名。

这两种方法之间的区别在于,如果在MyMenu组件中有多个菜单组件,则使用:global方法将为MyMenu中的所有Menu实例提供相同的背景。使用PaperProps方法时,只有带有PaperProps={{ className: styles.menuPaper }}的特定Menu才会应用样式。

css-loader文档:https://github.com/webpack-contrib/css-loader#scope

MUI Menu文档:https://mui.com/api/menu/#props (另请参阅Popover组件)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69980222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档