Material UI 全局 css 变量

dev*_*mat 3 javascript css reactjs material-ui css-in-js

我想声明一些我将在我的组件中重用的 css 变量。这是你如何用普通的 css 来做到这一点:

:root {
  --box-shadow: 0 2px 5px -1px rgba(0, 0, 0, 0.3);
}
Run Code Online (Sandbox Code Playgroud)

然后将按如下方式使用:

.my-class {
  box-shadow: var(--box-shadow);
}
Run Code Online (Sandbox Code Playgroud)

如何使用 useStyles 实现相同的效果?我尝试了以下无济于事:

const theme = createMuiTheme({
  shadowing: {
    boxShadow: "0 2px 5px -1px rgba(0, 0, 0, 0.3)",
  }
});
Run Code Online (Sandbox Code Playgroud)

我的主应用程序包含在

<ThemeProvider theme={theme}>
  <App />
</ThemeProvider>
Run Code Online (Sandbox Code Playgroud)

我尝试在我的组件中使用它:

const useStyles = makeStyles(theme => ({
  workImage: {
    boxShadow: theme.shadowing,
  },
}));
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

dev*_*mat 7

就我而言,我必须同时使用 createMuiTheme 和自定义变量。为了实现它,我做了如下。

首先我用 createMuiTheme 创建了一个主题

const theme = createMuiTheme({
  typography: {
    fontFamily: "verdana",
  },
});
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个单独的对象,在其中添加我的变量:

const cssVariables = {
  shadowing: {
     boxShadow: "0 2px 5px -1px rgba(0, 0, 0, 0.3)",
  }
};
Run Code Online (Sandbox Code Playgroud)

然后我将这两个对象传递给我的 ThemeProvider:

<ThemeProvider theme={{ ...theme, ...cssVariables }}>
Run Code Online (Sandbox Code Playgroud)

最后,访问变量:

const useStyles = makeStyles(theme => ({
  workImage: {
    boxShadow: theme.shadowing.boxShadow,
  },
}));
Run Code Online (Sandbox Code Playgroud)


小智 2

“createMuiTheme”函数接受具有有限键集的对象。(调色板、版式、间距...等)

您可以使用普通对象。

const theme = {
  shadowing: {
     boxShadow: "0 2px 5px -1px rgba(0, 0, 0, 0.3)",
  }
};
Run Code Online (Sandbox Code Playgroud)