ant-design / pro-components

🏆 Use Ant Design like a Pro!
https://pro-components.antdigital.dev
MIT License
4.22k stars 1.35k forks source link

🐛[BUG]切换暗色后 侧边栏背景色仍然是白色 #6845

Closed Zzm0809 closed 1 year ago

Zzm0809 commented 1 year ago

提问前先看看:

https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md

🐛 bug 描述

切换暗色后 侧边栏背景色仍然是白色

📷 复现步骤

切换主题色为暗色 发现侧边栏仍然为白色 不会随主题色变化

🏞 期望结果

期望侧边栏跟随主题色变化

💻 复现代码

© 版本信息

🚑 其他信息

chenshuai2144 commented 1 year ago

TAutomatically replying with ChatGPT can be attempted, but it cannot be guaranteed to be completely accurate and may not fully address all issues. Please feel free to reply if you have any further questions or concerns. 此回复基于 ChatGPT 自动生成,可以尝试下方案,官方人员会在一定时间后继续继续处理。

根据你提供的信息,我假设你是在使用 antd Pro 的 ProLayout 组件,在切换主题色为暗色后发现侧边栏的背景色没有跟随变化。

解决方案:

  1. 确定主题色配置是否正确

antd Pro 支持使用 webpack 的 less-loader 针对配置的 less 变量进行主题定制。检查一下你的主题配置是否正确,可以参考官方文档

  1. 修改 ProLayout 组件的样式

如果主题色配置没有问题,可能是 ProLayout 组件的样式问题。可以尝试修改 ProLayout 组件的样式,在暗色模式下给侧边栏添加一个背景色。可以在大屏幕模式下添加如下样式:

@media screen and (min-width: 768px) {
  .ant-pro-basicLayout-sider {
    background: #001529; // 这里是你需要修改的颜色,可以替换为你选择的暗色
  }
}

该样式会在大屏幕模式下生效,给侧边栏添加一个指定颜色的背景。如果你需要在小屏幕模式下也修改背景色,可以参考 antd 的响应式设计文档进行适配:响应式设计

注意事项:

希望以上信息可以帮到你解决问题。如果仍然有问题,可以提供更多信息,我会尽力帮助你解决。

Zzm0809 commented 1 year ago

thx , 我在右上角添加了切换主题色的开关 切换时 同时修改了 侧边栏的token

chenshuai2144 commented 1 year ago

TAutomatically replying with ChatGPT can be attempted, but it cannot be guaranteed to be completely accurate and may not fully address all issues. Please feel free to reply if you have any further questions or concerns. 此回复基于 ChatGPT 自动生成,可以尝试下方案,官方人员会在一定时间后继续继续处理。

如果你使用了 Antd Pro 的 ProLayout 组件,配合 Antd Pro 的主题功能来实现主题切换,你可以通过在切换主题时修改 less 全局变量的值来达到样式随主题变化的效果,具体操作步骤可以参考Antd Pro文档的主题配置章节,其中有提供了示例代码,可以供你参考实现修改主题颜色。

如果你想让侧边栏的样式也能随主题变化,可以在使用 Antd ProProLayout 组件的同时,使用 AntdMenu 组件实现侧边栏的渲染,并且通过全局 less 变量修改侧边栏的背景色/字体颜色等样式属性,配合主题切换时修改 less 变量的值,就可以实现侧边栏随主题变化的效果了。

示例代码如下:

import { Menu } from 'antd';
import { useModel } from 'umi';  // 导入 umi 的 useModel hook, 可以用于获取整个应用范围内的全局数据

const CustomMenu = () => {
  const { settings } = useModel('@@initialState') as {
    settings: {
      navTheme: string;
    };
  };  // 从 umi 的全局状态中获取当前的主题配置,注意需要使用 as 将数据类型断言为 umi 的全局状态

  return (
    <Menu
      // 使用 theme 样式属性根据主题配置设置侧边栏的样式
      theme={settings.navTheme === 'dark' ? 'dark' : 'light'}
      // ...其他属性
    >
      {/* 菜单项 */}
    </Menu>
  );
};

const CustomLayout = ({ children }) => {
  return (
    <ProLayout>
      {/* ...其他子组件 */}
      <CustomMenu />
      {/* ...其他子组件 */}
    </ProLayout>
  );
};

在以上代码中,我们使用了 useModel hook,通过从 umi 的全局状态中获取当前的主题配置,然后将这个配置传递给 Menu 组件的 theme 样式属性,来决定侧边栏的样式。当然你可以添加其他的样式属性,来修改侧边栏的其他样式效果。

希望以上信息可以帮助你解决问题。如果你还有其他的疑问,请随时回复。