getComputedStyle で計算済みスタイルを取得する

getComputedStyle は、要素に実際に適用されているスタイルを取得する関数です。CSS ファイルで設定したスタイルも取得できます。

element.style との違い

element.style はインラインスタイルしか取得できません。CSS ファイルや <style> タグで設定したスタイルは取得できません。

<style>
  #box { color: red; font-size: 16px; }
</style>
<div id="box">テスト</div>
const box = document.getElementById('box');

// style では取得できない
console.log(box.style.color);     // ""(空)
console.log(box.style.fontSize);  // ""(空)

// getComputedStyle なら取得できる
const computed = getComputedStyle(box);
console.log(computed.color);      // "rgb(255, 0, 0)"
console.log(computed.fontSize);   // "16px"

基本的な使い方

const element = document.getElementById('target');
const styles = getComputedStyle(element);

// 各プロパティを取得
console.log(styles.width);
console.log(styles.height);
console.log(styles.backgroundColor);
console.log(styles.padding);

計算済みの値が返る

名前の通り「計算済み」の値が返ります。

// CSS で width: 50% と設定していても
console.log(styles.width); // "250px" のように計算後の値

// 色は rgb() 形式で返る
console.log(styles.color); // "rgb(255, 0, 0)"

実際に動かしてみよう

HTML
CSS
JavaScript
<div id="target">スタイルを確認</div>
<button id="checkBtn">スタイルを取得</button>
<pre id="result"></pre>
#target {
  width: 200px;
  padding: 20px;
  background-color: #4caf50;
  color: white;
  font-size: 18px;
  border-radius: 8px;
}
document.getElementById('checkBtn').addEventListener('click', () => {
  const target = document.getElementById('target');
  const styles = getComputedStyle(target);
  
  const info = [
    'width: ' + styles.width,
    'padding: ' + styles.padding,
    'backgroundColor: ' + styles.backgroundColor,
    'color: ' + styles.color,
    'fontSize: ' + styles.fontSize
  ];
  
  document.getElementById('result').textContent = info.join('\n');
});

疑似要素のスタイルを取得

第2引数で疑似要素を指定できます。

const styles = getComputedStyle(element, '::before');
console.log(styles.content);

getComputedStyle の注意点

読み取り専用

getComputedStyle で取得した値は変更できない。変更するには style プロパティを使う

パフォーマンス

呼び出すたびに計算が発生するので、ループ内で何度も呼ばないほうがよい

使いどころ

element.style

スタイルを設定するとき。インラインスタイルの取得

getComputedStyle

実際に適用されているスタイルを知りたいとき

// 現在の幅を取得して、それをもとに計算
const styles = getComputedStyle(element);
const currentWidth = parseInt(styles.width);
element.style.width = (currentWidth + 100) + 'px';

getComputedStyle は、現在のスタイルを知る必要があるときに使う強力なツールです。