デザインとコーディングで1pxのズレはなぜ起きるのか
デザインカンプと実装の1pxのズレは、なぜ生まれるのか。サブピクセルの丸め、フォントのメトリクス差、line-heightやletter-spacingの解釈など、実装者視点で原因と潰し方を整理します。

デザインカンプを渡したのに、上がってきた実装が「なんとなく違う」。並べて重ねると、余白や文字が1〜2pxずれている。この小さな差は、担当者の不注意というより、ブラウザの描画とデザインツールの前提が食い違うことで生まれます。
この記事では、その1pxがどこから来るのかを実装する側から整理し、私がどう潰しているかを書きます。原因が分かれば、差し戻しの往復もぐっと減ります。
1pxのズレは「丸め」から始まる
いちばん多いのが、小数の丸めです。デザインツールは座標や幅を小数で持てますが、ブラウザは最終的に物理ピクセルへ落とし込みます。このとき端数が切り上げ・切り捨てされ、要素の位置が1pxずれます。
- 幅や余白に小数が混ざると、行ごとに丸め方向が変わる
- 3分割・7分割など、割り切れない値は特にずれやすい
- 高解像度ディスプレイでは半px単位の差が見え方に出る

丸め自体は避けられませんが、どこで起きるかを予測して値の持ち方を決めれば、影響は最小限にできます。私は分割レイアウトでは端数の出方を先に確認し、必要なら余白側で吸収するようにしています。
文字まわりは「メトリクス」の差が効く
文字は座標だけでなく、フォントの中身が仕上がりを左右します。同じフォントサイズでも、書体ごとに文字の上下に取る余白(メトリクス)が違い、それが行の高さや文字の位置に効いてきます。
- line-heightの解釈:行の高さは文字の上下に均等に分かれて乗るため、テキストの見た目の位置がカンプとずれる
- letter-spacing:多くの環境で最後の文字の後ろにも字間が乗り、右端が想定より外へ出る
- フォントの置換:デザイン時と実装時でフォントが完全一致しないと、字幅や行数が変わる
カンプ上の文字ボックスと、ブラウザが実際に描く文字ボックスは別物です。ここを合わせるには、行間の上下差を打ち消したり、末尾の字間を調整したりと、地味な手当てが要ります。Figmaのデータを実測しながら詰める進め方は、Figma・XDからのコーディング依頼でも触れています。
画像とボックスモデルの取り違え
画像の書き出しも、境界のにじみを生みます。等倍でない倍率で書き出したり、想定と違うサイズで配置したりすると、輪郭が半px単位でぼやけて「1pxずれて見える」状態になります。
ボックスの計算違いも定番です。box-sizingの指定によって、指定した幅にborderやpaddingが含まれるかが変わります。ここを取り違えると、要素全体がborder分だけ膨らみます。
/* width に border・padding を含める。ズレ防止の基本 */
* { box-sizing: border-box; }
なぜ1pxを詰めるのか
1pxは、単体では気づかれないこともあります。それでも私が潰すのは、ズレが積み重なると全体の印象が崩れ、デザイナーが意図した余白のリズムが失われるからだと感じています。
カンプに忠実であることは、デザインへの敬意でもあります。実測値をそのまま反映し、文字と画像の癖を先回りして手当てしておけば、検収での差し戻しが減り、意図した見た目に初回から近づきます。ズレを前提にしたレイアウトの組み方は、実装しやすいFigmaデータの作り方にも整理しています。
まとめ
1pxのズレは、丸め・フォントのメトリクス・行間や字間の解釈・画像の書き出し・ボックス計算といった、ブラウザの前提から生まれます。原因を知っていれば、多くは実装の段階で先回りして潰せます。
カンプ通りに仕上がらない、ピクセル単位で詰めてくれる実装者を探している。そんなときはお問い合わせからご相談ください。カンプと実装の差を、実測ベースで合わせていきます。
本記事は2026年7月時点の情報です。ブラウザやツールの挙動は更新される場合があるため、実装時は最新の環境で確認してください。