移动端适配失败主因是viewport设置错误和未践行移动优先:必须用width=device-width+initial-scale=1.0,CSS从320px基础样式写起,用rem、flex和picture等技术实现渐进式响应式。

移动端页面一打开就文字小、布局溢出、横向滚动条卡住——根本不是 CSS 写得不够多,而是没走对移动优先的起点:viewport 没写对,基础样式没从 320px 开始写起。
viewport meta 标签必须放在 里且只用这一种写法
漏写、写成 width=320 或加了 maximum-scale=1.0,都会让 iOS 和安卓高 DPI 屏直接“失焦”:文字模糊、按钮点不中、整个布局被压缩成窄条。
-
width=device-width是核心——它把 CSS 像素宽度设为设备逻辑宽度(比如 iPhone 14 是390px),不是物理像素,也不是固定值 -
initial-scale=1.0必须配对出现,否则 Safari 会默认缩放,触发字体重排 -
user-scalable=no仅在 Web App 场景下考虑启用;普通网页禁用,否则违反 WCAG 可访问性要求 - 别用
minimum-scale/maximum-scale组合:部分安卓浏览器会破坏双指缩放,iOS 下还可能让input聚焦时页面跳动
CSS 从 320px 宽度开始写,不用 @media 包裹基础样式
所谓“移动优先”,就是所有默认样式都按最小视口(320px)设计。你看到的每一条规则,只要没被 @media (min-width: ...) 覆盖,就天然适配手机。
- 删掉所有固定
width: 1200px、margin-left: 200px这类桌面惯用写法 -
.container默认设为width: 100%或max-width: 100vw,配合padding: 1rem替代像素边距 - 字体大小统一用
rem:html { font-size: 16px; }是起点,再用 JS 动态调整(如根据document.documentElement.clientWidth缩放) - 避免
border-radius: 2px这种写死像素值——在 3x 屏上几乎不可见,改用0.125rem或加@media (-webkit-min-device-pixel-ratio: 3)特殊处理
用 flex 实现单列到多列的渐进式增强
移动端默认竖排,宽屏才横排——这不是靠 JS 切换 class,而是靠 @media 控制 display: flex 的方向和换行行为。
实现 Markdown↔ HTML 互转,支持导出 PDF,用于用户请求的文档格式转换。
- 基础样式保持
display: block或不设布局,让子元素自然流式堆叠 - 在
@media (min-width: 768px)中启用display: flex,并设flex-direction: row和flex-wrap: wrap - 用
flex-basis控制单个模块宽度,比如.time-block { flex: 0 0 calc(50% - 1rem); },比float或grid更轻量、兼容性更好 - 慎用
grid-template-columns: repeat(4, 1fr):在小屏下会强制撑开导致横向滚动,除非套在@media里
图片和触摸交互不能靠“感觉”,得有 fallback
响应式不只是布局变宽变窄,更是资源加载和操作反馈的分层控制。
- 图片必须用
+srcset:
- 按钮点击延迟不是靠换
touchstart解决,而是加touch-action: manipulation和cursor: pointer - 真要用触摸事件,监听
touchend而非touchstart;若用了touchstart,必须event.preventDefault()并补role="button",否则屏幕阅读器无法识别 - 禁止在可滚动容器里监听
touchmove并preventDefault()——这等于亲手关掉原生滚动,iOS 上尤其明显
最常被跳过的其实是 HTML 结构顺序:内容语义要先满足小屏阅读流,而不是为了大屏视觉效果把侧边栏写在 前面。一旦 DOM 顺序和视觉顺序错位,哪怕 CSS 再完美,无障碍和 SEO 就已经掉坑里了。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










