sag*_*har 7 css reactjs webpack css-modules ant-design-pro
我正在尝试使用 CSS 模块来实现 ReactJs 项目的 CSS 样式,为此我应用了 ant design 文档(请参见此处: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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
代码:
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;
Run Code Online (Sandbox Code Playgroud)
我在react(版本16.13.1)中使用Ant design(版本4.3.0)和Webpack(版本4.42.0)。我还安装了less-loader(版本7.3.0)和babel-plugin-import(版本1.13) .3).
我不知道我是否缺少 Webpack 的任何特定配置,或者问题出在其他地方?
最后我可以用 antd 处理我的问题,当你使用 css 模块时,你必须添加额外的配置才能使 antd 样式工作,我在这个网站中找到了我的解决方案:https: //www.programmersought.com/article/3690902311 / 如那里所述,如果您在规则部分的 Webpack.config 中按这些顺序添加这些配置,它将与 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',
}),
],
},
},
],
},
Run Code Online (Sandbox Code Playgroud)
您还需要在 package.json 中添加 babel import :
"babel": {
"presets": [
"@babel/preset-env",
"@babel/preset-react",
"@babel/preset-typescript"
],
"plugins": [
[
"import",
{
"libraryName": "antd",
"libraryDirectory": "lib",
"style": true
}
]
]
},
Run Code Online (Sandbox Code Playgroud)
你必须这样设置 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;
Run Code Online (Sandbox Code Playgroud)
我希望它有帮助
归档时间: |
|
查看次数: |
5116 次 |
最近记录: |