Retina / HiDPIディスプレイの検出方法
JavaScriptとCSSでRetinaおよび高DPIディスプレイを検出する複数のテクニックを学びます。devicePixelRatioチェックと解像度メディアクエリを含みます。
Device Pixel Ratio
詳細な説明
Retinaディスプレイの検出
Retinaは、デバイスピクセル比が2以上の画面に対するAppleのブランド名です。メーカーに関係なく、すべての高DPI画面に同じ概念が適用されます。
JavaScript検出
最もシンプルなチェック:
const isRetina = window.devicePixelRatio >= 2;
より詳細な判定:
function getDisplayDensity() {
const dpr = window.devicePixelRatio || 1;
if (dpr >= 3) return 'ultra-high';
if (dpr >= 2) return 'high';
if (dpr >= 1.5) return 'mid';
return 'standard';
}
CSSメディアクエリ検出
resolutionメディア機能を使用します:
@media (min-resolution: 2dppx) {
.logo { background-image: url('logo@2x.png'); }
}
@media (-webkit-min-device-pixel-ratio: 2) {
.logo { background-image: url('logo@2x.png'); }
}
DPR変更の監視
ユーザーが異なる密度のモニター間でウィンドウをドラッグするとDPRが変わる場合があります:
function watchDPR(callback) {
const mql = window.matchMedia(
'(resolution: ' + window.devicePixelRatio + 'dppx)'
);
mql.addEventListener('change', () => {
callback(window.devicePixelRatio);
watchDPR(callback);
});
}
実用的な考慮事項
- DPR 1画面用のフォールバック画像を常に提供する
- 可能な場合はベクター形式(SVG)を使用してDPR固有のアセットを不要にする
- ブラウザDevToolsのデバイスエミュレーションで異なるDPR値をシミュレートしてテストする
ユースケース
画像の多いサイトやピクセルパーフェクトなUIを構築するWeb開発者は、高DPI画面でぼやけたレンダリングを避けるため、Retinaディスプレイを検出して適切なサイズのアセットを提供する必要があります。