我想为当前组件中的所有<p>
添加一条规则。我在任何地方都找不到有关如何通过标记名添加CSS规则的信息(material-ui文档,Stack Overflow等)。
不支持吗?
我正在尝试做这样的事情:
const useStyles = makeStyles((theme: Theme) =>
createStyles({
'p': {
margin: 0,
},
someClass: {
fontSize: 14,
},
})
);
编辑:
使用Ryan的解决方案有效,但会产生一个新问题:
import React from 'react';
import { makeStyles, Theme, createStyles } from '@material-ui/core';
const useStyles = makeStyles((theme: Theme) =>
createStyles({
root: {
'& p': {
margin: 0,
},
},
// I want this rule to override the rule above. It's not possible in the current configuration, because `.root p` is more specific than `.title`
// This problem originates from the fact that I had to nest the rule for `<p>` inside a CSS class
title: {
margin: '0 0 16px',
},
})
);
export default () => {
const classes = useStyles({});
return (
<div className={classes.root}>
<p className={classes.title}>My title</p>
<p>A paragraph</p>
<p>Another paragraph</p>
</div>
);
};
答案 0 :(得分:9)
由于您希望将此范围限定在您的组件中,因此需要一个类来应用于您的组件(例如,下面的示例中的classes.root
)。然后,您可以使用p
定位其中的所有& p
元素。如果您随后需要为组件中的另一个CSS类覆盖p
标签样式,则可以使用另一个嵌套规则来定位也具有该类的p
标签(例如,classes.title
例如)。
import React from "react";
import { makeStyles } from "@material-ui/core/styles";
const useStyles = makeStyles(theme => ({
root: {
"& p": {
margin: 0,
"&$title": {
margin: "0 0 16px"
}
}
},
title: {}
}));
export default function App() {
const classes = useStyles();
return (
<div className="App">
<p>This paragraph isn't affected.</p>
<p>This paragraph isn't affected.</p>
<div className={classes.root}>
<p className={classes.title}>My title</p>
<p>A paragraph</p>
<p>Another paragraph</p>
</div>
</div>
);
}
相关文档:https://cssinjs.org/jss-plugin-nested?v=v10.1.1#use--to-reference-selector-of-the-parent-rule