Closed MurakamiShinyu closed 2 months ago
確かに :lang(ja)
よりも :root:lang(ja)
によるセレクタのほうが良さそうです。
もしも、ルート要素だけでなく、文書の途中での lang 属性での言語指定にも対応する必要があるのならば :lang(ja) { … } ではなくて [lang|="ja"] { … } のような属性セレクタを使うのがよいと思います。
このような意図はありませんでした。ただ、文章内で lang
属性を指定するようなケースは少ないと思うので、Vivliostyle themesとしてはそこまではサポートせず :root:lang(ja)
の指定が良いかと思います。
:root { … }
で定義したCSS変数に対して、言語別のCSS変数の値が:lang(ja) { … }
のようなルールで定義されています。例えば、Vivliostyle Base Themeの次のところ:
https://github.com/vivliostyle/themes/blob/ebf926f25ccec72fc01bf7f27cad6dcac4af9273/packages/%40vivliostyle/theme-base/css/partial/section.css#L24-L32
このほか、以下の箇所も同様:
https://github.com/vivliostyle/themes/blob/ebf926f25ccec72fc01bf7f27cad6dcac4af9273/packages/%40vivliostyle/theme-base/css/partial/crossref.css#L37
https://github.com/vivliostyle/themes/blob/ebf926f25ccec72fc01bf7f27cad6dcac4af9273/packages/%40vivliostyle/theme-academic/theme.css#L76
https://github.com/vivliostyle/themes/blob/ebf926f25ccec72fc01bf7f27cad6dcac4af9273/packages/%40vivliostyle/theme-bunko/theme.css#L64
これらの
:lang(ja) { … }
は:root:lang(ja) { … }
に修正した方がよいのではないでしょうか? 以下の理由です。HTML文書で言語の指定はルート要素で
<html lang="ja">
のように行うのが一般的であり、言語別のCSS変数設定はルート要素に対して行うだけで通常は問題ない。:lang(ja) { … }
はlang
属性が指定された要素だけではなく、その子孫のすべての要素に適用されるので、次の問題がある:lang(ja) { … }
で指定した値が適用されてしまうので、意図しないスタイルになることがある。例:この場合、
<section class="intro">
内の見出し<h2>
で、変数--vs-section--counter-style
の値は.intro { … }
で指定されたkatakana
ではなく:lang(ja) { … }
で指定されたcjk-ideographic
になる。現状のThemeで
:lang(ja) { … }
が使われているときのDevToolsの表示例::root:lang(ja) { … }
に修正した場合のDevToolsの表示例:もしも、ルート要素だけでなく、文書の途中での
lang
属性での言語指定にも対応する必要があるのならば:lang(ja) { … }
ではなくて[lang|="ja"] { … }
のような属性セレクタを使うのがよいと思います。