Tailwind Typography で prose-code:text-[var(--color-text)] のようなカスタム色を設定すると、インラインコード(`code`)だけでなく、コードブロック(```...```)内の <code> にも同じ色が適用される。
コードブロックの背景は Tailwind Typography のデフォルトで暗い色(slate-800 相当)になっているため、そこに濃い文字色を上書きすると「暗い背景に暗い文字」になってコードが読めなくなる。
<!-- この class は pre > code にも効いてしまう -->
<div class="prose prose-code:text-[var(--color-text)]">
<!-- インラインコード -->
<p>Use <code>useState</code> here.</p>
<!-- コードブロック(背景が暗いのに文字も暗くなる)-->
<pre><code>const x = 1;</code></pre>
</div>
修正は pre 内の code だけを明示的に上書きする:
<!-- [&_pre_code]: でスコープを絞る -->
<div class="prose prose-code:text-[var(--color-text)] [&_pre_code]:text-slate-100">
または、インラインコードだけに色を当てたい場合は :not(pre) で絞る:
<div class="prose [&_:not(pre)_code]:text-[var(--color-text)]">
prose-code: はすべての code 要素を対象にするセレクタで、Tailwind Typography が内部で生成する --tw-prose-code 変数を上書きする。この変数は pre > code にも引き継がれるため、意図せずコードブロックにも効いてしまう。インラインコードとコードブロックの色を分けたい場合は、最初から :not(pre) のアービトラリーセレクタで限定する方が安全。