You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MUI 5的断点属性中访问theme并使用theme.spacing

问题原因

  • 第一种写法将theme.spacing调用写为字符串格式,MUI的sx属性不会解析执行字符串内的代码,因此不生效。
  • 第二种写法回调函数的层级错误,sx仅支持在样式属性的层级传入回调获取theme实例,不支持在断点对象的属性值位置嵌套回调函数。

正确实现方式

写法1(推荐):整个sx对象用回调接收theme参数

直接在最外层拿到theme实例,内部所有断点配置都可以直接调用theme的相关属性和方法,代码更简洁:

sx={(theme) => ({
  paddingTop: { sm: 0 },
  paddingRight: { sm: theme.spacing(6) },
  paddingBottom: { sm: theme.spacing(10) },
  paddingLeft: { sm: theme.spacing(6) },
  "@media screen and (orientation:landscape)": {
    paddingTop: { sm: 0 },
    paddingRight: { sm: theme.spacing(6) },
    paddingBottom: { sm: theme.spacing(2) },
    paddingLeft: { sm: theme.spacing(6) },
  },
})}

写法2:单个样式属性用回调返回断点对象

适合仅少量属性需要用到theme的场景:

sx={{
  paddingTop: { sm: 0 },
  paddingRight: (theme) => ({ sm: theme.spacing(6) }),
  paddingBottom: (theme) => ({ sm: theme.spacing(10) }),
  paddingLeft: (theme) => ({ sm: theme.spacing(6) }),
  "@media screen and (orientation:landscape)": {
    paddingTop: { sm: 0 },
    paddingRight: (theme) => ({ sm: theme.spacing(6) }),
    paddingBottom: (theme) => ({ sm: theme.spacing(2) }),
    paddingLeft: (theme) => ({ sm: theme.spacing(6) }),
  },
}}

以上两种写法都可以实现在sm、md、lg等断点中调用theme相关值的需求。

内容的提问来源于stack exchange,提问作者bonum_cete

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:36:04