在 CSS3 中适配移动端屏幕,核心目标是:让页面在不同尺寸、不同分辨率的手机上都能正常显示,并且操作友好。下面从基础到进阶系统讲一下。
必须加,否则手机浏览器会按桌面宽度(约 980px)渲染:
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
含义:
width=device-width:宽度等于设备宽度initial-scale=1.0:初始缩放为 1user-scalable=no:禁止用户缩放(视业务而定)html {
font-size: 16px;
}
.box {
width: 10rem; /* 160px */
}
移动端常用方案:
html {
font-size: calc(100vw / 3.75); /* 375px 设计稿 */
}
1rem = 屏幕宽度的 1/3.75
.box {
width: 50vw; /* 屏宽一半 */
height: 20vh; /* 屏高 20% */
}
✅ 不需要 JS
❌ 老安卓支持一般(但现在基本没问题)
.container {
width: 100%;
}
.container {
display: flex;
flex-wrap: wrap;
}
.container {
display: grid;
grid-template-columns: repeat(2, 1fr);
}
针对不同屏幕做适配:
/* 手机 */
@media (max-width: 768px) {
.box {
font-size: 14px;
}
}
/* 高清屏 */
@media (-webkit-min-device-pixel-ratio: 2) {
.logo {
background-image: url(logo@2x.png);
}
}
img {
max-width: 100%;
height: auto;
}
<img src="img.png" srcset="img@2x.png 2x">
高清屏下 1px 会变粗:
.border {
position: relative;
}
.border::after {
content: '';
position: absolute;
left: 0;
top: 0;
width: 200%;
height: 200%;
border: 1px solid #000;
transform: scale(0.5);
transform-origin: 0 0;
}
a, button {
-webkit-tap-highlight-color: transparent;
}
body {
-webkit-text-size-adjust: 100%;
}
| 方案 | 是否推荐 | 说明 |
|---|---|---|
| px + media | ❌ | 太麻烦 |
| rem + JS | ✅ | 老项目常用 |
| vw | ✅✅ | 现代推荐 |
| Flex + % | ✅✅ | 必用 |
| UI 框架 | ✅ | vant / uni / taro |
✅ viewport + Flex + vw/rem + media query
html { font-size: calc(100vw / 3.75); }
body { font-size: 0.14rem; }
如果你愿意,可以告诉我:
我可以直接给你一套 可直接抄的适配模板。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。