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

CSS中的 `dvh` 与 `vh`: 深入理解视口单位

在现代 Web 开发中,视口单位(如vh,vw,vmin,vmax)被广泛用于响应式设计。然而,随着移动设备的发展,尤其是那些带有虚拟键盘的设备,传统的vh单位有时并不能提供理想的用户体验。本文将深入探讨vhdvh(Dynamic Viewport Height),帮助你更好地选择适合你的项目的单位。

1. 视口单位简介

1.1vh- Viewport Height

vh是视口高度单位,表示相对于视口高度的百分比。例如,100vh表示整个视口的高度。

.full-height{height:100vh;/* 元素高度等于视口高度 */}

1.2vw- Viewport Width

类似地,vw是视口宽度单位,表示相对于视口宽度的百分比。

.full-width{width:100vw;/* 元素宽度等于视口宽度 */}

1.3vminvmax

  • vmin:取视口宽高较小值的百分比。
  • vmax:取视口宽高较大值的百分比。

2.vh的局限性

尽管vh在桌面浏览器上表现良好,但在移动设备上,尤其是当虚拟键盘弹出时,它可能会导致一些问题。

2.1 虚拟键盘的影响

在移动设备上,当用户点击输入框时,虚拟键盘会弹出,这会导致视口高度的变化。如果使用vh来设置元素高度,可能会出现以下情况:

  • 当键盘弹出时,页面内容可能被部分遮挡。
  • 页面布局可能会变得混乱,用户体验下降。

示例:

<divclass="footer">Footer content</div>
.footer{position:fixed;bottom:0;height:10vh;/* 固定高度为视口高度的10% */background-color:lightblue;}

在这种情况下,当虚拟键盘弹出时,10vh可能不再代表原来的10%,而是更小的值,导致底部的footer高度变小甚至消失。

3.dvh- Dynamic Viewport Height

为了应对上述问题,CSS 引入了dvh(Dynamic Viewport Height)。dvh是一种新的单位,旨在解决视口高度变化的问题。

3.1dvh的工作原理

dvh动态调整其值以适应当前可用的视口高度。当虚拟键盘弹出时,dvh会自动调整,确保页面内容不会被遮挡。

示例:

.footer{position:fixed;bottom:0;height:10dvh;/* 使用 dvh 替代 vh */background-color:lightblue;}

在这个例子中,当虚拟键盘弹出时,10dvh仍然保持相对稳定的值,避免了页面布局的混乱。

4. 如何选择vh还是dvh

4.1 使用场景

  • vh:适用于不需要考虑虚拟键盘影响的场景,比如桌面端应用或简单的移动端页面。
  • dvh:适用于需要处理虚拟键盘弹出的复杂移动端页面,尤其是表单较多的页面。

4.2 浏览器支持

截至 2023 年底,dvh已经得到了大部分现代浏览器的支持,但为了兼容性,建议在实际项目中进行测试,并提供回退方案。

/* 提供回退方案 */.footer{height:10vh;/* 默认使用 vh */height:10dvh;/* 如果支持 dvh 则使用 dvh */}

5. 结论

vhdvh都是非常有用的 CSS 单位,但在不同的场景下有不同的表现。了解它们的区别并根据具体需求选择合适的单位,可以帮助我们创建更加流畅和友好的用户体验。

希望这篇博客对你有所帮助!如果你有任何疑问或建议,请随时留言交流。


扩展阅读

  • MDN 文档 - Viewport units
  • Can I Use - dvh
http://www.jsqmd.com/news/338888/

相关文章:

  • 高阶组件(HOC)在Vue中的实现:全面解析与最佳实践
  • Thinkphp和Laravel框架的私人服装西服定制设计与实现沙箱支付
  • 【建议收藏】2026网络安全学习路线全攻略:从小白到黑客大神,这6个阶段就够了!
  • SSM计算机毕设之基于ssm的就业招聘查询系统基于SSM的人才招聘管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • 若战神白起时代的秦昭襄王早逝,宣太后会成为秦国的“吕后”或“慈禧”吗?
  • Thinkphp和Laravel框架的蔚来新能源汽车对比推荐平台设计与实现
  • Nginx 实战实验:从基础配置到虚拟主机搭建 - 指南
  • 网络安全学习指南:SSRF漏洞原理与实战,建议收藏
  • Thinkphp和Laravel框架的生鲜海鲜商城交易系统设计与实现没论文
  • 《构建之法》第二章 个人技术和流程 读书笔记 - GENGAR
  • 收藏!小白入行网络安全指南:从技术原理到月入20K的职业路径全解析
  • 伐度司他Vadadustat治疗慢性肾病透析患者贫血的每日一次口服滴定方案
  • Thinkphp和Laravel框架的社区医疗保健健康预警监控系统的设计与实现
  • OpenClaw 安装文档
  • 开源69.9k星标,国产OCR杀进全球第一梯队,全新升级,文档再歪再糊也不怕(附源码)
  • eScan 杀毒软件被用于供应链攻击传播恶意软件
  • 必收藏!网络安全五大专业深度解析:谁主攻科研?谁进大厂拿高薪?小白程序员入门必看指南
  • PandaWiki:开源企业级AI知识库工具,基于RAG架构的私有化部署方案
  • 奇安信获NVDB-CAVD年度优秀技术支撑单位 10项原创漏洞证书彰显车联网安全实力
  • 无人机城市管理 AI+虚仿 创新实训室:构建城市管理智慧实训新构架
  • 基于springboot的大学生就业招聘系统-计算机毕业设计源码+LW无文档
  • 基于springboot健康管理微信小程序的设计与实现
  • 网络安全黑客入门必看:漏洞挖掘基础知识与平台收藏指南
  • 基于springboot的电动车租赁平台系统-计算机毕业设计源码+LW无文档
  • 国产化工业数据库推荐品牌崛起,筑牢工业高质量发展数据根基 - 速递信息
  • leetcode 3637. 三段式数组 I 简单
  • SpringBoot + Arthas,线上监控诊断进阶玩法!
  • 1月30号:急不来
  • 资源不够用,真的是机器太少吗?
  • SpringBoot 高效处理图片压缩包:上传、解压与存储实战指南