JavaScript getComputedStyle() — реальний стиль елемента


Метод getComputedStyle() повертає підсумковий стиль елемента — той, який браузер справді застосував після всіх правил CSS.

автор: NagarD

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

Тут ховається різниця, якої не знають новачки. element.style показує лише інлайновий стиль — те, що написано в атрибуті style. Якщо колір задано в таблиці стилів, element.style.color поверне порожній рядок.

getComputedStyle() бачить усе: класи, каскад, успадкування, значення за замовчуванням.

Але є ціна: значення повертаються у підсумкових одиницях. Задав width: 50% — отримаєш '640px'. Задав колір #fff — отримаєш 'rgb(255, 255, 255)'.

Ним же читають значення CSS-змінних — і саме так JavaScript дізнається кольори теми, не дублюючи їх у коді.

автор: NagarD

Нотатка

Виклик змушує браузер порахувати макет. У циклі це смертельно повільно: спершу зчитай усе, що треба, і лише потім міняй стилі — інакше кожен рядок буде викликати перерахунок.

автор: NagarD

Переглядачі

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

Приклади

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

Стиль із таблиці, який element.style не бачить, і CSS-змінна.

HTML

<style>.box { color: rebeccapurple; }</style>
<div id="box" class="box">Текст</div>

JS

const box = document.getElementById('box');

console.log(box.style.color);                       // '' — порожньо!
console.log(getComputedStyle(box).color);           // 'rgb(102, 51, 153)'

// значення завжди підсумкові: відсотки стануть пікселями
console.log(getComputedStyle(box).width); // '640px', а не '50%'

// читання CSS-змінної — так JS дізнається кольори теми
const accent = getComputedStyle(document.documentElement)
    .getPropertyValue('--pico-primary')
    .trim();

console.log(accent);
автор: NagarD

Коментарі

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

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

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

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

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

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

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

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

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

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

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