前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库CSS dynamic viewport units svh lvh dvh
CSS响应式设计

移动端的 svh、lvh、dvh 应该怎么选?

svh 按浏览器工具栏展开时的小视口算,lvh 按工具栏收起时的大视口算,dvh 随当前可见视口动态变化。全屏交互面板常用 dvh,但要留意滚动时高度跳动。

前端进阶之旅 · 一题精讲更新于 2026.09.29
CSS#响应式设计
先看核心答案读代码示例
理解线索

移动工具栏改变可见高度

  1. svh工具栏展开时的较小视口基准
  2. lvh工具栏收起时的较大视口基准
  3. dvh随当前动态视口更新的基准

100dvh 高度会随浏览器工具栏显隐变化,内容布局可能跟着移动。

核心回答

先记住这个答案

移动浏览器的地址栏和工具栏会改变可见区域。100svh 使用较小视口,通常能避免工具栏展开时底部被挡;100lvh 使用较大视口,工具栏展开时可能有部分内容落到可见区域外;100dvh 跟随当前可见高度变化,适合需要真正铺满屏幕的面板,但可能产生重排。没有一个单位适合所有页面。

  • svh 取小视口高度
  • lvh 取大视口高度
  • dvh 随当前视口变化
  • 全屏面板需同时考虑安全区

全屏面板和首屏横幅的选择

登录弹层或移动端全屏菜单希望底部操作始终位于当前可见区域内,可以用动态视口高度。营销首屏如果不希望地址栏滑动时整块内容跳动,较稳定的小视口高度可能更合适。

全屏菜单使用动态高度CSS
.mobile-menu { min-height: 100vh; min-height: 100dvh; overflow: auto; }
.mobile-menu__actions { padding-bottom: env(safe-area-inset-bottom); }

前一条 100vh 是旧环境回退,支持动态单位的浏览器会采用后写的 100dvh。底部安全区是设备物理边缘问题,不能只靠视口高度自动解决。 全屏固定面板还要检查键盘弹出时的行为:浏览器对键盘与视口的处理并不完全相同,不能保证 dvh 自动给输入框留出空间。

稳定与贴合可见区的取舍

svh 的尺寸较稳定,但工具栏收起时页面底部可能有额外空白。lvh 也稳定,却可能在工具栏出现时把底部内容放在屏幕外。dvh 尽量贴合当前视口,代价是工具栏状态变化时重新计算布局。

面试时先说需求:首屏背景、可滚动页面、固定底部按钮各自对稳定与可见性的要求不同。再选择单位,并在真机上检查浏览器工具栏、系统安全区和软键盘三种状态。

固定底部操作条与整页容器还要分开考虑。整页用 min-height: 100dvh 时,内容超过一屏仍可继续向下滚;若误写成固定 height: 100dvh 且隐藏溢出,键盘弹出后表单底部可能根本滚不到。真机测试时同时试工具栏展开、收起以及输入框获得焦点,观察按钮是否可见、内容是否能滚动,而不是只看静止截图是否铺满。

回答前,多想一步

容易答错的地方

以为 100vh 总等于眼前可见高度
移动浏览器工具栏会改变可见区域,传统 vh 在不同环境中的表现不宜当成实时可见高度。
以为 dvh 能处理所有键盘遮挡
软键盘对视口尺寸的影响因浏览器而异,还需实际测试滚动与焦点区域。
试着用自己的话回答

面试官还会怎么问?

不想滚动时横幅跳动用哪个?

通常考虑较稳定的 svh,但工具栏收起后的空余空间也要纳入设计。

底部按钮贴边还要处理什么?

检查 env(safe-area-inset-bottom),避免被刘海或手势条区域遮挡。

旧浏览器不认识 dvh 怎么办?

先写 vh 等基础值,再写 dvh 覆盖;旧环境会忽略不认识的后者。

从一道题,走向一组知识

把知识连起来

响应式设计

@supports 和 @media 各检测什么,渐进增强怎么写?

@supports 可为新视口单位提供旧环境回退。

响应式设计

响应式图片选 AVIF、WebP 时该用 picture 还是 srcset?

移动端全屏横幅的高度可按 svh 或 dvh 设置,背景或内容图片仍需选合适格式与尺寸。

参考资料

  • CSS:响应式设计参考资料

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 全屏面板和首屏横幅的选择
  3. 稳定与贴合可见区的取舍
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑