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

Posted

技术标签:

【中文标题】material-ui makeStyles:如何按标签名称设置样式?【英文标题】:material-ui makeStyles: how to style by tag name? 【发布时间】:2020-08-04 07:22:34 【问题描述】:

我想为当前组件中的所有<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>
    );
;

【问题讨论】:

你可以在你的项目中添加一个css文件并像import 'style.css'一样导入 【参考方案1】:

由于您希望此作用域适用于您的组件,因此您需要一个类来应用到您的组件(例如,下面示例中的 classes.root)。然后,您可以使用&amp; 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

【讨论】:

行得通,谢谢!不幸的是,现在我遇到了一个新问题:.someClass p 的规则过于具体,这意味着它会覆盖此 createStyles 对象中的其他样式 @LiranH 请在您问题的代码中显示其他样式。

以上是关于material-ui makeStyles:如何按标签名称设置样式?的主要内容,如果未能解决你的问题,请参考以下文章

高阶组件和 Material-UI 的 makeStyles 的样式问题

NextJs/Material-ui 不尊重 makeStyles CSS

React Material-UI 中“makeStyles”的内部实现?

./src/components/styles.js 尝试导入错误:“@material-ui/core/styles”不包含默认导出(导入为“makeStyles”)

在 React 中使用 material-ui makeStyles 的钩子调用无效

是否有适用于类组件的 React Material-UI makeStyles() 函数的非挂钩替代方案