Movatterモバイル変換


[0]ホーム

URL:


2025年のRecapが公開されました!見る →
azukiazusa.dev
>
Back to blog
隕石のイラスト

JavaScript でスタイルシートを構築する CSSStyleSheet

CSSStyleSheet インターフェースは、JavaScript でスタイルシートを構築し、操作するための API です。CSSStyleSheet() コンストラクターで新しいスタイルシートを作成し、.replaceSync() メソッドでスタイルを適用できます。

CSSStyleSheet インターフェースは、JavaScript でスタイルシートを構築し、操作するための API です。CSSStyleSheet() コンストラクターで新しいスタイルシートを作成し、.replaceSync() メソッドでスタイルを適用できます。

スタイルが適用されたCSSStyleSheet オブジェクトは、document.adoptedStyleSheets プロパティに代入することで、ページ全体に適用されます。

const styleSheet= new CSSStyleSheet();styleSheet.replaceSync("body { background-color: lightblue; }");document.adoptedStyleSheets= [styleSheet];

よくある使い方として、Shadow DOM でカプセル化されたスタイルを適用するために使用されます。ShadowRoot.adoptedStyleSheets プロパティに代入することで、Shadow DOM に適用されます。

const host= document.querySelector("#host");const shadowRoot= host.attachShadow({ mode: "open" });const styleSheet= new CSSStyleSheet();styleSheet.replaceSync("h1 { color: red; }");shadowRoot.adoptedStyleSheets= [styleSheet];

スタイルを変更する

CSSStyleSheet オブジェクトは以下の 4 つのメソッドを提供していおり、スタイルを挿入、削除、置換を行うことができます。

  • .insertRule(): スタイルシートの指定した位置新しいルールを追加する
  • .deleteRule(): スタイルシートの指定した位置からルールを削除する
  • .replace(): スタイルシートの内容を非同期に置換し、Promise を返す
  • .replaceSync(): スタイルシートの内容を同期的に置換する

現在適用されているスタイルを取得するには、styleSheet.cssRules プロパティを使用します。styleSheet.cssRulesCSSRuleList という順序付きのCSSRule のリストを返します。

const styleSheet= new CSSStyleSheet();styleSheet.replaceSync(  "body { background-color: lightblue; } h1 { color: red; }",);console.log(styleSheet.cssRules); // => CSSRuleList {0: CSSStyleRule, 1: CSSStyleRule, length: 2}styleSheet.insertRule("h2 { color: blue; }", 1); // 1 番目の位置に h2 のスタイルを追加styleSheet.deleteRule(0); // 0 番目の位置のスタイルを削除// for...of で CSSRuleList をイテレートできるfor (const ruleof styleSheet.cssRules){  console.log(rule.cssText); // => h2 { color: blue; }, h1 { color: red; }}

スタイルシートの@media を指定する

CSSStyleSheet() コンストラクターのオプションとして、メディア特性 を指定できます。以下の例は、prefers-color-scheme メディアクエリを指定して、ダークモード時に背景色を変更するスタイルシートを作成しています。

const styleSheet= new CSSStyleSheet({  media: "(prefers-color-scheme: dark)",});styleSheet.replaceSync("body { background-color: black; color: white; }");console.log(styleSheet.media); // => MediaList {0: '(prefers-color-scheme: dark)', length: 1, mediaText: '(prefers-color-scheme: dark)'}

まとめ

  • CSSStyleSheet インターフェースは、JavaScript でスタイルシートを構築し、操作するための API
  • CSSStyleSheet() コンストラクターで新しいスタイルシートを作成し、.replaceSync() メソッドでスタイルを適用
  • document.adoptedStyleSheets プロパティに代入することで、ページ全体に適用
  • スタイルを変更するためのメソッドとして、.insertRule().deleteRule().replace().replaceSync() が提供されている
  • styleSheet.cssRules プロパティで現在適用されているスタイルのリストを取得
  • CSSStyleSheet() コンストラクターのオプションとして、メディア特性 を指定できる

参考

記事の理解度チェック

以下の問題に答えて、記事の理解を深めましょう。

CSSStyleSheet インターフェースでスタイルシートの指定した位置に新しいルールを追加するメソッドはどれか?

  • .insertRule()

    正解!

  • .unshiftRule()

    もう一度考えてみましょう

  • .replaceSync()

    もう一度考えてみましょう

  • .pushRule()

    もう一度考えてみましょう

関連記事


[8]ページ先頭

©2009-2025 Movatter.jp