px→vh 変換ツール
ピクセル(px)をビューポート高さ(vh)に簡単変換。初心者でもわかる使い方ガイド付き。スマホ対応のレスポンシブデザインに最適な無料ツールです。
(100px ÷ 1080px) × 100 = 9.26vh
ビューポートの高さ(ピクセル値、例:デスクトップは1080px)
【初心者向け】変換ツールの使い方
たった3ステップでpxをvhに変換できます。Web制作初心者の方でも簡単に使えるツールです。
画面の高さを設定
画面の高さをピクセルで入力します。デスクトップなら1080px、タブレットなら1024px、スマートフォンなら667pxが目安です。
ピクセル値を入力
変換したいピクセル値を入力します。整数値でも小数値でも対応しており、高精度な計算が可能です。
VH値を取得
変換されたvh値が自動で計算されます。結果をコピーしてCSSに貼り付けるだけで、レスポンシブなレイアウトが完成します。
pxとvhの違いとは?わかりやすく解説
「px」と「vh」の違いを初心者にもわかりやすく説明します。レスポンシブデザインを作る上で知っておきたい基礎知識です。
ピクセル(PX)とは
固定サイズの単位
ピクセルは絶対単位です。画面サイズに関係なく、常に同じサイズを保ちます。100pxは常に100pxのままです。
柔軟性がない
ピクセルで指定した高さは異なる画面サイズに適応できないため、レスポンシブデザインの実装が複雑になります。
使うべき場面
枠線、高さが固定の要素、細かい調整が必要なデザイン要素に向いています。
画面高さ単位(VH)とは
画面高さに対する割合
1vhは画面高さの1%です。例えば1080pxの画面なら1vh = 10.8pxになります。画面サイズが変わると自動で調整されます。
完全なレスポンシブ対応
VH単位は画面サイズに自動で調整されるため、本当の意味でレスポンシブなレイアウト作りに最適です。
レスポンシブデザインの利点
VHを使ったレイアウトは、スマートフォンから大型ディスプレイまで、全ての端末で比例的に伸縮します。
PX to 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 to 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値は常に画面の高さに対する割合です。目標となる端末サイズに合わせて表を選んでください。表にない値を変換したい場合は、上記の変換ツールをお使いください。
実践的なCSS実装例
px to vh変換を活用した実際のCSS実装例です。レスポンシブデザインでよくある使い方を紹介します。
❌ 固定高さ(ピクセル)
.hero-section {
height: 600px;
padding: 80px 20px;
}
.card {
height: 300px;
margin-bottom: 40px;
}
.footer {
height: 200px;
padding: 30px 0;
}固定高さのレイアウトは画面サイズに適応できず、異なる端末で表示のバランスが崩れやすくなります。
✓ 可変レイアウト(VH単位)
.hero-section {
height: 55.56vh;
padding: 7.41vh 20px;
}
.card {
height: 27.78vh;
margin-bottom: 3.70vh;
}
.footer {
height: 18.52vh;
padding: 2.78vh 0;
}可変レイアウトは画面サイズに比例して伸縮するため、どの端末でも一貫した見た目を保つことができます。
フルハイトセクション
/* 1080pxビューポートベース */
.full-screen-hero {
height: 100vh;
min-height: 600px; /* フォールバック */
}
.half-screen {
height: 50vh; /* 540px */
}
.section {
padding-top: 9.26vh; /* 100px */
padding-bottom: 9.26vh; /* 100px */
}全画面表示のレイアウトは、どの端末でもなめらかに伸縮し、印象的な見た目を実現します。
垂直方向のスペーシングシステム
/* 1080pxビューポートベース */
.section {
margin-top: 9.26vh; /* 100px */
margin-bottom: 9.26vh; /* 100px */
}
.card-stack {
gap: 3.70vh; /* 40px */
}
.button {
padding: 1.48vh 2.08vw; /* 16px 40px */
}縦方向の余白が画面サイズに応じて伸縮するため、どの端末でも統一感のある見た目を維持できます。
⚠️避けるべき一般的なミス
小さい要素にVHを使う
枠線、アイコン、小さいUI要素には使わないでください。ピクセルまたはremを使いましょう。
最小値・最大値の制約がない
必ずmin()またはmax()関数を使って、要素が大きくなりすぎたり小さくなりすぎたりするのを防ぎましょう。例: height: min(50vh, 600px)
スマートフォンブラウザのアドレスバー問題
スマートフォンのブラウザではアドレスバーの表示/非表示で画面高さが変化します。dvh(動的な画面高さ)を使うか、min-heightを設定しましょう。
テキストサイズにVHを使う
フォントサイズには高さを基準とした単位は推奨されません。vwやremを使いましょう。
PX to VHの変換はいつ使う?
px to vh変換をどんな時に使うかを理解することは、CSS開発の基本です。よくある使い方を確認しましょう。
VH単位を使用する場面:
- ✓フルスクリーンヒーローセクション
- ✓垂直方向のスペーシングシステム
- ✓スクロールベースのセクション分割
- ✓モーダルとオーバーレイの高さ
- ✓ランディングページの垂直レイアウト
ピクセル単位を使用する場面:
- •ボーダーとボーダー幅
- •アイコンと小さいUI要素
- •フォントサイズ(remまたはvw推奨)
- •メディアクエリのブレークポイント
- •精密で一貫性のあるサイジングが必要な要素
スマホで100vhを使うと起きる問題と解決策
スマートフォンで「height: 100vh」を指定すると、アドレスバーの分だけコンテンツがはみ出してしまう問題があります。この問題の原因と3つの解決方法をご紹介します。
⚠️なぜスマホで100vhが画面いっぱいにならないの?
スマートフォンのブラウザには、アドレスバーやタブバーなど、表示・非表示が切り替わる動的な要素があります。従来のvh単位は、これらの要素が非表示の時の高さを基準にしています。
そのため、height: 100vhを指定すると、アドレスバーが表示されている状態では画面からはみ出してしまい、意図しないスクロールが発生してしまいます。
解決策1: dvh単位を使う【おすすめ】
.hero {
height: 100dvh;
}
/* dvh = dynamic viewport height
動的UIの状態に応じて
自動で高さが調整される */dvh(動的な画面高さ)は、アドレスバーの表示・非表示に応じて自動的に高さを調整してくれる新しい単位です。
✓ 推奨度: ★★★
Chrome 108+、Safari 15.4+で対応。モダンブラウザなら安心して使えます。
解決策2: svh単位を使う
.hero {
height: 100svh;
}
/* svh = small viewport height
UIが表示されている時の
高さを基準にする */svh(最小の画面高さ)は、アドレスバーなどの要素が表示されている状態の高さを基準にします。確実に画面内に収まります。
✓ 推奨度: ★★☆
コンテンツを確実に画面内に収めたい時に便利です。
解決策3: min-heightを使う
.hero {
min-height: 100vh;
height: auto;
}
/* min-heightならコンテンツが
はみ出ても自動で伸びる */heightの代わりにmin-heightを使うと、コンテンツがはみ出た場合に自動で高さが伸びます。
✓ 推奨度: ★★★
古いブラウザでも使える安全な方法です。
画面高さ単位の比較表
| 単位 | 意味 | 動的UI対応 | ブラウザ対応 |
|---|---|---|---|
| vh | 従来の画面高さ(アドレスバーが非表示の時) | × 非対応 | ◎ 全ブラウザ |
| dvh | 動的な画面高さ(アドレスバーの状態に応じて変化) | ◎ 完全対応 | ○ モダンブラウザ |
| svh | 最小の画面高さ(アドレスバーが表示の時) | ○ 対応 | ○ モダンブラウザ |
| lvh | 最大の画面高さ(アドレスバーが非表示の時) | ○ 対応 | ○ モダンブラウザ |
💡実装時のポイント
- ✓モダンブラウザ対応なら:
dvhを使うのが最もシンプルで確実です - ✓古いブラウザも対応するなら:
min-height: 100vhを使いましょう - ✓フォールバック記述:
height: 100vh; height: 100dvh;と両方書くと、新旧ブラウザ両対応できます
vh・vw・%の使い分け方
「vh」「vw」「%」の違いがわからない方も多いはず。それぞれの特徴と、どんな時に使うべきかを解説します。
vh (ビューポート高さ)
基準: ブラウザの表示領域の高さ1vh = ビューポート高さの1%
画面の高さが1000pxなら、1vh = 10pxになります。
使うべき場面:
- • フルスクリーンのヒーローセクション
- • 縦方向のスペーシング
- • セクションの高さ調整
- • モーダルやオーバーレイ
ポイント: 親要素のサイズに関係なく、常にビューポートを基準にします
vw (ビューポート幅)
基準: ブラウザの表示領域の幅1vw = ビューポート幅の1%
画面の幅が1000pxなら、1vw = 10pxになります。
使うべき場面:
- • レスポンシブなフォントサイズ
- • 横方向のスペーシング
- • 画面幅に応じた余白調整
- • 全幅レイアウト
注意: スクロールバーを含んだ幅で計算されるため、100vwだと横スクロールが出る場合があります
% (パーセント)
基準: 親要素のサイズ50% = 親要素の50%
親要素が変われば、同じ%でも実際のサイズは変わります。
使うべき場面:
- • 親要素内での幅調整
- • グリッドレイアウト
- • コンテナ内の要素配置
- • 一般的なレスポンシブ対応
重要: 高さの%指定は、親要素に明示的な高さが必要です
実践的な使い分け例
✓ こんな時は「vh」を使う
• ファーストビューを画面いっぱいに表示したい
• セクション間の余白を画面サイズに応じて調整したい
• モーダルの高さを画面の何%にしたい
✓ こんな時は「vw」を使う
• 見出しのフォントサイズを画面幅に応じて変えたい
• 横方向の余白を画面サイズに応じて調整したい
• 要素の幅を常に画面の何%にしたい
✓ こんな時は「%」を使う
• コンテナの中で2カラムレイアウトを作りたい
• 親要素の幅に応じて子要素のサイズを変えたい
• 一般的なレスポンシブ対応をしたい
× 避けるべき使い方
• ボーダーの幅にvhやvwを使う → px推奨
• 高さに%を使う時、親の高さが未定義 → 効かない
• 小さい要素にvhを使う → 画面サイズで変わりすぎる
よくある質問 - vh単位の使い方Q&A
「vhの使い方がわからない」「スマホで思った通りに動かない」など、よくある疑問にお答えします。
Q1. pxからvhへの変換方法を教えてください
計算式: vh = (px ÷ ビューポート高さ) × 100
例えば、画面の高さが1080pxで、100pxをvhに変換したい場合:
100 ÷ 1080 × 100 = 9.26vh
上記の変換ツールを使えば、自動で計算できます。
Q2. ビューポート高さは何pxを入力すればいいですか?
デザインの対象端末によって選びましょう:
• デスクトップ: 1080px (一般的なフルHD画面)
• タブレット: 1024px (iPad等)
• スマートフォン: 667px (iPhone 8サイズ)
初心者の方は、まずデスクトップの1080pxから始めることをおすすめします。
Q3. vhとvwの違いは何ですか?
vh (viewport height): 画面の高さを基準
→ 1vh = ビューポート高さの1%
→ セクションの高さ、縦方向の余白に使用
vw (viewport width): 画面の幅を基準
→ 1vw = ビューポート幅の1%
→ フォントサイズ、横方向の余白に使用
簡単に言うと、高さ調整ならvh、幅調整ならvwです。
Q4. スマホで100vhを使うとはみ出してしまうのはなぜですか?
原因: スマホのアドレスバーの影響です。
従来のvhは、アドレスバーが非表示の時の高さを基準にします。そのため、アドレスバーが表示されている状態では、コンテンツが画面からはみ出してしまいます。
解決方法:
1. 100dvhを使う (おすすめ)
2. min-height: 100vhを使う
3. 100svhを使う
詳しくは上記の「スマホで100vhを使うと起きる問題と解決策」セクションをご覧ください。
Q5. フォントサイズにvhを使ってもいいですか?
おすすめしません。
理由: 画面の向き(縦・横)で文字サイズが大きく変わってしまうためです。
フォントサイズには以下を使いましょう:
• rem - 基本サイズを基準
• vw - 画面幅に応じて調整
• clamp() - 最小・最大サイズを設定
推奨例:font-size: clamp(16px, 2.5vw, 48px);
Q6. vh、dvh、svh、lvhの違いは何ですか?
すべて「ビューポート高さ」の単位ですが、アドレスバーの扱いが違います:
vh - 従来の単位。アドレスバー非表示時の高さを基準
dvh - 動的に変化。アドレスバーの表示/非表示に自動対応 ★おすすめ
svh - アドレスバー表示時(小さい方)の高さを基準
lvh - アドレスバー非表示時(大きい方)の高さを基準
ブラウザ対応:
Chrome 108+、Safari 15.4+で対応しています。古いブラウザも対応するなら、フォールバックとしてvhも併記しましょう。
Q7. vhを使うとレイアウトが崩れるのはなぜですか?
よくある原因と対策:
1. スマホのアドレスバー問題
→ dvhまたはmin-heightを使う
2. コンテンツがはみ出す
→ min(50vh, 600px)のように最大値を設定
3. Flexboxとの競合
→ 子要素にflex-shrink: 0を追加
開発者ツールで実際の高さを確認すると、原因がわかりやすくなります。
Q8. 全てvhで指定すればいいですか?
いいえ、使い分けが大切です。
vhを使うべき場面:
• フルスクリーンのセクション
• 縦方向の余白やスペーシング
• 画面の高さに応じて変化させたい要素
vhを使うべきでない場面:
• ボーダーの幅 → pxを使う
• アイコン → pxやemを使う
• フォントサイズ → remやvwを使う
組み合わせも有効:padding: calc(1rem + 2vh);
Q9. スマホだけvhをpxに変えることはできますか?
できます。2つの方法があります。
方法1: メディアクエリを使う@media (max-width: 768px) {
.section { height: 400px; }
}
方法2: clamp()を使う (おすすめ)height: clamp(400px, 50vh, 800px);
clamp()なら、メディアクエリなしで自動的に最小・最大サイズを制限できます。
Q10. vhを使う時、アクセシビリティで注意することは?
以下の点に注意しましょう:
1. コンテンツが切れないようにする
→ min-heightを使う
2. 小さくなりすぎないようにする
→ max(30vh, 300px)のように最小値を設定
3. フォントサイズには使わない
→ 拡大・縮小に対応しにくくなるため
4. ズーム時の動作をテストする
→ 200%ズームでも問題ないか確認
推奨: height: clamp(400px, 50vh, 900px);
モダンCSS: VH単位を安全に使う方法
clamp()、min()、max()関数を活用して、あらゆるデバイスで完璧に動作するアクセシブルでレスポンシブなデザインを実現しましょう。
🎯 clamp()関数 - ベストプラクティス
clamp()関数は最小値、推奨値、最大値を設定できます。要素が大きすぎたり小さすぎたりすることを防ぎ、VH単位の主な問題を解決します。
/* 制限付きレスポンシブ高さ */
.hero-section {
height: clamp(400px, 50vh, 900px);
/* 最小: 400px, 推奨: 50vh, 最大: 900px */
}
.card {
height: clamp(200px, 30vh, 500px);
/* 200pxから500pxの間でスケーリング */
}
.section {
padding: clamp(2rem, 5vh, 6rem) 1rem;
/* 制約付きレスポンシブパディング */
}✓ レスポンシブ対応: レイアウトは全てのデバイスで適切なサイズを維持し、極端に大きくなったり小さくなったりすることを防ぎます。
⚡ min()とmax()関数
min()で最大サイズを制限し、max()で最小サイズを設定します。モバイルで小さすぎたり、大画面で大きすぎたりすることを防ぎます。
/* 800pxを超えない */
.section {
height: min(80vh, 800px);
}
/* 300pxより小さくならない */
.card {
height: max(30vh, 300px);
}
/* 最大高さ制限付きレスポンシブ高さ */
.modal {
height: min(90vh, 700px);
/* ビューポートの90%だが700pxを超えない */
}💡 プロのヒント: min()とmax()をcalc()と組み合わせることで、レスポンシブサイジングをさらに細かく制御できます。
🔧 モバイルブラウザ問題の解決
モバイルブラウザではアドレスバーの表示/非表示でビューポート高さが変化します。4つの解決策をご紹介します:
/* 解決策1: min-heightを使用 */
.full-height {
min-height: 100vh;
height: auto;
}
/* 解決策2: dvh(動的ビューポート高さ)を使用 */
.modern-full-height {
height: 100dvh; /* モダンブラウザで推奨 */
}
/* 解決策3: svh(スモールビューポート高さ)を使用 */
.safe-full-height {
height: 100svh; /* UI表示時の最小高さ */
}
/* 解決策4: フォールバックを追加 */
.hero {
height: 100vh;
height: 100dvh;
min-height: 600px; /* フォールバック */
}注: dvh、svh、lvhは新しいビューポート単位でモバイルUI処理が改善されていますが、使用前にブラウザサポートを確認してください。
🎨 ハイブリッドアプローチ: VH + その他の単位
レスポンシブスケーリングのためにVHを、基本サイジングのためにREMやピクセルと組み合わせます。これにより柔軟で堅牢なレイアウトが実現します。
/* 固定ベース + ビューポートスケーリング */
.section {
padding-top: calc(2rem + 5vh);
padding-bottom: calc(2rem + 5vh);
}
/* フルハイトからヘッダー/フッターを引く */
.main-content {
height: calc(100vh - 120px);
/* 60pxヘッダー + 60pxフッター */
}
/* 複数単位の組み合わせ */
.card {
height: min(calc(100vh - 200px), 800px);
/* 余白を考慮した高さ、最大800px */
}
/* メディアクエリによる調整 */
@media (max-width: 768px) {
.section {
padding: calc(1rem + 3vh) 1rem;
}
}🎯 柔軟性: このアプローチは固定サイズとレスポンシブスケーリングの両方の長所を活かせます!
各アプローチの使い分け早見表
| 手法 | 最適な用途 | モバイル対応 | ブラウザサポート |
|---|---|---|---|
| 純粋なVH | フルハイトセクション、垂直レイアウト | ⚠ アドレスバー問題あり | ✓ 優秀 |
| clamp() | レスポンシブ高さ、スペーシング | ✓ 優秀 | ✓ 良好(IE非対応) |
| min()/max() | サイズ制約、オーバーフロー防止 | ✓ 良好 | ✓ 良好(IE非対応) |
| VH + calc() | 固定要素を考慮したレイアウト | ✓ 良好 | ✓ 優秀 |
| dvh/svh/lvh | モバイルブラウザUI問題のないモダンプロジェクト | ✓ 優秀 | ⚠ 限定的(新しいブラウザのみ) |