detailsタグ中のスタイルが適用されない
<details> 内のコードブロックスタイル問題
原因
-
<details>はデフォルトで 閉じていると display:none 相当 になり、レンダリングされない。 -
Prism.js などのシンタックスハイライトは、レンダリング済みの要素に対して行われるので、閉じた状態だと正しく計算できない。
-
<pre>や行番号用のスタイルも 高さや幅が 0 になったり崩れたり することがある。
解決方法
1️⃣ 開いたときに再ハイライト
JSで <details> の toggle イベントを監視して、開いたときに Prism を再適用します:
document.querySelectorAll('details').forEach(detail => {
detail.addEventListener('toggle', () => {
if (detail.open) {
// Prism の場合
detail.querySelectorAll('pre code').forEach(block => {
Prism.highlightElement(block);
});
}
});
});
2️⃣ CSSで強制描画
pre に display:block と overflow:auto を明示的に付ける:
details pre {
display: block;
overflow: auto;
}
3️⃣ 最初から開いた状態でレンダリング(回避策)
-
<details open>を付けておく -
JSで初期ハイライト処理後に閉じる
💡まとめ
-
<details>内の<pre><code>は閉じたままだとハイライトされない -
JSで toggle するたびに再ハイライトするのが一番安定
-
CSSだけでは行番号崩れまで完全には直らないことも
コメント
コメントを投稿