重复问题
- 我已搜索现有的问题
最新版本
- 我已测试了最新版本
当前行为 😯
目前使用theme.palette.getContrastText来计算文本颜色。
预期行为 🤔
预期从theme.palette[color].contrastText提供颜色。
重现步骤 🕹
https://codesandbox.io/s/clever-almeida-u36ek8?file=/src/App.tsx
上下文 🔦
拉取请求破坏了Alert的文本颜色。如果提供了contrastText,它不应该计算theme.palette.getContrastText或者应该考虑提供的contrastText
你的环境 🌎
- 无响应*
8条答案
按热度按时间tyg4sfes1#
Thanks for the report. #29813 did change the behavior, but it was for solving an issue. The contrast color in the cases where the colors changed is because the black gives better contrast than the white color for the text. We could use
contrastText
for light mode, but that won't work for dark mode, mainly because we use thecolor.palette[color].dark
as a background, and thecolor.palette[color].contrastText
is meant as a contrast text for the main color:@siriwatknp what do you think about this change?
nnt7mjpx2#
So the problem maybe is that theme.palette[color].contrastText only with theme.palette[color].main.
Kinda sticky situation because theme.palette[color].light need to have theme.palette[color].lightContrastText and theme.palette[color].dark need to have theme.palette[color].darkContrastText. Problem maybe can be solve if each color would have it's own contrastText color and it would be already resolve in createPalette function also it can be overriden by what actual color you passed.
It would leave you with
Or this should be resolve in theme palette after createPalette
And you only left with
6jjcrrmo3#
We haven't had so far the need to have a contrast text color for each color in the palette, so I wouldn't add it until we see this required in more than one place. I feel this would be overengineering for the problem we have.
For the
extendTheme
util that is based on CSS variables, maybe we can create automatically contrast text for each color if we see the need for it.Let's also consider what @siriwatknp thinks.
jslywgbw4#
我此时不会做任何事情,因为对比度是预期的(应该是黑色):
我们可以做的事情是在警报页面添加一条评论,说明
filled
变体从默认背景计算颜色,并提供一个示例说明如何更改行为:这里是: https://codesandbox.io/s/admiring-shape-rzm6lw?file=/src/App.tsx:341-884
vddsk6oq5#
我同意不采取任何行动。但是,如果调色板本身已经计算出了对比色,我们是否需要在组件中添加额外的逻辑来解决对比色问题?
material-ui/packages/mui-material/src/styles/createPalette.js
第258行:| color.contrastText=getContrastText(color.main); |
也许我们只需要计算深色并直接使用它,这样可以减少某些组件的bundle大小。目前我只看到了每个组件中没有原因的代码重复,以及到处都是相同的逻辑。
另一个选择是删除theme中的contrastText属性,将其更改为getModeContrastText,并在所有地方使用它。您不需要两种解决颜色问题的方法。
q3aa05256#
感谢@povilass,这是一个很好的观点。我们可能会在未来使用CSS变量来解决这个问题。@povilass,目前我们不需要在其他组件中添加这个功能,这就是为什么我认为我们不应该立即添加它。cc @siriwatknp,到目前为止,你是否需要类似这样的joy功能?
dwthyt8l7#
当然可以!这是一个关于计算机的问题,我会尽力帮助您解答。
问题:文档中的示例不再受支持了吗?现在对比文本总是白色或黑色吗?当使用自定义主题时,contrastText属性是否无效?
答案:文档中的示例可能已经更新,但它们仍然受支持。对比文本的颜色取决于您的应用程序的主题设置。如果您使用的是自定义主题,那么contrastText属性可能会有所不同。建议您查阅相关文档或寻求开发者的帮助以获取更准确的信息。
7uzetpgm8#
对不起,忽略我-我已经意识到上面的示例可以通过不使用填充变体来实现。