【发布时间】:2021-11-14 14:47:36
【问题描述】:
据我了解,MUI 5 在后台使用 Emotion 进行样式设置,Emotion 有一个很好的辅助函数 css,它看起来像返回一个字符串 - 一个可以用作 className 或 的值的类名任何其他属性。
import { css, cx } from '@emotion/css'
render(
<div
className={css`
padding: 32px;
background-color: hotpink;
font-size: 24px;
`}
>
Text
</div>
)
我到处寻找,但在 MUI 中找不到可用的模拟。 system 和 styled-engine 中有 css 函数,但它似乎没有做同样的事情,它返回 SerializedStyles。
我希望使用它的用例如下:
我有一个组件,让您可以为该组件的不同部分传递类名(字符串),从而使您能够更改组件的样式。似乎这个 css 函数(如 Emotion 文档中所示)可以帮助我解决这个问题。
例如:
const headerStyle = css`
color: blue;
border-bottom: 1px solid red;
`;
<Component
headerClassName={headerStyle}
footerClassName={css`
color: gray;
font-size: 2rem;
`}
/>
我想我可以用 makeStyles() 解决它,但它不是“遗留”的,上面屏幕截图中显示的语法对我来说更有吸引力。
【问题讨论】:
-
你有什么不想使用Emotion的
css功能的原因吗? -
鉴于 MUI已经在使用 Emotion 我希望可以通过 MUI 以某种方式访问它(或它的 MUI 包装器),但到目前为止我还没有看到任何方法,这就是问题所在......
-
@Paul 我不确定您所说的避免额外依赖是什么意思。如果您想使用默认样式引擎,MUI 期望您安装情感(列为peer dependencies)。如果没有 installing 样式库,您将无法使用 MUI 样式 API,例如
sx或styled。 -
@NearHuscarl,看起来为了使所需的
css功能可用,我需要显式安装@emotion/css,样式引擎不需要它。 styled-engine 需要@emotion/react,它确实有css功能,但它看起来是不同的 功能,这实际上很令人困惑。 -
是的,我的错,所以
css从@emotion/react或@emotion/css导入时返回不同的东西。除非您使用旧的makeStyles解决方案,否则 MUI v5 样式 API 似乎不再公开结果类名称。
标签: css material-ui emotion css-in-js