--- title: Window.getComputedStyle() slug: Web/API/Window/getComputedStyle tags: - API - CSSOM View - Method - Reference - Window - getComputedStyle translation_of: Web/API/Window/getComputedStyle ---
{{APIRef("CSSOM")}}
Window.getComputedStyle() メソッドは、アクティブなスタイルシートを適用し、それらの値に含まれる可能性のある基本的な計算を解決した後、要素のすべての CSS プロパティの値を含むオブジェクトを返します。個々の CSS プロパティの値は、オブジェクトによって提供される API を介してアクセスするか、CSS プロパティ名でインデックスを作成することでアクセスすることができます。
var style = window.getComputedStyle(element [, pseudoElt]);
elementpseudoElt{{Optional_Inline}}null)。返値の style は、生きた {{DOMxRef("CSSStyleDeclaration")}} オブジェクトで、要素のスタイルが変わると自動で更新されます。
pseudoElt が妥当な擬似要素セレクターではないか、 {{CSSxRef("::part", "::part()")}} または {{CSSxRef("::slotted", "::slotted()")}} である場合。注: 妥当な擬似要素とは構文的に適切であることを指します。例えば ::unsupported は擬似要素として対応はありませんが、妥当と判断されます。
この例では、 {{HTMLElement("p")}} の要素のスタイルを設定してから、getComputedStyle() を使用してそれらのスタイルを取得し、それらを <p> のテキストコンテンツに出力します。
<p>Hello</p>
p {
width: 400px;
margin: 0 auto;
padding: 20px;
font: 2rem/2 sans-serif;
text-align: center;
background: purple;
color: white;
}
let para = document.querySelector('p');
let compStyles = window.getComputedStyle(para);
para.textContent = 'My computed font-size is ' +
compStyles.getPropertyValue('font-size') +
',\nand my computed line-height is ' +
compStyles.getPropertyValue('line-height') +
'.';
{{EmbedLiveSample('Examples', '100%', '240px')}}
返されるオブジェクトは {{DOMxRef("CSSStyleDeclaration")}} 型で、これは要素の {{DOMxRef("HTMLElement.style", "style")}} プロパティから返されるオブジェクトと同じです。しかし、2つのオブジェクトは異なる目的を持っています。
getComputedStyle から返されたオブジェクトは読み取り専用で、 <style> 要素や外部スタイルシートで設定されたものも含めて、要素のスタイルを検査するために使用するためのものです。element.style オブジェクトは、その要素にスタイルを設定したり、 JavaScript の操作やグローバルの style 属性から直接追加されたスタイルを検査したりするために使用するためのものです。最初の引数は {{domxref("Element")}} でなければなりません。要素以外、例えば {{DOMxRef("Text")}} ノードであった場合はエラーが発生します。
多くのコードサンプルでは、 getComputedStyle は {{DOMxRef("document.defaultView")}} オブジェクトから使用されています。ほとんどの場合、 getComputedStyle は window オブジェクト上に存在するので、これは必要ありません。 defaultView パターンは、 window のテスト仕様を書きたくない人たちと、 Java でも使える API を作りたくない人たちの組み合わせだったのかもしれません。
getComputedStyle は擬似要素 (例えば ::after, ::before, ::marker, ::line-marker — the pseudo-element spec を参照してください) からスタイル情報を取得することができます。
<style>
h3::after {
content: ' rocks!';
}
</style>
<h3>Generated content</h3>
<script>
var h3 = document.querySelector('h3');
var result = getComputedStyle(h3, ':after').content;
console.log('the generated content is: ', result); // returns ' rocks!'
</script>
border-bottom-width の値は border-width や border などの一括指定プロパティ名ではアクセスできません。 font-size のような個別指定の名前だけで値を問い合わせるのが最も安全です。 font のような一括指定の名前では、ほとんどのブラウザーでは動作しません。getPropertyValue(propName) API を使用してアクセスすることも、 obj['z-index'] や obj.zIndexのようにオブジェクトに直接添字を指定してアクセスすることもできます。getComputedStyle によって返される値は、{{CSSxRef("resolved_value", "解決値", "", 1)}}です。これらの値は通常、CSS 2.1 の{{CSSxRef("computed_value","計算値", "", 1)}}と同じですが、 width, height, padding のような古いプロパティの場合は、{{CSSxRef("used_value","使用値", "", 1)}}と同じになります。もともと CSS 2.0 では、計算値はカスケードと継承後のプロパティの「使用可能な」最終値として定義されていましたが、 CSS 2.1 ではレイアウトする前の値として再定義され、使用値はレイアウト後の値として再定義されています。 CSS 2.0 のプロパティでは、 getComputedStyle は計算値の古い意味を返しますが、現在は使用値と呼ばれています。レイアウト前の値とレイアウト後の値の違いの例として、 width や height のパーセント値の解像度があり、これらは使用値のみ同等のピクセル数に置き換えられます。getComputedStyle は、 Firefox では元のプロパティ値を返しますが、 WebKit では最終的なプロパティ値を返します。auto の値を持つプロパティは auto の値ではなく、使用値を返します。そのため、 top:auto と bottom:0 を height:30px の要素に適用し、包含ブロックを height:100px を適用すると、 Firefox の top のスタイルの計算値は、 100 − 30 = 70 なので 70px となります。| 仕様書 | 状態 | 備考 |
|---|---|---|
| {{SpecName("CSSOM", "#dom-window-getcomputedstyle", "getComputedStyle()")}} | {{Spec2("CSSOM")}} | |
| {{SpecName("DOM2 Style", "#CSS-CSSview-getComputedStyle", "getComputedStyle()")}} | {{Spec2("DOM2 Style")}} | 初回定義 |
{{Compat("api.Window.getComputedStyle")}}