PX转VH转换器

免费在线工具,轻松将像素(PX)转换为视口高度(VH)单位,帮你快速实现响应式布局和流体设计。

px
px
vh

(100px ÷ 1080px) × 100 = 9.26vh

视口的高度(像素值,例如桌面端为 1080px)

如何使用PX转VH转换器

只需三步,即可快速完成像素到视口高度单位的转换。

1

设置视口高度

输入浏览器视口的高度值(单位:像素)。桌面设备一般是1080px,平板是1024px,手机是667px。

2

输入像素值

输入要转换的像素值。支持整数和小数,让转换结果更精确。

3

获取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值
50px4.63vh
100px9.26vh
150px13.89vh
200px18.52vh
300px27.78vh
400px37.04vh

平板设备:1024px

像素值VH值
50px4.88vh
100px9.77vh
150px14.65vh
200px19.53vh
300px29.30vh
400px39.06vh

移动设备:667px

像素值VH值
20px3.00vh
50px7.50vh
100px14.99vh
150px22.49vh
200px29.99vh
300px44.98vh

💡使用提示

这些参考表适合在构建响应式布局时快速查询。需要注意的是,VH值始终相对于视口高度,要根据目标设备选择对应的参考表。如需自定义值,可使用上面的转换器工具。

常用设备视口高度参考

不同设备的屏幕分辨率和视口高度各不相同,选择正确的视口基准值对转换结果至关重要。这里整理了常见设备的视口高度供参考。

🖥️

桌面显示器

标清显示器768px
高清显示器 (1080p)1080px
2K显示器1440px
4K显示器2160px

💡 推荐:网站开发一般以1080px为基准,数据大屏项目常用1920×1080

📱

平板设备

iPad (竖屏)1024px
iPad Pro 11"1194px
iPad Pro 12.9"1366px
Android平板800-1280px

💡 推荐:平板适配常用1024px基准,可兼顾竖屏和小屏设备

📱

手机设备

iPhone SE667px
iPhone 12/13/14844px
iPhone Pro Max926px
Android主流机型640-900px

💡 推荐:移动端常用750px设计稿(2倍图),对应实际375px宽度,视口高度一般是667px

🎯如何选择合适的视口高度基准?

1.

根据设计稿尺寸

如果设计师给的是1920×1080的设计稿,那么视口高度就用1080px

2.

根据目标设备

主要面向桌面用户用1080px,移动端用667px或750px

3.

根据项目类型

数据大屏项目固定用1920×1080,响应式网站建议用主流的1080px

4.

参考用户数据

查看网站分析工具,选择访问量最大的设备分辨率作为基准

📊

数据大屏项目专用方案

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+。但较新的单位支持有限:dvhsvhlvh需要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()防止极端情况。