style-modは、スタイルを動的に管理するためのJavaScriptライブラリ、いわゆるCSS-in-JSの一種である。作者は、CodeMirror6と同じMarijn Haverbeke氏。CodeMirror6でのエディタのスタイリングにも、このstyle-modが使われている。
style-modの使い方
style-modは、@codemirror/viewの依存関係に含まれている。CodeMirror6のエディタをスタイリングするぶんには、その記法だけ知っていればいい。
単独で使いたい場合は、手動でnpmパッケージをインストールするか、CDNを使う。
npmパッケージを使う場合
CDNを使う場合
style-modのホスティングを確認できたのがjsDelivrのみだったため、差し当たりこれをサンプルに挙げる(目をザルのようにして探したので、他にもあるかも知れない)。
使い方は以下の通り至ってシンプルである。
StyleModuleコンストラクタにstyle-modの記法でCSSルールを渡す。StyleModule.mount()メソッドで任意のDocument、あるいはShadowRootにマウントする。
style-mod記法
記法と言っても、CSSをJavaScriptオブジェクトに置き換えるシンプルなものである。
キーには、文字列だけでなくJavaScriptの識別子も使える。この場合、CSSのプロパティ名はキャメルケースに直す必要がある(例えばfont-sizeはfontSizeとする)。
また、SASSのように、&は現在のセレクタとして扱える。トップレベルで&を指定すると、そのドキュメントがセレクトされる。
この記法で書いたCSSをもとにStyleModuleオブジェクトを作り、mount()メソッドで任意のDocument、あるいはShadowRootにスタイルを反映するのが、style-modの基本的な使い方である。
サンプルコード
上記コードの場合、ドキュメントの<head>タグに以下の内容の<style>タグが挿入される。
指定した通りのものがそのまま反映されていることがわかる。
style_mod記法の留意点
シンプルな記法だけに留意点はほぼない。ただ、プロパティ名にアンダースコアが入っている場合、アンダースコア含めて以降の文字列は削除される。ドキュメントによると、この仕様はブラウザの互換性のために、プロパティを複数回提供する場合等に使えるらしい。
If you include an underscore in a property name, it and everything after it will be removed from the output, which can be useful when providing a property multiple times, for browser compatibility reasons.
私には使い方がよくわからない。StyleModuleクラスのコンストラクタに渡すfinish()関数とコンボで使うのではないかと思う。
StyleModuleクラスの概要
参考までにStyleModuleクラスの概要をまとめておく。
style-modのソースコード
style-modはミニマルである。詳しく知りたいのであれば、ソースコードを読んだ方が早い。
style-modのソースコード