在移动端网页开发中,REM(Root EM)是基于根元素(``)字体大小的相对单位,适配不同屏幕尺寸的核心在于动态设置根字体大小。以下是具体实现方案及扩展知识:
1. 基础设置
css
html {
font-size: 16px; /* 基准值,通常1rem=16px */
}
2. 设计稿比例换算
若设计稿宽度为750px,假设基准字体为100px(方便计算):
css
html {
font-size: calc(100vw / 7.5); /* 750px/7.5=100px */
}
此时1rem=100px,元素尺寸直接按设计稿值/100换算(如200px → 2rem)。
3. 媒体查询分段适配
css
@media screen and (max-width: 480px) {
html { font-size: 14px; }
}
@media screen and (min-width: 1200px) {
html { font-size: 20px; }
}
4. JavaScript动态计算
javascript
document.documentElement.style.fontSize =
(document.documentElement.clientWidth / 设计稿基准宽度) * 基准字体 + 'px';
// 示例:750px设计稿,基准100px
document.documentElement.style.fontSize = (window.innerWidth / 7.5) + 'px';
5. Viewport单位结合
推荐与`vw`单位联用,避免JS依赖:
css
html {
font-size: 10vw; /* 100vw=屏幕宽度,10vw即10%宽度 */
}
body {
max-width: 750px; /* 限制最大宽度 */
margin: 0 auto;
}
6. 防止极端尺寸(安全范围)
css
html {
font-size: clamp(12px, 4vw, 20px); /* 最小值12px,中间值4vw,最大值20px */
}
扩展知识:
像素密度适配:Retina屏幕需结合`-webkit-min-device-pixel-ratio`媒体查询调整。
滚动条影响:`clientWidth`包含滚动条,部分场景需用`document.documentElement.getBoundingClientRect().width`精确计算。
REM局限:不适用于边框宽度(建议仍用px)、媒体查询(需固定px单位)。
兼容性处理:iOS 8以下需使用`px`兜底:
css
html {
font-size: 16px;
font-size: calc(1rem + 0.5vw);
}
实际开发中建议搭配PostCSS插件(如`postcss-pxtorem`)实现自动化单位转换,提升效率。
查看详情
查看详情