vw对比rem优劣

本文对比了vw和rem两种弹性布局方案,vw单位基于视口宽度,无需js动态调整,代码更纯粹。rem布局依赖于根元素font-size,易受系统字体影响。vw单位在移动端表现优秀,兼容性已覆盖主流设备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

你还在用rem弹性布局吗?在html文件头部放入一大段压缩过的js代码,是不是让你很难受?来了解下vw吧,能让你的代码更纯粹

简单介绍下rem布局方案
rem是css中的长度单位,1rem=根元素html的font-size值。当页面中所有元素都使用rem单位时,你只需要改变根元素font-size值,所有元素就会按比例放大或者缩小。因此我们只需要写一小段js代码,根据屏幕宽度改变html的font-size值,就可以做到弹性布局。这种方法确实便捷,兼容性也很好,是目前非常主流的弹性布局方案。但这种方案有弊端(弊端之一:和根元素font-size值强耦合,系统字体放大或缩小时,会导致布局错乱;弊端之二:html文件头部需插入一段js代码 ),本文将介绍一种更优秀纯粹的方案。

vw单位实现弹性布局
我们先来看看这vw vh单位 w3c的官方解释 
vw:1% of viewport’s width 
vh:1% of viewport’s height

viewport即浏览器可视区域大小 
我们可以这样理解 100vw = window.innerwidth, 100vh = window.innerheight 
在移动端我们一般都可以认为,100vw就是屏幕宽度。若使用vw布局,就不需要再像rem那样,在js中去动态设置根元素的font-size了,sass中只需要使用这个函数做转换即可

//以iphone7尺寸@2x 750像素宽的视觉稿为例
@function vw($px) {
    @return ($px / 750) * 100vw;
}

//假设一个div元素在视觉稿中,宽度为120px,字体大小为12px
div {
    width: vw(120);
    font-size: vw(12);

vw单位和百分比%单位对比
那么100vw和我们平时用的width:100%有什么区别呢?

百分比%是根据父元素宽度或者高度进行计算,而vw vh固定按照viewport来计算,不会受父元素宽高度影响。
100vw包括了页面滚动条宽度(页面滚动条属于viewport范围内,100vw当然包括了页面滚动条宽度)。但把body或者html设置为width:100%时,是不包括页面滚动条的宽度的。也就是说100vw在有纵向滚动条的情况下,会比100%宽。 那么就会引发一个问题:pc端使用vw单位时,如果页面内容超出一屏长度,出现了纵向滚动条,同时有元素width:100vw, 则会导致出现条横向滚动条,因为元素(100vw + 滚动条宽度)超出了viewport宽度。(移动端滚动条不占位,所以不会有这个问题)不过pc端一般不需要弹性布局,还是尽量使用width:100%更保险。
为何rem布局比vw主流?兼容性
既然rem布局有弊端,与font-size强耦合会引发副作用,vw布局相较之下更纯粹代码逻辑也更清晰,为何移动端rem布局比vw主流?我们来看看vw和rem的兼容性。 


相较之下,vw单位兼容性比rem稍差,ios8、安卓4.4及以上才完全支持。这也是为什么之前rem布局一直更流行的原因。

总结
目前ios8、安卓4.4以下的用户已经非常少了,caniuse上面显示,在中国这部分用户只有1.2%,比例已经非常低了,而这部分用户的手机估计只会打打电话不会使用互联网的(还是需根据各自产品的用户数据分析来决定是否使用vw)。如果你的页面只适用于微信、qq,那绝对能放心使用vw单位,还可以配合vh针对一些特殊比例屏幕做处理,彻底摆脱使用rem带来的副作用,删掉html头部计算font-size的那段js代码,让你的代码更纯粹。
--------------------- 
作者:huangm黄敏 
来源:优快云 
原文:https://blog.youkuaiyun.com/huangm_fat/article/details/80090245?utm_source=copy 
版权声明:本文为博主原创文章,转载请附上博文链接!

在CSS响应式设计中,选择合适的单位对于实现良好的视觉效果布局适应性至关重要。**vw** **rem** 是两种常用的响应式单位,它们各自适用于不同的场景,并具有独特的特点。 ### vw 单位的应用 **vw(视口宽度单位)** 是基于视口宽度的相对单位,1vw 等于视口宽度的 1%。它非常适合用于需要与视口大小直接关联的元素,例如全屏背景、导航栏或英雄区域。通过使用 vw,可以确保元素的大小随着视口的变化而自动调整,从而实现无缝的视觉体验。例如: ```css .hero { height: 100vh; /* 全屏高度 */ font-size: 5vw; /* 字体大小随视口宽度变化 */ } ``` 需要注意的是,由于 vw 是基于视口宽度的单位,它在某些设备(如移动设备)上可能会导致字体大小过小或过大,因此在使用时需要谨慎调整[^4]。 ### rem 单位的应用 **rem(根 em)** 是基于 HTML 根元素字体大小的相对单位,1rem 等于根元素的字体大小(默认通常是 16px)。与 em 不同,rem 不受父元素字体大小的影响,这使得它更易于控制预测。rem 特别适合用于全局响应式布局,例如按钮、输入框段落的尺寸设置。通过动态调整根元素的字体大小,可以统一控制整个页面的布局比例。例如: ```css html { font-size: 16px; } @media (max-width: 768px) { html { font-size: 14px; /* 在小屏幕上缩小根字体大小 */ } } .button { padding: 1rem; /* 内边距随根字体大小变化 */ font-size: 1.2rem; /* 字体大小也随根字体大小变化 */ } ``` rem 的优势在于它可以提供一致的缩放体验,并且与媒体查询结合使用时,可以实现更加精细的响应式控制[^1]。 ### 如何选择 vw rem - **使用 vw**:当需要元素的大小与视口宽度直接相关时,例如全屏背景、标题或按钮的宽度,vw 是一个理想选择。它可以帮助实现视觉上的响应性,但需要注意在小屏幕上可能需要额外的调整。 - **使用 rem**:当需要全局控制布局字体大小时,rem 是更优的选择。它提供了更一致的缩放体验,并且可以避免嵌套元素带来的复杂性。 在实际开发中,通常会结合使用 vw rem 来实现更灵活的响应式设计。例如,可以使用 vw 设置根元素的字体大小,从而实现全局布局的响应性,同时使用 rem 来定义具体的元素尺寸[^3]。 ### 总结 在响应式设计中,**vw rem 各有优势**,选择哪一个取决于具体的应用场景。如果需要元素的大小与视口直接相关,可以选择 vw;如果需要全局控制一致的缩放体验,可以选择 rem。两者结合使用可以实现更强大的响应式效果。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值