例えばこういう CSS
.readonly .edit {
display: none;
}
.edit がこのモジュールのクラスで .readonly はモジュールの外で指定される場合
別クラスの .readonly であることを書くすべがないので実現できない
使用例
<user-list class="readonly">
<user-item>
<div>namae</div>
<div>
<button class="edit"></button>
</div>
</user-item>
<user-item>...</user-item>
<user-item>...</user-item>
<user-item>...</user-item>
</user-list>
user-list に .readonly をつけたら中の user-item 全部で .edit を消したい
stackoverflow とか調べてみると 親のクラスを使わずそのコンポーネントにクラスを指定すべきというのが出てくる
この例で言うと全部の user-item に .readonly つける
ムダが多くて気がすすまないけどコンポーネント的には自分自身にオプションが設定されてるのが正しいのだとか
わかるといえばわかるけどやりたくない
WebComponents 自体 :host-context() でホストより外側のセレクタ使えるし
readonly が user-list より上の page-user みたいな要素についてる場合も許可するのなら いっそ モジュールで一意なクラスに変換しないのもあり
:global を使ってクラスにするか CSS Modules の変換対処外の属性を使ったセレクタにするか ([data-readonly] みたいなの)
readonly みたいなのだと良さそうだけどものによっては別の意味のセレクタが意図せず重複もありそう
親が子を把握してるのなら user-list が user-item の CSS をインポートして親側に子のセレクタをつけるのもあり
ただやりすぎるとすごく複雑になってきそうだし 別コンポーネント用の CSS Modules を使うのは控えめのほうがいいかも