前回までの学習で、JavaScriptによるDOM要素の読み書きができるようになりましたが、書き換えられるのは内容のみです。
本記事では、DOM要素のスタイル(style)を取得・設定する方法について学びます。
目次
スタイルの取得と設定の書式
スタイル取得の書式
- HTML要素.style.プロパティ
- 直接スタイル属性に設定されたスタイル(インラインスタイル)のみを取得します。
- window.getComputedStyle(Element型のDOM要素)
- すべての適用スタイル(外部CSS、内部スタイル、インラインスタイルなど)を取得します。
スタイル設定の書式
- HTML要素.style.プロパティ = 設定する値
書式についての説明
「HTML要素」は、querySelector、querySelectorAllなどを使用して取得したHTMLElement型のオブジェクトです。
続く「style」はHTMLElementが持つプロパティで、読み取り専用です。
このプロパティによりCSSStyleDeclaration型のスタイルを取得できます。
「プロパティ」は、取得するスタイルを指定します。
種類はCSSのスタイルと同じだけ存在します(各々の言語のバージョンアップのタイミングにより同数でない場合もある)が、命名規則が異なります。
簡単なサンプルプログラム
まずは要素のスタイルを取得、設定するサンプルを示します。
次のようなHTMLがあり、h1タグに対してCSSで指定されているスタイル(文字色)を取得し、pタグも同じ文字色に設定するプログラムです。
👇ご覧のとおり、CSSではh1のみ文字色(color)が青(blue)に指定されており、pタグには何のスタイルも設定されていません。
<!-- ここより上は省略-- >
<style>
h1 {
color: blue;
}
</style>
</head>
<body>
<h1>タイトル</h1>
<p>この文章の色は青です。</p>
<script>
let h1 = document.querySelector("h1");
document.querySelector("p").style.color = h1.style.color;
</script>
</body>
</html>
タイトル
この文章の色は青です。
👆このように、pタグ内の文字色が青くなっていません。
HTMLElement.style.プロパティで取得できるのは、インラインスタイルのみだからです。
この問題を解決するには、2通りの手段が考えられます。
解決手段①
pタグのスタイルをインラインで指定する。
<!-- ここより上は省略-- >
<body>
<h1 style="color:blue;">タイトル</h1>
<p>この文章の色は青です。</p>
<script>
let h1 = document.querySelector("h1");
document.querySelector("p").style.color = h1.style.color;
</script>
</body>
</html>
タイトル
この文章の色は青です。
意図した通り、pタグ内の文字列の色も青になりました。
しかし、インラインスタイルはサイトの規模が大きくなるにつれてメンテナンス性を損なってしまう場合もあります。
できれば外部CSSでのスタイルも取得したいというケースが多いですよね。
そこで次の解決手段の出番となります。
解決手段②
window.getComputedStyleメソッドを使用する。
<!-- ここより上は省略-- >
<style>
h1 {
color: blue;
}
</style>
</head>
<body>
<h1>タイトル</h1>
<p>この文章の色は青です。</p>
<script>
let h1 = document.querySelector("h1");
document.querySelector("p").style.color = window.getComputedStyle(h1).color;
</script>
</body>
</html>
タイトル
この文章の色は青です。
styleタグによって設定されたスタイルを正しく取得できており、想定通りの挙動となりました。
練習問題
問①
次のHTMLで、JavaScriptを使用してdivの横幅を「200px」に変更してください。
<!-- ここより上は省略-- >
<style>
div {
border: 1px solid black;
width: 50px;
</style>
<body>
<div>Hello</div>
<script>
// ここにプログラムを追加
</script>
</body>
</html>
問②
次のHTMLで、JavaScriptを使用してpタグ内の文字列のフォントサイズを「3em」に変更してください。
<!-- ここより上は省略-- >
<style>
p {
font-size: 1em;
</style>
<body>
<p>Hello</p>
<script>
// ここにプログラムを追加
</script>
</body>
</html>
最後に
3記事に渡り、JavaScriptによるDOM操作を学習してきました。
セレクタやスタイルでCSSの知識がそのまま役に立つことが分かります。
学習には積み重ねが大切であることを再認識しますね。
練習問題の解答
<!-- ここより上は省略-- >
<style>
div {
border: 1px solid black;
width: 50px;
</style>
<body>
<div>Hello</div>
<script>
document.querySelector("p").style.width = "100px";
</script>
</body>
</html>
<!-- ここより上は省略-- >
<style>
p {
font-size: 1em;
</style>
<body>
<p>Hello</p>
<script>
document.querySelector("p").style.fontSize = "2em";
</script>
</body>
</html>
本記事についての質問、誤りの指摘、ご意見ご感想などありましたら、ぜひコメント頂ければ幸いです。
それでは、最後までお読みいただきありがとうございます。

コメント