--- title: CSS Houdini slug: Web/Houdini tags: - API - CSS - Houdini - JavaScript - Landing - Web translation_of: Web/Houdini ---
Houdini は、CSS エンジンの一部を公開する低レベル API のセットであり、開発者はブラウザーのレンダリングエンジンのスタイリングおよびレイアウトプロセスにフックすることで CSS を拡張できます。 Houdini は、開発者が CSS オブジェクトモデル(CSSOM)に直接アクセスできるようにする API のグループです。 開発者は、ブラウザーが CSS として解析できるコードを記述できるため、ブラウザーにネイティブに実装されるのを待たずに新しい CSS 機能を作成できます。
Houdini は、スタイルの変更に JavaScript の .style
を使用するよりも高速な解析時間を可能にします。 ブラウザーは、スクリプトで見つかったスタイルの更新を適用する前に、CSSOM(レイアウト、ペイント、合成のプロセスを含む)を解析します。 さらに、JavaScript スタイルの更新のために、レイアウト、ペイント、および合成のプロセスが繰り返されます。 Houdini のコードは、最初のレンダリングサイクルが完了するまで待機しません。 むしろ、それは最初のサイクルに含まれ、レンダリング可能で理解可能なスタイルを作成します。 Houdini は、JavaScript で CSS 値を操作するためのオブジェクトベースの API を提供します。
Houdini の CSS Typed OM は、型とメソッドを備えた CSS オブジェクトモデルであり、値を JavaScript オブジェクトとして公開し、以前の文字列ベースの HTMLElement.style
操作よりも直感的な CSS 操作を実現します。 すべての要素とスタイルシートのルールには、StylePropertyMap
を介してアクセスできるスタイルマップがあります。
CSS Houdini の機能の1つはワークレット(Worklet)です。 ワークレットを使用すると、モジュール方式の CSS を作成できます。 構成可能なコンポーネントをインポートするには、次の JavaScript の1行が必要です。 プリプロセッサー、ポストプロセッサー、JavaScript フレームワークは必要ありません。
<script> CSS.paintWorklet.addModule('csscomponent.js'); </script>
この追加されたモジュールには、完全に構成可能なワークレットを登録する registerPaint()
関数が含まれています。
CSS の paint()
関数のパラメーターには、オプションのパラメーターとともに、ワークレットの名前が含まれます。 ワークレットは要素のカスタムプロパティにもアクセスできます。 これらは関数の引数として渡す必要はありません。
li { background-image: paint(myComponent, stroke, 10px); --highlights: blue; --lowlights: green; }
注: 大きな力には大きな責任が伴います。 Houdini を使用すると、独自の石積み(masonry)、グリッド、またはリージョンの実装を発明できますが、そうすることが必ずしも最良の考えであるとは限りません。 CSS ワーキンググループは、すべての機能が確実に実行され、すべてのエッジケースを処理し、セキュリティ、プライバシー、およびアクセシビリティを考慮するために多くの作業を行います。 Houdini で CSS を拡張するときは、これらの考慮事項を念頭に置き、より野心的なプロジェクトに進む前に、まずは小さいものから始めてください。
以下に、Houdini の傘下にある API をカバーするメインリファレンスページへのリンクと、それらの使用方法を学習する際にガイダンスが必要な場合に役立つガイドへのリンクを示します。
Start by reading Houdini, an introduction — this provides a brief history of Houdini and an overview of its many features.
CSS の拡張性を改善するように設計されたこの API は、開発者が石積みやラインスナップなどの独自のレイアウトアルゴリズムを作成できるようにします。 まだネイティブでは利用できません。
この API のガイドやリファレンスは現在書かれていません。
CSS の拡張性を向上させるために開発 — 開発者が paint()
CSS 関数を介して要素の背景、境界線、またはコンテンツに直接描画できる JavaScript 関数を記述できるようにします。
CSS Painting API リファレンス
CSS Painting API ガイド
メインの JavaScript 実行環境から独立した、レンダリングパイプラインのさまざまな段階でスクリプトを実行するための API。 ワークレットは概念的には Web Workers に似ており、レンダリングエンジンによって呼び出され、レンダリングエンジンを拡張します。
Worklets リファレンス
興味深い方法で Houdini API と連携して使用できるため、興味深い関連トピック。