JavaScript devicePixelRatio — щільність пікселів екрана


Властивість devicePixelRatio показує, скільки фізичних пікселів екрана припадає на один CSS-піксель.

автор: NagarD

Загальний опис

На звичайному екрані це 1. На Retina і більшості сучасних мобільних — 2 або 3.

Для тексту й CSS це не має значення: браузер усе робить сам. А от <canvas> — має, і дуже. Полотно шириною 300 CSS-пікселів на Retina фізично має 600 — і якщо не врахувати цього, малюнок вийде розмитим.

Рецепт один і той самий: фізичний розмір полотна множимо на devicePixelRatio, CSS-розмір лишаємо як був, а контекст масштабуємо.

автор: NagarD

Порада

Розмитий графік чи діаграма на MacBook — майже завжди саме ця забута дрібниця.

автор: NagarD

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
devicePixelRatio 1+ 18+ 3+ 12.1+ 12+ 11+
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
devicePixelRatio yes yes yes yes

Приклади

+ запропонувати свій приклад у пісочниці

Чіткий canvas на екрані з високою щільністю.

HTML

<canvas id="chart" style="width:300px;height:150px"></canvas>

JS

const canvas = document.getElementById('chart');
const ratio = window.devicePixelRatio || 1;

console.log(ratio); // 2 на Retina

// фізичних пікселів — більше
canvas.width = 300 * ratio;
canvas.height = 150 * ratio;

const ctx = canvas.getContext('2d');
// масштабуємо контекст — далі малюємо у звичних координатах
ctx.scale(ratio, ratio);

ctx.fillRect(10, 10, 100, 50); // чітко, без розмиття
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід