material-ui 全局字体未应用于自定义变体

w1e3prcc  于 6个月前  发布在  其他
关注(0)|答案(6)|浏览(52)

重复问题

  • 我搜索了现有的问题

最新版本

  • 我测试了最新版本

重现步骤 🕹

链接到实时示例: https://codesandbox.io/s/dreamy-frog-pybrk2?file=/src/App.js
步骤:

  1. 在创建主题时,在typography上设置自定义fontFamily。
  2. 在typography上创建一个没有fontFamily的新变体,因为它应该已经使用上面指定的一个。
  3. 检查渲染变体的typography。

当前行为 😯

这是我的自定义主题的一个小样本:

import { createTheme } from "@mui/material/styles";

const theme = createTheme({
  typography: {
    fontFamily: "Times New Roman",

    custom: {
      textDecoration: "underline",
      color: "#FF0008"
    }
  }
});

export default theme;

如果我尝试使用 custom 变体,它将不会使用 Times New Roman 字体家族。添加 allVariants 也不起作用。

预期行为 🤔

我添加的每个自定义变体都应该使用我在typography主题中指定的fontFamily。

上下文 🔦

设置全局字体家族... 我找到了一个相关的票据 #28633 ,似乎没有什么效果,除了在您创建的每个新变体上手动添加fontFamily之外... 该票据被标记为需要更多信息,所以我用一个代码沙盒创建了一个新的...
谢谢....

您的环境 🌎

npx @mui/envinfo

Don't forget to mention which browser you used.
  Output from `npx @mui/envinfo` goes here.
dgsult0t

dgsult0t1#

你是对的,它应该可以工作。作为解决方法,你可以全局覆盖Typography组件的defaultProps。以下是如何做到这一点:https://codesandbox.io/s/trusting-poitras-knpvop?file=/src/theme.js

1cklez4t

1cklez4t2#

如果这有任何帮助,我已经在fontFamily主题中实现了这个功能,当直接将其放入createTheme()函数(没有组合)时。

createTheme({ //this works for me
    typography: {
        fontFamily: [
            'Poppins',
            'Lato',
            'sans-serif'
        ].join(',')
    },
...
})

尝试组合主题时无法正常工作。

createTheme(SharedTheme, { //this composition does not work
   typography: {
       fontFamily: [
           'Poppins',
           'Lato',
           'sans-serif'
       ].join(',')
   },
...
})

更新:只要它在组合的第一个主题中,排版似乎就可以正常工作。将我的typography定义放在我的SharedTheme定义中也可以正常工作,即使在组合之后也是如此。因此,问题似乎是在初始主题对象之后的任何时候定义它。

3pvhb19x

3pvhb19x3#

这个问题是关于在主题中定义自定义排版变体时,字体未被应用的问题。

col17t5w

col17t5w4#

看起来这是因为在沙盒中,css文件中定义了一个font-family。如果我注解掉它,现在按预期工作了。

这个类在这里被使用:

我猜现在的问题是...如果在自定义变体中没有定义font-family,它应该遵循主题的typography中定义的默认字体,还是应该遵循这里css/类中使用的字体家族。

uttx8gqw

uttx8gqw5#

@jove0610 但是,即使在 className 之外应用了 ThemeProvider ,它也不会从主题中选择字体家族,这是应该的。请查看代码沙箱:https://codesandbox.io/s/elegant-lehmann-ztiy07?file=/src/index.js

0sgqnhkj

0sgqnhkj6#

如果这有任何帮助,我已经在fontFamily主题中成功地使用了createTheme()函数(没有组合)。

createTheme({ //this works for me
    typography: {
        fontFamily: [
            'Poppins',
            'Lato',
            'sans-serif'
        ].join(',')
    },
...
})

尝试组合主题时无法正常工作。

createTheme(SharedTheme, { //this composition does not work
   typography: {
       fontFamily: [
           'Poppins',
           'Lato',
           'sans-serif'
       ].join(',')
   },
...
})

更新:只要它在组合的第一个主题中,排版似乎就可以正常工作。将我的typography定义放在我的SharedTheme定义中也可以正常工作,即使在组合之后也是如此。所以问题似乎是在初始主题对象之后的任何时候定义它。

非常感谢,经过几个小时的调试后,这个问题终于解决了!

相关问题