怎么根据甲方设计稿设置Rem比例?

本文解析了rem单位在移动适配中的应用原理,通过计算公式演示如何根据设备尺寸动态设置html的font-size,实现响应式布局。重点介绍了设置html font-size的方法和关键计算步骤。

一、什么是rem?

rem是相对长度单位。相对于根元素(即html元素)font-size计算值的倍数的一个css单位,也就是我们 前端常说的适配单位rem。因为rem的特性相对长度单位,常被用来做移动适配,pc端页面不推荐使用rem。

二、rem的移动适配原理?

设计稿宽度:600px

移动设备:600px

设置html的 font-size= 移动设备 / 设计稿宽度 * 100 = 100px,那么 1rem = 100px

设置一个盒子的宽度: width=1rem(即100px),此时这个盒子屏占比为:1/6。

当相同的代码运行在屏幕为300px的设备上时,js动态设置html的 font-size= 移动设备 / 设计稿宽度 * 100 = 50px,渲染出来的盒子就是1rem = 50px,这个盒子屏占比同样为:1/6。以此达到移动适配的效果

可以看出适配的的关键就在于js设置html的font-size: font-size= 移动设备 / 设计稿宽度 * 100。那么这个公式怎么来的呢?

首先 移动设备 / 设计稿宽度 是渲染效果相对于设计稿的缩放比

然后 移动设备 / 设计稿宽度 * 100 乘以100是为了把font-size(=rem)放大100倍,因为当font-size小于浏览器支持最小字体大小的时候,浏览器会把fon-size默认为最小字体大小。也可以乘以其他值如50,但是为了好计算,一般设置为10或100,这样,我们只需要把设计稿宽度如 width=50px,除以10或100,改为5rem或0.5rem就好了。

三、如何设置html的font-size大小

例如:设计稿为720px;当设备大于720px时,渲染比例1:1,当小于720px时,按照相应的比例缩小

var cw = document.documentElement.clientWidth; 
if (cw > 720) { 
    cw = 720; 
} 
document.getElementsByTagName("html")[0].style.fontSize = 100 * ( cw / 720) + 'px'
### 配置 Vue 项目实现基于 rem 的自适应布局 在 Vue 项目中实现基于 `rem` 的自适应布局,主要依赖于 PostCSS 插件 `postcss-px2rem` 或 `postcss-px2rem-exclude`,结合动态设置根元素字体大小的 JavaScript 脚本。具体步骤如下: 1. **初始化 Vue 项目** 使用 Vue CLI 创建一个新的移动端项目: ```bash vue create mobile ``` 2. **安装必要的依赖** 安装 `postcss-loader` 和 `postcss-px2rem`,用于将 CSS 中的 `px` 单位自动转换为 `rem`: ```bash npm install postcss-loader postcss-px2rem --save ``` 3. **配置 PostCSS** 在项目根目录下创建 `vue.config.js` 文件,并添加以下内容以启用 `postcss-px2rem` 插件。其中 `remUnit` 应根据设计稿宽度计算得出(例如设计稿为 375px,则 `remUnit = 37.5`): ```javascript const px2rem = require('postcss-px2rem'); module.exports = { css: { loaderOptions: { postcss: { plugins: [ px2rem({ remUnit: 37.5 }) ] } } } }; ``` 4. **动态设置根元素字体大小** 在 `src/utils/rem.js` 中编写脚本,根据设备视口宽度动态调整 `<html>` 元素的 `font-size`: ```javascript function adapter() { const dpWidth = document.documentElement.clientWidth; const rootFontSize = dpWidth / 10; document.documentElement.style.fontSize = rootFontSize + 'px'; } adapter(); window.addEventListener('resize', adapter); ``` 在 `main.js` 中引入该脚本以确保其生效。 5. **可选:使用 flexible.js 简化适配流程** 可以直接引入阿里巴巴的 `lib-flexible` 库来替代手动编写的 `rem.js`,它会自动处理不同设备的适配逻辑: ```html <script src="https://cdn.jsdelivr.net/npm/amfe-lib-flexible@2.2.1/build/flexible.min.js"></script> ``` ### 配置 React 项目实现基于 rem 的自适应布局 React 项目的 `rem` 自适应配置与 Vue 类似,主要区别在于 Webpack 配置方式不同。 1. **安装依赖** 如果使用的是 CRA(Create React App),则需要先通过 `npm run eject` 暴露 Webpack 配置文件,然后安装 `postcss-px2rem` 和 `postcss-loader`。 2. **修改 Webpack 配置** 打开 `config/webpack.config.js` 文件,在 `postcss` 配置部分加入 `postcss-px2rem` 插件: ```javascript const px2rem = require('postcss-px2rem-exclude'); // ... { loader: require.resolve('postcss-loader'), options: { postcssOptions: { plugins: [ px2rem({ remUnit: 37.5, exclude: /node_modules/i }) ] } } } ``` 3. **动态设置根元素字体大小** 在 `public/index.html` 文件的 `<head>` 标签内添加以下脚本,根据设备宽度动态设置 `html` 的 `font-size`: ```html <script> function fnResize() { let deviceWidth = document.documentElement.clientWidth || window.innerWidth; if (deviceWidth >= 750) deviceWidth = 750; if (deviceWidth <= 320) deviceWidth = 320; document.documentElement.style.fontSize = deviceWidth / 7.5 + 'px'; } fnResize(); window.onresize = fnResize; </script> ``` ### 注意事项 - 设计稿宽度决定了 `remUnit` 的取值,通常选择 375 或 750。 - 动态设置 `font-size` 的脚本应尽早执行,以避免样式加载时出现错乱。 - 若需兼容 PC 端,可结合媒体查询对大屏进行额外优化[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值