第 3 课

vw、vh 与百分比单位

使用视口相对尺寸与百分比布局,同时避免破坏父级上下文。

视口单位与百分比看起来都是「相对的」,但它们回答的问题不同。

vw 与 vh

  • 1vw = 视口宽度的 1%
  • 1vh = 视口高度的 1%

1440px 宽的视口下:

.hero {
  padding-inline: 5vw; /* 72px */
}

视口单位适合:

  • Fluid 水平内边距与 gap
  • 随屏幕宽度缩放的全宽区块
  • clamp() 组合的英雄区排版

需要注意:

  • 移动端浏览器 UI 会改变有效视口高度
  • 极小视口下单独使用 vw 可能过大或过小
  • 可访问性:仅用 vw 定字号可能在窄屏上过小

百分比单位

50% 相对的是 包含块(containing block),不一定是视口。

.sidebar {
  width: 30%;
}

.card-title {
  font-size: 120%; /* 相对父级字号 */
}

百分比适合:

  • 已知容器内的列布局
  • 需要填满父级宽度的图片与媒体
  • 嵌套排版缩放

同一个 % 在不同属性上可能指父盒宽度或父级字号。

vw vs %

问题更合适的单位
随屏幕宽度全局缩放vw
填满父容器%
带上/下限的排版用 rem + vw 的 clamp()
卡片内栅格列% 或 fr

给视口单位加上边界

常见响应式写法:

.section-title {
  font-size: clamp(1.25rem, 0.9rem + 1.5vw, 2rem);
}

正文若只用 vw 往往过于激进。clamp() 提供最小与最大保护。

关键结论

vw/vh 以视口为参考;% 以父盒或父级字号为参考。排版场景应通过 clamp() 把 vw 与 rem 组合使用。

CSS 单位换算 / Clamp 生成器 中调整视口宽度,预览 px 如何映射到 vw。

想动手练习时,可使用 DevCove 相关工具——可选,不属于本课正文。

打开相关工具

返回课程概览