一、自定义方法配置
1.使用JavaScript动态设置根元素的字体大小: 为了实现响应式的自适应效果,可以结合JavaScript根据屏幕大小动态设置根元素的字体大小。可以使用获取窗口的宽度,然后根据需要的适配方案计算并设置根元素的字体大小。可在中添加中:
function setRootFontSize() {
var screenWidth = ;
// 根据屏幕宽度计算并设置根元素的字体大小
var rootFontSize = screenWidth / 100; // 例如,每100个像素为1rem,可以根据需要进行调整
= rootFontSize + 'px';
}
// 在窗口大小改变时调用设置根元素字体大小的函数
('resize', setRootFontSize);
// 页面加载完成后初始化设置根元素字体大小
('DOMContentLoaded', setRootFontSize);
2.创建文件,在函数内部,设置了一个基准大小baseSize
,表示在375px设计图下使用的默认字体大小。这个值可以根据实际需求进行调整
获取当前窗口的宽度和高度,并进行相应的计算,以适应不同的屏幕尺寸。在非正常屏幕尺寸下,根据宽度与375的比例重新计算屏幕宽度
最后,根据计算得到的窗口宽度和基准比例,计算出对应的rem
值,并将其应用于根元素的字体大小,即修改的值
// 设置 rem 函数
function setRem () {
// PC端
('非移动设备')
// 基准大小
baseSize = 16;
let baseApp = baseSize / 750; // 表示750的设计图,使用100PX的默认值
let windowWidth = ; // 当前窗口的宽度
let windowHeight = ; // 当前窗口的高度
// 非正常屏幕下的尺寸换算
let dueH = windowWidth / 375
if (windowHeight < dueH) { // 当前屏幕高度小于应有的屏幕高度,就需要根据当前屏幕高度重新计算屏幕宽度
windowWidth = windowHeight /667
}
let rem = windowWidth * baseApp; // 以默认比例值乘以当前窗口宽度,得到该宽度下的相应font-size值
= rem + "px";//利用DOM去修改值
}
// 页面加载完成后初始化设置根元素字体大小、初始化
('DOMContentLoaded', setRem);
// 在窗口大小改变时调用设置根元素字体大小的函数
('resize', setRem);
二、使用lib-flexible postcss-pxtorem插件
1.安包
npm
npm install lib-flexible postcss-pxtorem
yarn
yarn add lib-flexible postcss-pxtorem
针对react-create-app创建的项目,webpeck默认隐藏,有两种方式引入插件:
方式一:解包,在webpack中修改
1. 解包
yarn eject
npm run eject
解包完成后,进入 config 文件夹,打开 config/,搜索 postcss-loader
替换 options : {} 对象
rootValue:设计图尺寸修改
options: {
postcssOptions: {
// Necessary for external CSS imports to work
// /facebook/create-react-app/issues/2677
ident: "postcss",
config: false,
plugins: !useTailwind
? [
"postcss-flexbugs-fixes",
[
"postcss-preset-env",
{
autoprefixer: {
flexbox: "no-2009",
},
stage: 3,
},
],
[
"postcss-pxtorem",
{
rootValue: 75, //设计图最大宽度除以10 //比如750的宽就写成75 我这边是1125的宽
selectorBlackList: [],
propList: ["*"],
exclude: /node_modules/i,
},
],
// Adds PostCSS Normalize as the reset css with default options,
// so that it honors browserslist config in
// which in turn let's users customize the target behavior as per their needs.
"postcss-normalize",
]
: [
"tailwindcss",
"postcss-flexbugs-fixes",
[
"postcss-preset-env",
{
autoprefixer: {
flexbox: "no-2009",
},
stage: 3,
},
],
[
"postcss-pxtorem",
{
rootValue: 75, //设计图最大宽度除以10 //比如750的宽就写成75 我这边是1125的宽
selectorBlackList: [],
propList: ["*"],
exclude: /node_modules/i,
},
],
],
},
sourceMap: isEnvProduction ? shouldUseSourceMap : isEnvDevelopment,
},
2.引入flexible
在中引入,引入完成重新启动项目即可见效果
import 'lib-flexible'
方式二:配置craco, @craco/craco: 使项目不需要 eject暴露配置就可以修改webpack配置
ps: 根据设计稿大小尺寸来修改rootValue的值即可
const CracoLessPlugin = require('craco-less');
= {
// 配置less,让工程可以编译less
plugins: [
{
plugin: CracoLessPlugin,
options: {
lessLoaderOptions: {
lessOptions: {
javascriptEnabled: true,
},
},
},
},
],
// 配置rem适配
style: {
postcss: {
mode: 'extends',
loaderOptions: {
postcssOptions: {
ident: 'postcss',
plugins: [
[
'postcss-pxtorem',
{
rootValue: 375/10, // 根元素字体大小
// propList: ['width', 'height']
propList: ['*']
},
],
],
},
},
},
},
};
在顶部引入 lib-flexible,下图是的全部代码,重启项目后即可生效
import React from 'react';
import ReactDOM from 'react-dom';
import 'lib-flexible'
import App from './App';
(
<App />,
('root')
)
ps:less 样式文件中还是按照px写的,到页面上会自动适配转为rem
.demo {
color: white;
background-color: black;
width: 375px;
height: 50px;
margin: 0 auto;
margin-top: 15px;
text-align: center;
}
import React, {Component} from 'react';
import './'
class Login extends Component {
render() {
return (
<div className={"demo"}>
</div>
);
}
}
export default Login;