2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【備忘録】「1920×1080のノートPCだから余裕」で画面設計したら、そのPCで収まらなかった話

2
Last updated at Posted at 2026-08-21

はじめに

業務システムの画面設計をしていて、「ノートPCでもスクロールなしで1画面に収まるようにしたい」と考えました。
要件定義書には「画面解像度 1366×768 以上」と書いてあります。使うノートPCの設定を見たら 1920×1080。「なんだ、余裕じゃん」と思って進めようとしたのですが、念のため実機のブラウザで測ってみたら、使えるのは 1280×720 でした。さらに、ページを実際に描ける高さは 約600 しかありませんでした。
同じ1台のPCから 1920×1080 / 1280×720 / 約600 と3種類の数字が出てきて完全に混乱したので、整理して残しておきます。

環境

  • Windows 11
  • Chrome / Edge(最新版)
  • ノートPC:パネル 1920×1080、表示の拡大率 150%
  • デスクトップPC:パネル 1920×1080、表示の拡大率 100%

結論(3つの数字は全部別のものだった)

# 呼び方 ノートPCでの値 何を表しているか 調べ方
物理解像度 1920×1080 パネルに並んでいる点の数 Win + I →「システム」→「ディスプレイ」
画面サイズ(CSSピクセル) 1280×720 ブラウザから見た画面の広さ ブラウザで F12 →「Console」タブに screen.width と入力
ビューポート 約1280×600 実際にページを描ける範囲 同じConsoleで innerWidth / innerHeight(※開発ツールを開くと値がずれる。後述)

②③は、ブラウザに最初から入っている「開発ツール(DevTools)」の Console というタブで確認します。何かをインストールする必要はありません。F12 で開いて命令を打つと、その場で答えが返ってきます。
画面設計で使うのは③だけです。 ①を見て判断すると、私のように1.5倍も広く見積もってしまいます。

備考:「CSSピクセル」とは
CSS(Cascading Style Sheets)はWebページの見た目を指定する言語で、その CSSが「1px」と数えるときの単位が CSSピクセルです。画面に並んでいる点そのもの(=物理ピクセル)とは別物で、関係は CSSピクセル = 物理の点の数 ÷ 拡大率 の式だけです。②の 1280×720 もこれに当てはめた結果で、詳しくは「つまずき②」で説明します。

以下、順番に何が起きているかを書きます。

つまずき①:px は長さの単位ではない

まずここを勘違いしていました。「1920って cm?」と思ったのですが、違います。
px(ピクセル)は画素、つまり「点の個数」です。 画面は小さく光る点がびっしり並んでできていて、1920×1080 は「横に1920個、縦に1080個の点が並んでいる」という意味です(合計およそ207万個)。
長さではないので、cm には直せません。同じ 1920×1080 でも物理的な大きさはバラバラです。

画面 点の数 実際の横幅
13インチのノートPC 1920×1080 約29cm
27インチのモニター 1920×1080 約60cm

点の数は同じでも、点そのものの大きさが違うので、実際の幅は2倍以上違います。13インチは点が細かく詰まっていて、27インチは点が大きく粗い、ということです。
Webページを作るときに知りたいのは「どれだけ情報が入るか」なので、cm ではなく点の個数で数えます。

つまずき②:拡大率が、使える広さを目減りさせる

ここが最大の落とし穴でした。
Windowsの「表示の拡大率(スケーリング)」とは、ページの1pxを、画面の点いくつ分で描くかの設定です。

拡大率100%  ページの1px → 点1個で描く
            → 1920個の点に、1920px 分の情報が入る

拡大率150%  ページの1px → 点1.5個分で描く
            → 1920個の点に、1280px 分の情報しか入らない(1920 ÷ 1.5)

式にするとこれだけです。

CSSピクセル = 物理ピクセル ÷ 拡大率

横: 1920 ÷ 1.5 = 1280
縦: 1080 ÷ 1.5 =  720

文字やボタンは1.5倍大きく描かれて読みやすくなりますが、その代わり入る情報は3分の2に減ります
拡大率を変えたときの一覧がこちらです。物理パネルはどの行も同じ1920×1080で、点の数は一切変わっていません。

拡大率 1CSSピクセルが使う点 物理パネル CSSピクセルでの画面サイズ 文字の見た目
100% 1個 1920×1080 1920×1080 小さい
125% 1.25個 1920×1080 1536×864 やや大きい
150% 1.5個 1920×1080 1280×720 大きい
200% 2個 1920×1080 960×540 かなり大きい

同じPCでも、設定を変えるだけでCSSピクセルの数は増えたり減ったりします。
そして拡大率100%のときだけ、物理ピクセルとCSSピクセルが同じ数になります。デスクトップPCは100%なので一致していて、だから「解像度1920×1080」と言えばそれで話が通じていました。ノートPCが150%だったせいで、初めて2つを区別する必要が出てきたわけです。

備考:拡大率は自分で設定した覚えがなくても100%ではないことが普通です。
Windowsは、画面の物理サイズと解像度から適切な拡大率を判断して、購入時から125%や150%を「推奨」として設定します。小さい画面に高い解像度が載っているノートPCほど、拡大率が高く設定されています。「設定を触っていないから100%のはず」という前提は成り立ちません。

つまずき③:ブラウザのUIが高さを食う

②で 1280×720 になることは分かりましたが、実測した高さは 600 でした。残りの120はどこへ行ったのか、という話です。
ブラウザ自身のタブ・アドレスバー・ブックマークバーが、画面の上部を占めているためです。

画面の高さ(CSSピクセル)    720
  − タブ・アドレスバー等     約120
──────────────────────────────
ページに使える高さ          約600

この「約120」はブラウザやブックマークバーの表示有無で変わるので、実機で測るしかありません
幅のほうは、縦スクロールバーが 15〜17px ほど占めます。

自分のPCを測るスニペット

開発ツールのConsoleに貼るだけで、上の①〜③が全部出ます。

備考:スニペット(snippet)=「切れ端」。
コピーして貼るだけで動く、短いコードのことです。ファイルに保存したりインストールしたりせず、その場で1回だけ実行して結果を見る、という使い方をします。実行してもPCの設定は何も変わらず、ページを再読み込み(F5)すれば消えます。

// 使い方:ブラウザで F12 を押して「Console」タブを開き、これを貼って Enter
//(③を正しく測るには、次の項のとおり開発ツールを別ウィンドウにしてから実行してください)
console.table({
  '① パネルの画素数(推定)': {
    // screen.width は拡大率で割られた値なので、拡大率を掛けて物理の点の数に戻す
    : `${screen.width * devicePixelRatio} x ${screen.height * devicePixelRatio}`
  },
  '② 画面サイズ(CSSピクセル)': {
    // ブラウザから見た画面の広さ。Windowsの設定画面の数字とは一致しないことがある
    : `${screen.width} x ${screen.height}`
  },
  '③ ビューポート(ページに使える範囲)': {
    // ブラウザのUIを除いた、実際にページを描ける範囲。設計に使うのはこれ
    : `${innerWidth} x ${innerHeight}`
  },
  '④ スクロールバーを除いた幅': {
    // innerWidth はスクロールバーの幅を含んでいるので、それを除いた値
    : `${document.documentElement.clientWidth} x ${document.documentElement.clientHeight}`
  },
  '⑤ 拡大率': {
    // 1 なら100%、1.5 なら150%
    : `${devicePixelRatio * 100}%`
  }
});

備考:F11(全画面表示)の状態で測らないこと。
全画面にするとブラウザのUIが消えるので innerHeight が大きく出ます。普段の使い方に合わせて、通常の状態で測ります。

落とし穴:開発ツール自体がビューポートを削っている

ここは自分でやってみて気づいた点です。開発ツールを画面の右や下に表示すると、その分ページの表示領域が削られます。

開発ツールを閉じている  ページに使える範囲 1280 × 600  ← 本当に知りたい値
開発ツールを下に開く    ページに使える範囲 1280 × 300  ← 開発ツールの高さ分だけ減る

つまり開発ツールを開いたまま測った③の値は、本当の値より小さく出ます。測るために開いた道具が、測りたいものを変えてしまっているわけです。

番号 開発ツールの影響 理由
① 物理解像度 受けない 画面(パネル)の話なので、ブラウザの状態と無関係
② 画面サイズ 受けない 同じく画面の話。screen は画面全体を指す
③ ビューポート 受ける ページの表示領域そのものなので、削られた分だけ小さくなる

対処法は、開発ツールを別ウィンドウに切り離すことです。独立したウィンドウにすれば、測りたいページの大きさは変わりません。手順はこちらです。

  1. 開発ツール右上の (縦三点)をクリック
  2. Dock side(ドッキングの位置) の行に並ぶ4つのアイコンのうち、一番左(別ウィンドウ) を選ぶ

キーボードで済ませたい場合は、コマンドメニューから実行できます。

  1. Ctrl + Shift + P を押す
  2. undock と入力
  3. Undock into separate window を選ぶ

注意:Ctrl + Shift + D では切り離せません。
このショートカットは「直前に使っていたドッキング位置と入れ替える」ものなので、右と下を往復するだけです。下に出ている状態でも高さは削られたままなので、値は正しくなりません(右なら幅が削られます)。私はこれを勘違いしていました。

切り離せたかどうかは、innerHeight をもう一度実行すれば分かります。数値が増えていれば成功、変わらないならまだページの中に居座っています。

おまけ:「1366×768」はどこから来た数字なのか

要件定義書によく出てくるこの値、気になって調べました。
WXGA と呼ばれる規格で、2010年代のノートPCの標準的な解像度です。長年、世界のブラウザ統計で最も多い解像度でした。
数字の出どころは、その前の世代の規格 XGA(1024×768) です。画面が4:3から16:9の横長に置き換わるとき、メーカーは高さ768をそのまま残して横だけ広げたのです。

768 × 16 ÷ 9 = 1365.33…  → 切り上げて 1366

この式は「16:9 の比率を、実際の数に直す計算」です。16:9 とは「横が16のとき、縦が9」という比率なので、2段階に分けるとこうなります。

① 768 ÷ 9  = 85.33     比率の「1目盛り」がいくつかを求める
② 85.33 × 16 = 1365.33  それを16目盛り分にして、横幅を出す

÷9 で1目盛りの大きさを求め、×16 でそれを横幅に直している、というだけです。きれいに割り切れる例で確かめると分かりやすいです。

解像度 計算 結果
1920×1080(16:9) 1080 ÷ 9 = 120 → ×16 1920 ぴったり
1024×768(4:3) 768 ÷ 3 = 256 → ×4 1024 ぴったり
?×768(16:9) 768 ÷ 9 = 85.33 → ×16 1365.33 割り切れない

768 が 9 で割り切れないため端数が出て、それを切り上げたのが1366です。1366 という中途半端な値なのはこのためで、8でも割り切れないので、実際には 1360×768 のパネルも存在しました。
そして皮肉なことに、この数字は今でも通用します。

使える広さ
2010年代のノートPC(1366×768、拡大率100%) 1366×768
今のノートPC(1920×1080、拡大率150%) 1280×720

パネルの画素数は増えたのに、拡大率のせいで実際に使える広さはむしろ狭くなっています。「新しいPCだから広いはず」は成り立たない、ということです。

設計にどう落としたか

手順はこれだけです。

  1. 利用者が実際に使うPCを、上のスニペットで測る
  2. その中でページに使える範囲がいちばん狭いものを基準にする
  3. そこから余白とスクロールバーを引いた値を、設計上の枠にする

実際に測ったのは、自分に貸与されているノートPCとデスクトップPCの2台だけです。 社内を見たところ、おおむねこの2機種が配られているようだったので、まずはこの2台で決めました。

測ったPC ページに使える範囲
デスクトップPC(拡大率100%) 約 1920×950
ノートPC(拡大率150%) 約 1280×600 ← こちらを基準に

狭いほうのノートPCに合わせ、ページに使える範囲 1280×600 に対して、設計枠を 1120×600 にしました。幅は160px分を余白とスクロールバーに残し、高さは600をそのまま使っています。

備考:2台しか測っていないので、これは「暫定の下限」です。
ただし表示拡大率の初期値はWindowsが画面サイズと解像度から自動で決めるため、同じ機種なら同じ値になります。逆に違う機種を使っている人がいれば下限は変わるので(15.6インチのフルHDなら推奨125%=幅1536)、配布PCの機種が確定した時点で見直す前提にしています。
全台を測るのが理想ですが、まず1台でも実測して「物理解像度で判断してはいけない」と分かったことのほうが、この件では大きかったです。

もう一つ決めたのは、全画面を1画面に収めようとしないことです。高さ600から、今度は作るシステム自身が置くもの(画面上部のヘッダー帯、画面タイトル、パンくずなど)を引くと、内容に使えるのは450〜500程度しかありません。

720   ブラウザから見た画面の高さ
 −120 ブラウザが持っている部分(タブ・アドレスバー)  ← ここまではブラウザの都合
─────
600   ページに使える範囲(=設計枠の高さ)
 −100 自分が作るシステムのヘッダー帯・画面タイトル    ← ここからは自分の設計の話
─────
500   1画面の中で本文に使える範囲

同じ「ヘッダー」でも、ブラウザが持っているものと、自分が作るものは別です。二重に引いているわけではありません。
一覧画面や登録画面を無理にここへ詰めると、タブや折りたたみが増えて、かえって操作の手数が増えます。
なので画面を3つに分けました。

分類 方針 対象の例
A スクロールさせない ログイン画面、トップ画面
B 主要情報をファーストビューに収める(以降はスクロール可) 一覧画面
C スクロール許容。操作ボタンは画面下部に固定 詳細画面、登録・編集画面

要件定義書にどう書くべきだったか

「画面解像度 1366×768 以上」という書き方は、①②③のどの数字なのかが分かりません。拡大率にも触れていないので、読んだ人によって解釈が変わり、結果として検証もできません。
書くならこうすべきでした。

- 対象ブラウザ:Chrome / Edge 最新版(Windows 11)
- 想定する表示の拡大率:100%〜150%
- 設計基準ビューポート:1280×600
  (拡大率150%のノートPCで実測した、ページに使える範囲)
- 上記の範囲で横スクロールを発生させないこと

ポイントは、測定条件が書かれていて、あとから同じ手順で検証できることだと思います。

おわりに

同じ1台のPCから3種類の数字が出てくることを知らないと、「1920×1080だから余裕」と判断してしまいます。私は実際にそう判断しかけました。
拡大率とブラウザUIの2段階で目減りする、と覚えておくと見通しが良くなります。そして結局、実機で測るのが一番早いです。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?