PX转VH转换器
免费在线工具,轻松将像素(PX)转换为视口高度(VH)单位,帮你快速实现响应式布局和流体设计。
(100px ÷ 1080px) × 100 = 9.26vh
视口的高度(像素值,例如桌面端为 1080px)
如何使用PX转VH转换器
只需三步,即可快速完成像素到视口高度单位的转换。
设置视口高度
输入浏览器视口的高度值(单位:像素)。桌面设备一般是1080px,平板是1024px,手机是667px。
输入像素值
输入要转换的像素值。支持整数和小数,让转换结果更精确。
获取VH结果
转换器会立即计算出对应的VH值。复制结果直接用在CSS中,轻松实现响应式布局。
PX与VH:理解两者的区别
使用转换器前,先了解像素(PX)和视口高度(VH)单位在响应式设计中的主要区别。
什么是像素(PX)?
固定尺寸单位
像素是绝对单位,不管视口大小如何变化,尺寸始终固定。100px永远是100px。
灵活性有限
基于像素的高度无法根据屏幕尺寸自动调整,做响应式设计时比较麻烦。
适用场景
最适合边框、固定高度元素,以及需要精确控制尺寸的场景。
什么是视口高度(VH)单位?
相对于视口
1vh等于视口高度的1%。在1080px的屏幕上,1vh = 10.8px。尺寸会随视口改变自动缩放。
真正的响应式
VH单位会根据屏幕大小自动调整,特别适合响应式排版和等比缩放的布局。
响应式设计的优势
使用VH的布局在从手机到超高显示器的所有设备上都能完美适配。
PX转VH转换公式
vh = (像素值 ÷ 视口高度) × 100
视口高度指的是浏览器窗口的高度(单位:像素)
示例: 100px ÷ 1080px × 100 = 9.26vh
示例: 50px ÷ 1080px × 100 = 4.63vh
示例: 200px ÷ 1080px × 100 = 18.52vh
计算步骤示例
第1步: 确定像素值 → 150px
第2步: 确定视口高度 → 1080px
第3步: 像素值除以视口高度 → 150 ÷ 1080 = 0.1389
第4步: 乘以100得出结果 → 0.1389 × 100 = 13.89vh
最终结果:在1080px视口下,150px = 13.89vh
PX转VH转换参考表
快速查询常见像素值到VH单位的转换结果,根据不同视口高度快速确定转换值。
桌面设备:1080px
| 像素值 | VH值 |
|---|---|
| 50px | 4.63vh |
| 100px | 9.26vh |
| 150px | 13.89vh |
| 200px | 18.52vh |
| 300px | 27.78vh |
| 400px | 37.04vh |
平板设备:1024px
| 像素值 | VH值 |
|---|---|
| 50px | 4.88vh |
| 100px | 9.77vh |
| 150px | 14.65vh |
| 200px | 19.53vh |
| 300px | 29.30vh |
| 400px | 39.06vh |
移动设备:667px
| 像素值 | VH值 |
|---|---|
| 20px | 3.00vh |
| 50px | 7.50vh |
| 100px | 14.99vh |
| 150px | 22.49vh |
| 200px | 29.99vh |
| 300px | 44.98vh |
💡使用提示
这些参考表适合在构建响应式布局时快速查询。需要注意的是,VH值始终相对于视口高度,要根据目标设备选择对应的参考表。如需自定义值,可使用上面的转换器工具。
常用设备视口高度参考
不同设备的屏幕分辨率和视口高度各不相同,选择正确的视口基准值对转换结果至关重要。这里整理了常见设备的视口高度供参考。
桌面显示器
💡 推荐:网站开发一般以1080px为基准,数据大屏项目常用1920×1080
平板设备
💡 推荐:平板适配常用1024px基准,可兼顾竖屏和小屏设备
手机设备
💡 推荐:移动端常用750px设计稿(2倍图),对应实际375px宽度,视口高度一般是667px
🎯如何选择合适的视口高度基准?
根据设计稿尺寸
如果设计师给的是1920×1080的设计稿,那么视口高度就用1080px
根据目标设备
主要面向桌面用户用1080px,移动端用667px或750px
根据项目类型
数据大屏项目固定用1920×1080,响应式网站建议用主流的1080px
参考用户数据
查看网站分析工具,选择访问量最大的设备分辨率作为基准
数据大屏项目专用方案
1920×1080 分辨率的最佳实践
⚙️ 自动化配置方案
使用 postcss-px-to-viewport 插件自动转换:
// postcss.config.js
module.exports = {
plugins: {
'postcss-px-to-viewport': {
viewportWidth: 1920, // 设计稿宽度
viewportHeight: 1080, // 设计稿高度
unitPrecision: 5, // 转换精度
viewportUnit: 'vh', // 转换单位
selectorBlackList: [], // 不转换的选择器
minPixelValue: 1, // 最小转换值
mediaQuery: false // 是否转换媒体查询中的px
}
}
}🔧 SCSS 函数方案
定义全局转换函数:
// _functions.scss
@use "sass:math";
@function vh($px) {
@return math.div($px, 1080) * 100vh;
}
// 使用示例
.dashboard {
height: vh(800); // 自动转为 74.07vh
padding: vh(40) 0; // 自动转为 3.7vh
}📱 JavaScript 动态方案
适用于需要运行时计算的场景:
// 定义转换工具
const pxToVh = (px, viewportHeight = 1080) => {
return (px / viewportHeight * 100).toFixed(2) + 'vh';
};
// 使用示例
element.style.height = pxToVh(500); // "46.30vh"
element.style.marginTop = pxToVh(80); // "7.41vh"
// 也可以用于动态计算
const screenHeight = window.innerHeight;
element.style.height = pxToVh(500, screenHeight);⚡ 性能提示: 对于数据大屏项目,推荐使用 postcss 插件在构建阶段自动转换,避免运行时计算带来的性能损耗。如果需要适配多种分辨率,可以结合 CSS scale 缩放方案。
实际CSS代码示例
看看如何在实际CSS代码中使用像素转VH的转换,适用于常见的响应式设计场景。
❌ 固定高度(像素)
.container {
min-height: 600px;
padding: 60px 20px;
}
.hero-section {
height: 480px;
margin-bottom: 24px;
}
.card {
height: 300px;
padding: 20px;
}这种固定高度布局不会随视口缩放,在不同屏幕尺寸上可能显示效果不佳。
✓ 响应式(VH单位)
.container {
min-height: 55.56vh;
padding: 5.56vh 20px;
}
.hero-section {
height: 44.44vh;
margin-bottom: 2.22vh;
}
.card {
height: 27.78vh;
padding: 1.85vh;
}这种响应式布局会等比例随视口缩放,在所有屏幕尺寸上都能保持一致的视觉效果。
全屏布局
/* 桌面视口:1080px */
.hero-banner {
height: 100vh; /* 全屏高度 */
}
.section {
min-height: 50vh; /* 半屏高度 */
}
.modal {
max-height: 80vh; /* 最大80%视口高度 */
overflow-y: auto;
}VH单位特别适合创建全屏布局,确保内容能完美填充视口高度。
流体间距系统
/* 基于1080px视口 */
.section {
padding-top: 9.26vh; /* 100px */
padding-bottom: 9.26vh; /* 100px */
}
.card-stack {
gap: 3.70vh; /* 40px */
}
.button {
padding: 1.48vh 20px; /* 16px 20px */
}垂直间距等比例缩放,确保在不同视口尺寸上保持一致的视觉节奏感。
⚠️常见错误要避免
对小元素使用VH
边框、图标或小UI元素不要用VH,这些应该保持固定大小,用像素或rem单位更好。
不设最小/最大值限制
要用min()或max()函数防止内容在大屏上过高或小屏上过矮,比如:height: min(50vh, 600px)
移动端地址栏问题
移动浏览器的地址栏会影响VH计算。使用dvh(动态视口高度)替代vh可以解决这个问题。
忽视内容溢出
使用VH固定高度时,要确保内容能正确滚动。添加overflow-y: auto防止内容被裁剪。
现代CSS解决方案:如何安全使用VH单位
学习如何结合clamp()、min()和max()函数使用视口单位,打造在所有设备上都完美适配的响应式设计。
🎯 clamp()函数 - 最佳实践
clamp()函数可以设置最小值、首选值和最大值,确保元素高度永远不会过小或过大,特别适合处理不同屏幕尺寸。
/* 带限制的响应式高度 */
.hero {
height: clamp(300px, 50vh, 800px);
/* 最小值: 300px, 首选值: 50vh, 最大值: 800px */
}
.section {
min-height: clamp(400px, 60vh, 900px);
/* 在400px到900px之间缩放 */
}
.modal {
max-height: clamp(300px, 80vh, 1000px);
/* 带约束的响应式最大高度 */
}✓ 优势: 元素高度能响应式缩放,同时保证在极端尺寸下仍然可用,提供更好的用户体验。
⚡ min()和max()函数
用min()限制最大高度,max()设置最小高度,特别适合防止内容在移动端过矮或在大屏幕上过高。
/* 永远不超过600px */
.banner {
height: min(50vh, 600px);
}
/* 永远不小于300px */
.section {
min-height: max(40vh, 300px);
}
/* 带最大值限制的响应式高度 */
.card {
height: min(80vh, 800px);
/* 占视口80%但不超过800px */
}💡 使用技巧: 将min()和max()与calc()结合使用,可以更精细地控制响应式高度。
🔧 解决移动端地址栏问题
移动浏览器的地址栏会影响100vh的计算,导致内容被裁剪或出现滚动条。这里有三个解决方案:
/* 方案1:使用dvh(动态视口高度) */
.full-height {
height: 100dvh; /* 自动适应地址栏变化 */
}
/* 方案2:使用svh(小视口高度) */
.stable-height {
height: 100svh; /* 最小可用高度 */
}
/* 方案3:使用lvh(大视口高度) */
.max-height {
height: 100lvh; /* 最大可用高度 */
}
/* 方案4:CSS变量 + JavaScript */
:root {
--vh: 1vh; /* 由JS动态设置 */
}
.custom-height {
height: calc(var(--vh, 1vh) * 100);
}注意:dvh、svh和lvh是较新的视口单位,移动端地址栏处理更好,但要先检查浏览器兼容性。
💻 JavaScript 完整解决方案(兼容所有浏览器)
如果需要兼容旧版浏览器或想要最精确的控制,可以使用JavaScript动态计算真实的视口高度。这个方案兼容性最好,适用于所有移动端浏览器。
// 方法1:动态设置CSS变量(推荐)
function setVhVariable() {
// 获取真实的视口高度
const vh = window.innerHeight * 0.01;
// 设置CSS变量 --vh 为实际视口高度的1%
document.documentElement.style.setProperty('--vh', `${vh}px`);
}
// 页面加载时设置
setVhVariable();
// 监听窗口大小变化(包括地址栏显示/隐藏)
window.addEventListener('resize', setVhVariable);
window.addEventListener('orientationchange', setVhVariable);
/* CSS中使用 */
.full-height {
height: 100vh; /* 不支持CSS变量的浏览器降级方案 */
height: calc(var(--vh, 1vh) * 100);
}
// 方法2:直接计算并应用样式
function setFullHeight(element) {
element.style.height = window.innerHeight + 'px';
}
// 使用示例
const heroSection = document.querySelector('.hero');
setFullHeight(heroSection);
window.addEventListener('resize', () => setFullHeight(heroSection));✓ 最佳实践: 使用方法1的CSS变量方案,既保持了CSS的灵活性,又能精确控制高度。记得添加 height: 100vh 作为降级方案,确保在不支持CSS变量的浏览器中仍能正常显示。
⚠️ 性能注意: resize事件会频繁触发,建议添加防抖(debounce)优化性能。实际项目中,可以使用lodash的debounce函数或自己实现一个简单的防抖。
🎨 全屏布局最佳实践
创建全屏布局时,结合VH单位和其他技术,确保在所有设备上都有完美的显示效果。
/* 全屏首屏区 */
.hero {
height: 100dvh; /* 动态适应 */
display: flex;
flex-direction: column;
justify-content: center;
}
/* 分屏布局 */
.split-layout {
display: grid;
grid-template-rows: 40vh 60vh;
height: 100dvh;
}
/* 滚动容器 */
.scrollable-section {
height: clamp(400px, 70vh, 1200px);
overflow-y: auto;
}
/* 固定定位元素 */
.sidebar {
position: fixed;
height: 100vh;
overflow-y: auto;
}📱 移动端优化: 移动设备上优先使用dvh而不是vh,避免地址栏带来的布局问题!
快速对比:各种方案的适用场景
| 方法 | 最佳使用场景 | 移动端兼容 | 浏览器支持 |
|---|---|---|---|
| 纯VH | 首屏区、全屏布局 | ⚠ 地址栏问题 | ✓ 优秀 |
| clamp() | 带约束的响应式高度 | ✓ 优秀 | ✓ 良好(IE不支持) |
| min()/max() | 限制高度、防止溢出 | ✓ 良好 | ✓ 良好(IE不支持) |
| dvh | 移动端全屏布局 | ✓ 优秀(解决地址栏) | ⚠ 有限(较新浏览器) |
| svh/lvh | 特定场景的精确控制 | ✓ 良好 | ⚠ 有限(较新浏览器) |
何时转换PX为VH?
了解何时转换PX为VH对于CSS最佳实践至关重要。在这些常见场景中使用我们的转换器。
适用于VH单位的场景:
- ✓首屏区和全屏横幅
- ✓垂直居中的内容区域
- ✓分屏布局和模态框
- ✓需要在各设备上保持垂直比例的元素
- ✓固定导航下的内容区域
适用于像素的场景:
- •边框和边框宽度
- •行高和字体大小
- •图标和小UI元素
- •媒体查询断点
- •需要精确一致尺寸的元素
常见问题解答
关于PX转VH转换、移动端兼容性、浏览器支持及响应式CSS最佳实践的常见问题解答。
如何将PX转换为VH?
转换方法很简单,用像素值除以视口高度,然后乘以100。转换公式是:vh = (px ÷ 视口高度) × 100。例如在1080px视口上转换100px:100 ÷ 1080 × 100 = 9.26vh。我们的转换器会自动完成这个计算。
用什么视口高度进行转换?
视口高度要看你的设计目标。常见的值有:桌面设计用1080px,平板设备用1024px,手机设备用667px(iPhone 8尺寸)。选择与你主要设计断点匹配的视口高度即可。很多设计师采用桌面优先的设计方式,使用1080px作为基准。
VH和VW有什么区别?
VH(视口高度)和VW(视口宽度)都是视口单位,但参照对象不同。1vh等于视口高度的1%,1vw等于视口宽度的1%。VH适合垂直布局、全屏高度和模态框;VW适合水平布局、全宽元素和响应式宽度。可以组合使用,例如width: 100vw; height: 100vh;创建完整的全屏覆盖。
为什么移动端100vh会出现滚动条?
这是移动浏览器地址栏的问题。移动浏览器计算100vh时包含了地址栏高度,但地址栏滚动时会隐藏,导致实际可视区域变小,出现滚动条。解决方案:1)使用100dvh(动态视口高度),会随地址栏自动调整;2)使用100svh(小视口高度),始终使用最小可用高度;3)使用JavaScript动态计算并设置CSS变量。
可以对字体大小使用VH吗?
可以,但需要谨慎使用。VH可以创建随视口高度缩放的文字,但要用clamp()防止文字过大或过小。例如:font-size: clamp(14px, 2vh, 32px)。不过,字体大小一般用VW(视口宽度)更合适,因为阅读宽度比高度更重要。对于垂直布局的文字(例如竖排文本),VH会更实用。
vh、dvh、svh和lvh有什么区别?
这些都是视口高度单位,但行为不同:vh(视口高度)是原始单位,1vh = 视口高度的1%,在移动端不考虑地址栏变化。dvh(动态视口高度)会随移动浏览器工具栏的显示/隐藏动态调整。svh(小视口高度)使用UI可见时的最小高度。lvh(大视口高度)使用UI隐藏时的最大高度。移动端推荐使用dvh而不是vh。
如何创建全屏布局?
创建全屏布局最佳实践是使用height: 100dvh而不是100vh,特别是移动端。桌面端可以继续使用vh,但dvh能更好地处理移动浏览器的UI变化。对于固定头部的布局,可以用height: calc(100dvh - 60px)减去头部高度。确保添加overflow-y: auto处理内容溢出。
VH单位的浏览器兼容性如何?
vh单位在所有现代浏览器中都有良好支持,包括IE9+。但较新的单位支持有限:dvh、svh、lvh需要Chrome 108+、Firefox 101+、Safari 15.4+。使用新单位前建议提供vh作为降级方案:height: 100vh; height: 100dvh;。这样不支持dvh的浏览器会使用vh。
什么时候应该使用百分比而不是VH?
当元素高度需要相对于父容器而不是视口时,使用百分比。VH始终相对于视口高度,而百分比相对于父元素。比如在一个容器内创建50%高度的两列布局,用百分比;创建占据半个屏幕的首屏区,用50vh。如果父容器高度固定或确定,百分比更可控;如果要随整个视口高度缩放,VH更合适。
如何防止VH导致的内容溢出?
使用VH固定高度时,内容可能会溢出。解决方案:1)使用min-height而不是height,允许内容撑开;2)添加overflow-y: auto允许滚动;3)使用clamp()设置合理的最小/最大值;4)结合flexbox或grid,让内容自然流动。例如:min-height: clamp(400px, 80vh, 1200px); overflow-y: auto;
做数据大屏项目,如何批量转换PX为VH?
数据大屏项目一般有大量的px单位需要转换。推荐三种方法:1)使用postcss-px-to-viewport插件(最推荐),在构建阶段自动转换,配置viewportHeight为1080即可;2)使用SCSS/SASS函数,定义vh()函数,写样式时直接调用,例如height: vh(500);3)使用在线批量工具,直接将设计稿中的所有px值复制进来转换。对于1920×1080的标准大屏,转换公式是:vh = px ÷ 1080 × 100。
VH单位会影响SEO或页面性能吗?
不会。VH是标准的CSS单位,浏览器原生支持,不会对SEO或性能产生负面影响。相反,使用VH实现响应式布局可以提升移动端用户体验,间接改善SEO表现。需要注意的是:1)避免JavaScript频繁计算vh值,如果必须用JS,要添加防抖优化;2)合理使用VH,不要滥用在所有元素上;3)为旧浏览器提供降级方案。总体来说,VH是性能友好的现代CSS单位。
设计稿是750px宽的移动端稿,视口高度应该用多少?
750px宽的设计稿一般是按照iPhone 6/7/8的2倍图设计的,实际设备宽度是375px。对应的视口高度取决于设计稿的高宽比。常见情况:1)如果设计稿高度是1334px,实际视口高度是667px(iPhone 8);2)如果设计稿高度是1624px,实际视口高度是812px(iPhone X系列)。关键是保持设计稿和实际视口的宽高比一致。建议询问设计师设计稿是按照哪个设备尺寸设计的,或者直接使用设计稿高度的一半作为视口高度基准。
VH单位在微信小程序/内嵌H5中能用吗?
可以,但需要注意兼容性。微信小程序:支持vh/vw单位(基础库2.4.0+),可以正常使用。微信内嵌H5:微信内置浏览器(X5内核)支持vh/vw,但会有移动端地址栏问题。建议:1)使用dvh代替vh,并提供vh降级;2)或使用JavaScript动态计算方案;3)测试时注意微信开发者工具和真机可能有差异,以真机测试为准。钉钉、企业微信等其他平台的webview一般也支持vh,但最好实际测试确认。
为什么有些元素用VH后在横屏时显示异常?
这是因为设备横竖屏切换时,视口的宽度和高度会互换,vh的计算基准也随之改变。例如竖屏时视口高度是844px,横屏时变成390px,50vh的实际高度会从422px骤降到195px。解决方案:1)使用vmin或vmax:vmin取宽高较小值,vmax取较大值,适合需要在横竖屏保持一致比例的场景;2)媒体查询针对性处理:使用@media (orientation: landscape)为横屏单独设置样式;3)限制最小/最大值:使用clamp()或min()/max()防止极端情况。