多端适配web

多端适配web

看到你特别强调了“不同的手机”,这和适配“手机、平板、电脑”确实有点不一样。手机端的适配,核心矛盾不是屏幕大小,而是屏幕比例和分辨率碎片化严重

最成熟的方案是:“rem/vw动态适配 + Flexbox/Grid弹性布局 + 移动优先的媒体查询”。这比直接套用电脑端的响应式框架(如Bootstrap)要实用得多。

我帮你拆解成3个层级,从“能用”到“完美”,你可以按需选择:

1. 核心地基:动态字体大小(解决“碎片化”难题)

不同手机宽度从320px到428px不等,如果都用px,大屏手机字太小,小屏手机字太大。

成熟做法:用vw(视口宽度单位) 做基础字体,配合rem

  • index.html<head>里加一段动态计算根字体大小的JS(这是阿里、腾讯等大厂的通用方案):

html
<script>// 以设计稿375px为基准,1rem = 100px,方便计算function setRem() {const docEl = document.documentElement;const width = docEl.clientWidth;// 限制最大宽度,避免在平板上显示过大const maxWidth = 750;const base = Math.min(width, maxWidth) / 375 * 100;docEl.style.fontSize = base + 'px';}setRem();window.addEventListener('resize', setRem);
</script>
  • 写样式时,所有尺寸都用rem

css
/* 设计稿上20px,写0.2rem */
.box {width: 3.45rem;  /* 345px / 100 */font-size: 0.16rem; /* 16px */padding: 0.15rem;
}

2. 布局骨架:弹性盒子(解决“排列”难题)

手机端坚决不用固定宽度,全部用Flexbox做自适应。

  • 等比列:用 flex: 1 让子元素平分剩余空间。

  • 换行:用 flex-wrap: wrap 让内容自动折行。

css
/* 经典的导航栏,左右两端对齐 */
.nav {display: flex;justify-content: space-between;align-items: center;padding: 0 0.16rem;
}/* 商品列表,自动换行 */
.product-list {display: flex;flex-wrap: wrap;justify-content: space-between;
}
.product-item {width: 48%; /* 留一点间距,一行2个 */margin-bottom: 0.1rem;
}

3. 细节补丁:针对“刘海屏”和“极端比例”做微调

现在全面屏、折叠屏很多,需要处理安全区域。

  • 适配刘海/挖孔屏:利用env(safe-area-inset-*),让内容不被遮挡。

css
body {padding-top: env(safe-area-inset-top);padding-left: env(safe-area-inset-left);padding-right: env(safe-area-inset-right);
}
  • 针对特定比例微调(比如iPhone SE和iPhone 14 Pro Max宽高比差异大):

css
/* 极窄屏(宽度<350px)时,把字号缩小 */
@media (max-width: 350px) {html { font-size: 85px !important; } /* 配合前面的JS动态rem */
}
/* 超宽屏(比如折叠屏展开)时,限制最大宽度 */
@media (min-width: 600px) {.container { max-width: 420px; margin: 0 auto; }
}

你的项目适合哪种“深度”?

  • 如果你的页面主要是“列表/卡片/图文”只用上述的“rem + Flexbox”就足够了,根本不需要媒体查询,代码非常干净。

  • 如果你的页面有“左右分栏”或“复杂表格”:那就在上述基础上,加两三个媒体查询断点(比如 max-width: 480px 时堆叠,min-width: 600px 时并排)。


想进阶?推荐搭配这个工具

如果你觉得手写rem换算麻烦,可以试试 postcss-pxtorem 这个工具。你写CSS时直接写px,它会自动帮你编译成rem。配合Vite或Webpack,开发体验非常丝滑。


总结一句话
不要用Bootstrap那种“大而全”的栅格系统做手机站(太笨重)。“JS动态设置rem基准 + Flexbox布局 + 必要的安全区域处理” 是目前各大主流App内嵌页、移动端H5最成熟的标配方案。

如果你的页面涉及到“横屏/竖屏”切换,或者有复杂的表格需要适配,可以告诉我,我再给你对应的专项方案。😊