material-ui makeStyles:如何按标签名称设置样式?

IT技术 javascript reactjs material-ui jss
2021-04-22 05:07:02

我想为<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>
    );
};
1个回答

由于您希望将其作用于您的组件,因此您需要一个类来应用于您的组件(例如classes.root在下面的示例中)。然后,您可以p使用& p. 如果您随后需要覆盖p组件中另一个 CSS 类标签样式,您可以使用另一个嵌套规则来定位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>
  );
}

在 JSS 中编辑目标嵌套标签

相关文档:https : //cssinjs.org/jss-plugin-nested?v=v10.1.1#use--to-reference-selector-of-the-parent-rule

@LiranH 请在您的问题的代码中显示其他样式。
2021-06-05 05:07:02
这有效,谢谢!不幸的是,现在我有一个新问题: 的规则.someClass p太具体了,这意味着它会覆盖此createStyles对象中的其他样式
2021-06-22 05:07:02