// 通常入口文件是index.js import 'antd-mobile/dist/antd-mobile.css'; // or 'antd-mobile/dist/antd-mobile.less'
或者下面這種方式引入樣式css
和上面的方法不一樣的地方就是,上面是直接從包文件的路徑中引入樣式,這個方法是將安裝包裏面lib目錄下的antd-mobile.css複製到項目中指定的文件夾下(如style文件夾)node
這樣作的有點是能夠在打包的時候編譯指定文件夾下面的cssreact
{ test: /\.css$/, include: path.resolve(__dirname, 'src/styles'), use: [ 'style-loader', 'css-loader', ], }
可是上面兩種引入樣式的作法都不能作到按需加載,antd內部會在瀏覽器的控制檯提示警告,並推薦安裝babel-plugin-import
瀏覽器
// .babelrc or babel-loader option { "plugins": [ ["import", { "libraryName": "antd-mobile", "style": "css" }] // `style: true` 會加載 less 文件 ] }
而後只需從 antd-mobile 引入模塊便可,無需單獨引入樣式。babel
// babel-plugin-import 會幫助你加載 JS 和 CSS import { DatePicker } from 'antd-mobile';
import DatePicker from 'antd-mobile/lib/date-picker'; // 加載 JS import 'antd-mobile/lib/date-picker/style/css'; // 加載 CSS // import 'antd-mobile/lib/date-picker/style'; // 加載 LESS
注意使用按需加載時,樣式是直接引用node-modules中的樣式,因此css-loader的配置裏面不能在用相似上面的配置, 去掉include的配置,不然不能編譯node-modules下面的css樣式,會報錯antd
{ test: /\.css$/, // include: path.resolve(__dirname, 'src/styles'), use: [ 'style-loader', 'css-loader', ], }
import React,{Component} from 'react'; import {Button, NavBar, Icon} from 'antd-mobile'; import CreateCSSModules from 'react-css-modules'; import style from './antdStyleReset.scss'; class AntdStyleReset extends React.Component { render() { return ( <div> <div className="antdStyleReset"> <NavBar mode="light" className={style.nav1} styleName = 'nav2' style={{color: 'red'}} prefixCls="antdStyleReset-navbar" icon={<Icon type="left" />} onLeftClick={() => console.log('onLeftClick')} rightContent={[ <Icon key="0" type="search" style={{ marginRight: '16px' }} />, <Icon key="1" type="ellipsis" />, ]} >NavBar</NavBar> </div> <Button className={style.button} style={{color: 'red'}}>test1</Button> </div> ) } } export default CreateCSSModules(AntdStyleReset, style, { allowMultiple: true })
我嘗試在引用的組件中利用className
、styleName
、style
來自定義組件的樣式,可是存在不少問題,好比less
還有的童鞋說定義styleName
等於NavBar
組件默認的類名好比styleName = "am-navbar-left"
,這種方法也存在不少問題,好比code
am-navbar-left
是想重置NavBar
組件內部的某個元素的樣式,這種作法只會將給類名設置到外層元素,不能設置到內層的元素因此我推薦使用prefixCls
來自定義組件,雖然這種方式比較笨拙,可是能夠很好的解決上面的問題ip
根據上面的案例,總結相關步驟是scss
prefixCls="antdStyleReset-navbar"
,我推薦定義方式是組件名+antd的組件名
node_modules/antd-mobile/lib/nav-bar/style/index.css
複製到antdStyleReset
組件對應的樣式antdStyleReset.scss
中am-navbar
爲antdStyleReset-navbar