シームレスに再利用可能なスタイル
構築可能なスタイルシートは、 再利用可能なスタイルを作成して配布する方法。 DOM です。
対応ブラウザ
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
JavaScript を使用してスタイルシートを作成することはこれまでも可能でした。ただし、これまでのプロセスでは、document.createElement('style')
を使用して <style>
要素を作成し、そのシート プロパティにアクセスして、基盤となる CSSStyleSheet インスタンスへの参照を取得していました。この方法では、CSS コードが重複してコードが大きくなり、
ファイルを添付すると、スタイルのないコンテンツが大量に発生し、
できます。CSSStyleSheet
インターフェースは、CSSOM と呼ばれる CSS 表現インターフェースのコレクションのルートです。スタイルシートをプログラムで操作できるだけでなく、従来の方法に関連する問題を解消できます。
構築可能なスタイルシートで、共有 CSS の定義と準備を可能にする そのスタイルを複数の Shadow Roots または Documentation に適用できます 簡単に、重複なく作成できます。共有された CSSStyleSheet に対する更新が すべての根本にそれを採用し、 スタイルシート シートが読み込まれると高速かつ同期されます。
構築可能なスタイルシートによって確立される関連付けは、
数多くあります。多くのコンポーネントで使用される一元化されたテーマを提供するために使用できます。テーマはコンポーネントに渡される CSSStyleSheet
インスタンスにすることができ、テーマの更新はコンポーネントに自動的に伝播されます。これは、CSS カスタム
プロパティ値を
特定の DOM サブツリーを
cascade。ブラウザの CSS パーサーへの直接インターフェースとして使用することもできます。これにより、スタイルシートを DOM に挿入せずに簡単にプリロードできます。
スタイルシートを作成する
これを実現するために新しい API を導入するのではなく、Constructable StyleSheets 仕様では、CSSStyleSheet()
コンストラクタを呼び出してスタイルシートを命令的に作成できます。生成される CSSStyleSheet オブジェクトには、
新しいメソッドを導入し、コードを一切書かずにスタイルシート ルールの追加と更新を
Flash of Unstyled が
Content(FOUC)。
「
replace()
および
replaceSync()
メソッドでスタイルシートを CSS の文字列に置き換え、replace()
Promise を返します。どちらの場合も、外部スタイルシート参照は
サポートされている場合、@import
ルールは無視され、警告が生成されます。
const sheet = new CSSStyleSheet();
// replace all styles synchronously:
sheet.replaceSync('a { color: red; }');
// replace all styles:
sheet.replace('a { color: blue; }')
.then(() => {
console.log('Styles replaced');
})
.catch(err => {
console.error('Failed to replace styles:', err);
});
// Any @import rules are ignored.
// Both of these still apply the a{} style:
sheet.replaceSync('@import url("styles.css"); a { color: red; }');
sheet.replace('@import url("styles.css"); a { color: red; }');
// Console warning: "@import rules are not allowed here..."
作成されたスタイルシートを使用する
Constructable StyleSheets で導入された 2 つ目の新機能は、
adoptedStyleSheets
プロパティを
ルート
およびドキュメント。この
CSSStyleSheet
で定義されたスタイルを特定の DOM に明示的に適用できる
サブツリーです。そのためには、その要素に適用する 1 つ以上のスタイルシートの配列をプロパティに設定します。
// Create our shared stylesheet:
const sheet = new CSSStyleSheet();
sheet.replaceSync('a { color: red; }');
// Apply the stylesheet to a document:
document.adoptedStyleSheets.push(sheet);
// Apply the stylesheet to a Shadow Root:
const node = document.createElement('div');
const shadow = node.attachShadow({ mode: 'open' });
shadow.adoptedStyleSheets.push(sheet);
<ph type="x-smartling-placeholder">
すべてを組み合わせる
Constructable StyleSheets を使用して、ウェブ デベロッパーは CSS StyleSheet を作成して DOM ツリーに適用する方法を紹介します。ブラウザの組み込みパーサーと読み込みセマンティクスを使用して、CSS ソースの文字列から StyleSheet を読み込むための新しい Promise ベースの API が導入されました。最後に、 スタイルシートのすべての使用にスタイルシートの更新を適用するメカニズム テーマの変更や色の設定などをシンプルにします
今後に向けて
コンストラクタブル スタイルシートの初期バージョンは、ここで説明する API とともにリリースされましたが、使いやすくするための作業が進行中です。また、
拡張するプロポーザル
挿入と挿入のための専用メソッドを備えた adoptedStyleSheets
FrozenArray
スタイルシートを削除します。これにより、配列のクローン作成が不要になり、
重複する可能性のあるスタイルシートを参照します。