响应式设计
响应式设计是指一套代码同时适配手机、平板、PC 等多种设备,核心在于媒体查询和弹性布局。
1. 媒体查询 (Media Queries)
通过 @media 规则,根据屏幕宽度应用不同的样式。
2. 布局单位
相对单位
%: 相对于父元素的百分比(如宽度一半)。em: 相对于当前元素的字体大小 (font-size)。但如果在font-size属性上使用,则相对于父元素的字体大小。rem: 相对于根元素 (<html>) 的字体大小。
视口单位 (Viewport Units)
vw: 视口宽度的 1% (100vw= 满屏宽)。vh: 视口高度的 1% (100vh= 满屏高)。vmin/vmax: 取 vw 和 vh 中较小/较大的那个。
3. 移动端适配方案
方案一:rem 适配 (旧主流)
- 原理: 动态设置
<html>的font-size。例如设置html { font-size: deviceWidth / 10 },那么1rem就等于屏幕宽度的 1/10。 - 工具:
amfe-flexible(JS 动态计算) +postcss-pxtorem(编译时单位转换)。
方案二:vw 适配 (新主流)
- 原理: 直接使用
vw单位。无需 JS,浏览器原生支持。 - 工具:
postcss-px-to-viewport。
1px 边框问题
在高分辨率屏幕 (Retina) 下,CSS 的 1px 会对应物理像素的 2px 或 3px,导致边框看起来变粗。
解决方案: 使用伪元素 + transform: scale(0.5)。
4. 常见面试题
1. rem 和 em 的区别?
em: 相对单位,参考当前元素(font-size 属性参考父元素),容易发生多层嵌套导致的计算混乱。rem: 相对单位,始终参考根元素 (html),计算稳定,适合做响应式基准。
2. 如何解决移动端 1px 变粗的问题?
- 使用
transform: scale(0.5)缩放伪元素边框。 - 使用 SVG 或
border-image。 - 新的 CSS 属性 (未来):
border-width: 0.5px(部分浏览器已支持)。
3. 响应式图片怎么做?
- CSS:
max-width: 100%; height: auto; - HTML: 使用
<picture>标签或srcset属性,根据倍图加载不同资源。

