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のソースコード