Art*_*nov 5 css typescript reactjs material-ui css-modules
不是真正的问题,而是我不满意的事情。我正在使用react+ typescript+ css modules+ https://material-ui-next.com/。问题是,当我需要为材质 ui 组件设置样式时,我必须使用!important很多。问题是是否有一种方法可以在没有important. 我创建了一个示例项目来重现问题https://github.com/halkar/test-css-modules
material-ui 公开了许多用于样式化的组件。有两种方法可以做到这一点。
您可以全局设置组件样式并将其应用于主题。一个例子是这样的(从文档http://www.material-ui.com/#/customization/themes复制):
import React from 'react';
import {cyan500} from 'material-ui/styles/colors';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import getMuiTheme from 'material-ui/styles/getMuiTheme';
import AppBar from 'material-ui/AppBar';
// This replaces the textColor value on the palette
// and then update the keys for each component that depends on it.
// More on Colors: http://www.material-ui.com/#/customization/colors
const muiTheme = getMuiTheme({
palette: {
textColor: cyan500,
},
appBar: {
height: 50,
},
});
class Main extends React.Component {
render() {
// MuiThemeProvider takes the theme as a property and passed it down the hierarchy
// using React's context feature.
return (
<MuiThemeProvider muiTheme={muiTheme}>
<AppBar title="My AppBar" />
</MuiThemeProvider>
);
}
}
export default Main;
Run Code Online (Sandbox Code Playgroud)
正如您在此处看到的,appBar 组件的高度为 50px,这意味着每次您将 appbar 组件添加到您应用 的树下的应用程序时muiTheme,它都会赋予它 50px 的高度。这是您可以为每个组件应用的所有样式的列表https://github.com/callemall/material-ui/blob/master/src/styles/getMuiTheme.js。
要将样式应用于单个组件,您通常可以使用 style 属性并将您想要的样式传递给它。
这是文档中的另一个示例,其中将 12px 的边距应用于 RaisedButton。
import React from 'react';
import RaisedButton from 'material-ui/RaisedButton';
const style = {
margin: 12,
};
const RaisedButtonExampleSimple = () => (
<div>
<RaisedButton label="Default" style={style} />
<RaisedButton label="Primary" primary={true} style={style} />
<RaisedButton label="Secondary" secondary={true} style={style} />
<RaisedButton label="Disabled" disabled={true} style={style} />
<br />
<br />
<RaisedButton label="Full width" fullWidth={true} />
</div>
);
export default RaisedButtonExampleSimple;
Run Code Online (Sandbox Code Playgroud)
现在,样式在同一个文件中定义,但您可以在单独的文件中定义它们并将它们导入到您使用组件的文件中。
如果你想申请多个样式,那么你可以使用传播运营商,像这样:style={{...style1,...style2}}。
通常,您使用 style 属性为组件(根元素)中的特定事物设置样式,但某些组件具有多个属性来设置组件不同元素的样式。在这个页面http://www.material-ui.com/#/components/raised-button 的属性下,可以看到有 style 属性,labelStyle 和rippleStyle 来对RaisedButton 的不同部分进行样式设置。
检查您正在使用的组件下的属性,看看您可以使用哪个样式属性,否则检查您可以覆盖的可用全局样式属性。希望这可以帮助!
我应该使用JssProvider并告诉它在页面head部分将材质 UI 样式放在我的 UI 样式之前。
import JssProvider from 'react-jss/lib/JssProvider';
import { create } from 'jss';
import { createGenerateClassName, jssPreset } from 'material-ui/styles';
const generateClassName = createGenerateClassName();
const jss = create(jssPreset());
// We define a custom insertion point that JSS will look for injecting the styles in the DOM.
jss.options.insertionPoint = document.getElementById('jss-insertion-point');
function App() {
return (
<JssProvider jss={jss} generateClassName={generateClassName}>
...
</JssProvider>
);
}
export default App;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11215 次 |
| 最近记录: |