响应式布局的实现思路
移动端实现响应式布局的核心是:
- 设置 viewport meta;
- 用 JS 动态调整根元素
font-size,让 1rem 等于"屏幕宽度 / N"; - 所有布局尺寸使用 rem。
以淘宝 / 网易的经典实现为例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,
minimum-scale=1,maximum-scale=1">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<script>
document.addEventListener("DOMContentLoaded", function() {
// 淘宝响应式多写了下面这 2 句,修改 viewport
let scale = 1 / window.devicePixelRatio;
document.querySelector('meta[name="viewport"]').setAttribute('content',
'initial-scale=' + scale + ', maximum-scale=' + scale +
', minimum-scale=' + scale + ', user-scalable=no');
// 淘宝+网易响应式都需要的修改 font-size
document.documentElement.style.fontSize =
document.documentElement.clientWidth / 10 + 'px';
}, false);
</script>
<body>
<div>
<div style="
background: pink;
height: 2rem;
width: 8rem;
">600px</div>
<div style="
background: lightblue;
height: 2rem;
width: 8rem;
">600px</div>
</div>
</body>
</html>
补充:
- 该方案把
html的font-size设置为window.clientWidth / 10,所以 1rem = 屏幕宽度的 1/10;CSS 中所有尺寸都基于 rem,从而实现"屏幕越宽、元素越大"的等比缩放。- 现代替代方案是直接使用 vw 单位:
html { font-size: 10vw; },无需 JS、无需监听 resize,更简洁。- 复杂响应式推荐 flex + grid + 媒体查询组合,而不是单一 rem。



