You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中MUI样式抽离至单独文件的问题与解决方法

问题

尝试将MUI组件的样式修改抽离到单独的*.module.css文件时,使用className={styles.h6}替代variant="h6"后样式无法生效。原始代码如下:

const Void: React.FC<VoidProps> = ({name}) => {
  return (
    <>
      <Typography variant="h6">
        <BlockIcon />
        {name}
      </Typography>
    </>
  );
};

想了解是否可以在CSS文件中编写MUI的sx样式,或是有其他将样式移出组件文件的方案,实现把CSS、sx等样式放在组件外部的需求。

解决方案

通过module.css结合clsx解决了样式生效问题,最终实现代码如下:

Void.tsx

import React from "react";
import clsx from "clsx";
import styles from "./cssModules/Void.module.css"
import { Typography } from "@mui/material";
import BlockIcon from "@mui/icons-material/Block";

/**
 * @module Void
 *
 * Displays a void element with a block icon and a name.
 *
 * @param {string} name - Name of the void element
 * @returns {JSX.Element} - Void component
 */

type VoidProps = {
  name: string;
};

const Void: React.FC<VoidProps> = ({name}) => {
  return (
    <>
      <Typography className={clsx(styles.Typography)}>
        <BlockIcon />
        {name}
      </Typography>
    </>
  );
};

export default Void;

Void.module.css

.Typography {
  color: rgb(255, 47, 0);
  background: linear-gradient(rgb(218, 143, 14), rgb(217, 255, 0)) padding-box,
  linear-gradient(to right, rgb(0, 0, 0), rgb(204, 50, 50)) border-box;
  box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08);
  padding: 0.1em 0.6em;
  border: 4px solid transparent;
  border-radius: 50em !important;
  width: 4.7em; 
  max-width: 22em;
  font-size: 1.9em !important;
}

感谢Victor L的帮助。


内容的提问来源于stack exchange,提问作者hsulso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 11:27:30