react历史项目没有处理屏幕适配如何快速改造

项目技术栈:

主应用home: pnpm + react + next + ts + vite + antd + tailwindcss
子应用web: pnpm + react + ts + vite + antd + tailwindcss
 

实现方案:postcss + postcss-pxtorem

实现步骤:

1.在需要的项目里安装依赖 postcss-pxtorem (用于自动把现有代码的px转换成rem) 、@ant-design/cssinjs (用户antd组件自动把px转成rem)
#"@test-web/web" 是子项目的包名,在package.json里的name定义
pnpm
--filter @test-web/web install postcss-pxtorem -D pnpm --filter @test-web/web install @ant-design/cssinjs

 

2.配置postcss.config.js
 1 // postcss.config.js 
 2 export default { 
 3 plugins: {
 4  tailwindcss: {}, // 处理支持tailwindcss 
 5  autoprefixer: {}, // 处理支持autoprefixer自动适配不同浏览器的兼容前缀
 6  'postcss-pxtorem': { // 处理插件基本属性配置
 7   rootValue: 100, 
 8   unitPrecision: 5,
 9    propList: ['*'], 
10   selectorBlackList: ['norem'], 
11   minPixelValue: 3,
12  },
13  },
14  };

 

 
3.修改main.tsx去注入StyleProvider修改antd的自动转换px
import ReactDOM from 'react-dom/client';
import App from './App.tsx';
import { ConfigProvider } from 'antd';
import zhCN from 'antd/locale/zh_CN';
import enUS from 'antd/locale/en_US';
import { I18nextProvider } from 'react-i18next';
import i18n from '@/utils/i18n.ts'; // 引入i18next配置文件
import './index.css';
// ----- 1.引入了StyleProvider
import { legacyLogicalPropertiesTransformer, px2remTransformer, StyleProvider } from '@ant-design/cssinjs';

// ----- 2.设置根字体大小
const px2rem = px2remTransformer({
  rootValue: 100,
});

ReactDOM.createRoot(document.getElementById('root')!).render(
  <I18nextProvider i18n={i18n}>
    <ConfigProvider locale={(new URLSearchParams(window.location.search).get('lang') || 'zh') === 'zh' ? zhCN : enUS}>
      // ----- 3.包裹app组件
      <StyleProvider transformers={[legacyLogicalPropertiesTransformer, px2rem]}>
        <App />
      </StyleProvider>
    </ConfigProvider>
  </I18nextProvider>
);

 

 
4.全局样式里面加上根字体的设置和缩放
html {
  font-size: calc((100vw / 1920) * 100);
}
body {
  margin: 0;
  overflow-y: hidden;
  line-height: 24px;
  font-size: 16px;
}
/* 适配到最小1280,小于这个屏幕出滚动条 */
@media screen and (max-width: 1280px) {
  html.norem {
    font-size: 74px;
  }
}

 

 
posted @ 2025-05-27 17:57  missLiuliu  阅读(39)  评论(0)    收藏  举报