CSS中的vw是一种视口相对长度单位,全称为viewport width,它的取值基于当前浏览器视口的宽度进行计算,是响应式布局开发中非常实用的单位类型。和传统的长度单位px、em不同,vw的大小会随着视口宽度的变化而动态调整,能够很好地适配不同尺寸的设备屏幕。

vw单位的基本定义
vw表示视口宽度的百分比,1vw等于视口宽度的1%。这里的视口指的是浏览器中用于展示网页内容的区域,不包含浏览器的工具栏、地址栏等部分。
比如当前浏览器视口宽度为1200px,那么1vw就等于12px,10vw就等于120px。如果视口宽度调整为750px,那么1vw就变成7.5px,10vw变成75px,元素的大小会随视口宽度自动变化。
vw和其他视口单位的区别
除了vw之外,CSS还有其他的视口相关单位,它们的计算基准有所不同,具体区别如下:
| 单位 | 定义 | 计算基准 |
|---|---|---|
| vw | 视口宽度百分比 | 1vw = 视口宽度的1% |
| vh | 视口高度百分比 | 1vh = 视口高度的1% |
| vmin | 视口较小尺寸的百分比 | 1vmin = 视口宽度和高度中较小值的1% |
| vmax | 视口较大尺寸的百分比 | 1vmax = 视口宽度和高度中较大值的1% |
vw单位的使用示例
下面通过几个常见的场景来展示vw单位的具体用法,代码中的特殊字符都已经做了转义处理。
示例1:设置元素宽度为视口的一半
要让一个div元素的宽度始终占视口宽度的50%,可以直接设置宽度为50vw,代码如下:
/* 容器宽度占视口一半 */
.container {
width: 50vw;
height: 200px;
background-color: #f0f0f0;
}
示例2:结合calc函数实现动态计算
如果需要让元素宽度在vw的基础上减去固定的像素值,可以结合calc函数使用,比如设置宽度为视口宽度的80%再减去20px:
/* 宽度计算:视口80%减去20px */
.box {
width: calc(80vw - 20px);
padding: 15px;
border: 1px solid #ccc;
}
示例3:字体大小使用vw实现自适应
vw也可以用于设置字体大小,让文字在不同屏幕下自动调整大小,避免移动端文字过小或者桌面端文字过大的问题:
/* 字体大小随视口变化,最小14px最大20px */
.text {
font-size: clamp(14px, 2vw, 20px);
}
使用vw单位的注意事项
- vw的计算基于视口宽度,在页面滚动时如果视口宽度没有变化,元素大小不会重新计算,刷新页面后才会更新。
- 如果设置了视口缩放相关的meta标签,比如<meta name="viewport" content="width=device-width, initial-scale=1.0">,vw的计算会基于设置后的视口宽度,更符合移动端适配的预期。
- 不要过度使用vw单位,对于不需要随视口变化的小元素,使用px或者rem单位会更合适,避免布局出现不必要的波动。
- 在极少数旧版本浏览器中可能存在vw单位兼容问题,如果需要兼容非常老的设备,可以搭配px单位作为降级方案。
vw单位的常见应用场景
vw单位最适合用在需要随屏幕宽度自适应的场景,比如:
- 全屏轮播图的宽度设置,设置为100vw就能占满整个视口宽度。
- 响应式栅格布局的列宽设置,不同屏幕下自动调整列的宽度占比。
- 移动端页面的整体布局适配,减少媒体查询的使用次数。
- 大屏展示页面的元素尺寸设置,适配不同尺寸的大屏设备。