ReactJs 中的 CSS 模块 + Ant 设计不起作用
Posted
技术标签:
【中文标题】ReactJs 中的 CSS 模块 + Ant 设计不起作用【英文标题】:CSS Modules + Ant design in ReactJs does not work 【发布时间】:2021-06-04 09:19:39 【问题描述】:我正在尝试将 CSS 模块用于我的 ReactJs 项目的 CSS 样式,为此我应用了 ant 设计文档(请参阅此处:https://pro.ant.design/docs/style),但不幸的是它不起作用。 问题是我想覆盖ant Button的组件样式,它没有得到样式。 下面是我的代码的简短示例: CSS 类:在 MyContainer.less 文件中:
.antButton
:global
.ant-btn-primary
background-color: rgb(215, 226, 233);
border-color: #848586;
font-size: 7pt;
color: red !important;
代码:
import React from 'react';
import Button from 'antd';
import 'antd/dist/antd.less';
import styles from './MyContainer.less';
const MyContainer= () =>
return (
<Button type="primary" size="small" className=styles.antButton >Download</Button>
);
;
export default MyContainer;
我在 React(版本 16.13.1)和 Webpack(版本 4.42.0)中使用 Ant design(版本 4.3.0)。我还安装了 less-loader(版本 7.3.0)和 babel-plugin-import (版本 1.13.3)。
我不知道我是否缺少 Webpack 的任何特定配置或问题出在其他地方?
【问题讨论】:
你提到你使用了 babel-plugin-import..如果你使用它来导入 antd 样式,你为什么要在你的组件中再次导入更少的文件 感谢您的回答,但是我不知道如何使用 babel-plugin-import 进行 antd 样式,您能解释一下吗?确实我想覆盖 antd 样式,所以我添加的文件更少。 ***.com/questions/66453633/… 在此处查看答案...css 模块可以开箱即用地创建反应应用程序... 如果您仍有问题,请参阅我发布的 github 链接以获得该答案 感谢@Hemanthvrm 的链接和回答,我会检查的。 【参考方案1】:最后我可以用 antd 解决我的问题,当你使用 css 模块时,你必须添加额外的配置才能使 antd 样式工作,我在这个网站上找到了我的解决方案: https://www.programmersought.com/article/3690902311/ 如那里所述,如果您在 Webpack.config 的 Rule 部分中按这些顺序添加这些配置,它将与 Css 模块一起使用并覆盖较少样式的 antd 组件。
test: /\.less$/,
include: [/src/],
use: [
require.resolve('style-loader'),
loader: require.resolve('css-loader'),
options:
modules:
localIdentName: "[name]__[local]___[hash:base64:5]",
,
sourceMap: true
,
,
loader: require.resolve('less-loader'), // compiles Less to CSS
options: lessOptions:javascriptEnabled: true
,
],
,
test: /\.css$/,
exclude: /node_modules|antd\.css/,
use: [
require.resolve('style-loader'),
loader: require.resolve('css-loader'),
options:
importLoaders: 1,
// change
modules:
localIdentName: "[name]__[local]___[hash:base64:5]",
,
,
,
loader: require.resolve('postcss-loader'),
options:
ident: 'postcss',
plugins: () => [
require('postcss-flexbugs-fixes'),
autoprefixer(
browsers: [
'>1%',
'last 4 versions',
'Firefox ESR',
'not ie < 9', // React doesn't support IE8 anyway
],
flexbox: 'no-2009',
),
],
,
,
],
,
test: /\.css$/,
include: /node_modules|antd\.css/,
use: [
require.resolve('style-loader'),
loader: require.resolve('css-loader'),
options:
importLoaders: 1,
// change
// modules: true, // new support for css modules
// localIndetName: '[name]__[local]__[hash:base64:5]', //
,
,
loader: require.resolve('postcss-loader'),
options:
ident: 'postcss',
plugins: () => [
require('postcss-flexbugs-fixes'),
autoprefixer(
browsers: [
'>1%',
'last 4 versions',
'Firefox ESR',
'not ie < 9', // React doesn't support IE8 anyway
],
flexbox: 'no-2009',
),
],
,
,
],
,
你还需要在你的 package.json 中添加 babel import:
"babel":
"presets": [
"@babel/preset-env",
"@babel/preset-react",
"@babel/preset-typescript"
],
"plugins": [
[
"import",
"libraryName": "antd",
"libraryDirectory": "lib",
"style": true
]
]
,
你必须通过这种方式为antd组件的包装器div设置样式:
import React from 'react';
import Button from 'antd';
//import 'antd/dist/antd.less'; you don't need this line when add babel.
import styles from './MyContainer.less';
const MyContainer= () =>
return (
<div className=styles.antButton>
<Button type="primary" size="small" >Download</Button>
</div >
);
;
export default MyContainer;
希望对你有帮助
【讨论】:
以上是关于ReactJs 中的 CSS 模块 + Ant 设计不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在 ReactJS + Typescript 中加载 CSS 模块并重新连接反应
在 Reactjs 中使用样式化组件而不是 CSS 模块有啥好处 [关闭]
reactjs 的 css 模块化工具 styled-components 升级后 createGlobalStyle 废除,使用 createGlobalStyle 的方案
ReactJS Ant Design - 单击按钮时打开 DatePicker
React Design Editor已经开始开发诸如Powerpoint这样的可编辑设计工具的直接操作,我们已经用reactjs,ant.design,fabricjs来开发它