当前位置: 首页 > news >正文

前端中rem,vh,vw

1. rem(Root EM)

参照对象

  • 基准:相对于 根元素(<html>)的 font-size 计算。

  • 默认情况下,浏览器的根 font-size 为 16px(即 1rem = 16px),但可通过 CSS 修改:

    html {
      font-size: 20px; /* 此时 1rem = 20px */
    }

不同分辨率下的表现

  • 变化规则

    • rem 的值 只取决于根元素的 font-size,与视口大小无关。

    • 若根 font-size 固定(如 20px),1rem 永远等于 20px

    • 若根 font-size 动态设置(如通过媒体查询或 JS 根据视口调整),rem 会按比例变化。

  • 常见用法

    /* 动态调整根 font-size(适配移动端) */
    html {
      font-size: calc(100vw / 375 * 16); /* 基于设计稿宽度 375px */
    }

 

2. vh(Viewport Height)

参照对象

  • 基准:相对于 视口(Viewport)高度的 1%

    • 1vh = 1% 的视口高度(如视口高度为 1000px,则 1vh = 10px)。

不同分辨率下的表现

  • 变化规则

    • vh 的值 随视口高度变化

    • 在移动端,浏览器地址栏的显示/隐藏会动态改变视口高度,导致 vh 值波动(可用 dvh 解决)。

  • 常见用法

    .full-screen {
      height: 100vh; /* 始终占满视口高度 */
    }

 

3. vw(Viewport Width)

参照对象

  • 基准:相对于 视口(Viewport)宽度的 1%

    • 1vw = 1% 的视口宽度(如视口宽度为 1200px,则 1vw = 12px)。

不同分辨率下的表现

  • 变化规则

    • vw 的值 随视口宽度变化

    • 适用于响应式布局(如替代百分比,避免嵌套元素计算问题)。

  • 常见用法

    .responsive-box {
      width: 50vw; /* 始终占视口宽度的一半 */
    }

 

 

4. 对比总结

单位参照对象是否随视口变化典型应用场景
rem根元素的 font-size否(除非动态修改根字号)字体大小、间距、整体缩放
vh视口高度全屏布局、高度自适应
vw视口宽度响应式宽度、栅格系统

5. 特殊注意事项

移动端 vh 的问题

  • 问题:在移动端浏览器中,100vh 可能包含地址栏高度,导致内容被遮挡。

  • 解决方案

    • 使用 CSS 新单位 dvh(Dynamic Viewport Height,动态视口高度):

      .mobile-section {
        height: 100dvh; /* 自动排除地址栏高度 */
      }

    • 或通过 JavaScript 动态计算:

      document.documentElement.style.setProperty('--vh', `${window.innerHeight}px`);
      .mobile-section {
        height: calc(var(--vh, 1vh) * 100);
      }

vw 的替代方案

  • 若需避免 vw 计算复杂性,可使用 CSS 容器查询(cqw)或 Flex/Grid 布局。

 

6. 不同分辨率下的计算示例

视口尺寸1rem(根 font-size: 16px1vh(视口高度 900px1vw(视口宽度 1200px
桌面端16px9px12px
移动端竖屏16px6.5px(含地址栏)3.75px(宽度 375px
移动端横屏16px3.75px(高度 375px6.5px(宽度 650px

 

7. 如何选择单位?

  • 全局缩放:用 rem(结合媒体查询动态调整根 font-size)。

  • 视口适配:用 vw/vh(或 dvh 解决移动端问题)。

  • 精确控制:结合 calc() 使用(如 calc(1rem + 1vw))。

通过合理选择单位,可以轻松实现跨设备的响应式布局。

 

http://www.dtcms.com/a/108631.html

相关文章:

  • 网约车APP评价系统从0到1
  • 红宝书第二十六讲:详解Web Workers:专用、共享、Service Worker
  • PyTorch中Linear全连接层
  • 视频设备轨迹回放平台EasyCVR如何搭建公共娱乐场所远程视频监控系统
  • 铁路语义分割数据下载RailSem19: A Dataset for Semantic Rail Scene Understanding
  • 使用Android 原生LocationManager获取经纬度
  • 教育软件 UI 设计:打造吸睛又实用的学习入口
  • SELinux
  • Leetcode-100 二分查找常见操作总结
  • 数据点燃创新引擎:数据驱动的产品开发如何重塑未来?
  • Airflow量化入门系列:第一章 Apache Airflow 基础
  • 红宝书第二十五讲:客户端存储(Cookie、localStorage、IndexedDB):浏览器里的“记忆盒子”
  • Leetcode 6233 -- DFS序列 | 两遍DFS
  • Vue中JSEncrypt 数据加密和解密处理
  • Firefox账号同步书签不一致(火狐浏览器书签同步不一致)
  • wireshak抓手机包 wifi手机抓包工具
  • linux 时钟
  • 【爬虫】网页抓包工具--Fiddler
  • 【Audio开发二】Android原生音量曲线调整说明
  • LInux基础指令(二)
  • 【VS+Qt】vs2022打开 vs2015项目
  • FastAPI中Pydantic异步分布式唯一性校验
  • 机器视觉调试——现场链接相机(解决各种相机链接问题)
  • 自然语言处理(22:(第六章2.)​seq2seq模型的实现​)
  • 图片懒加载、无限滚动加载、监听元素进入视口加载数据。「IntersectionObserver」
  • scala编程语言
  • 服务器数据恢复—Raid6阵列硬盘故障掉线,上层虚拟机数据如何恢复?
  • linux-firewalld防火墙允许端口
  • 【SLAM经典算法详解】Ubuntu 20.04部署LeGO-LOAM:从环境配置到KITTI适配,解决常见编译错误
  • 从零开发美颜SDK:美颜滤镜API的核心技术与实现