ほぼ1年ぶりに Blogger QooQ を弄ります。今まで使っていた目次の自動作成スクリプトが調子が悪いので、別のスクリプトに変更します。 備忘録ブログを残しているので、HTMLのどこを直せば良いのかが分かって助かります。
今までのものはとても 有名なスクリプトなのですが、私の環境では妙な目次になっていました。原因は、直接書きの「作成ビュー」と「HTMLビュー」を交互に切り換えながら記事を書く私の書き方だと思います。mathjaxの数式かもしれません。いづれにしろ、ブログ記事のHTMLのフォーマットが乱れているのだと思います。どうすることもできなくて、手をつけず(気にかけず)にしていたのですが、思い立ってあれこれ try and error をやってみることにしました。
目次
不具合の状況
下図は左が今までの目次で、右が今回変更した目次です。この記事のひとつ前の記事の目次です。
h2タグの目次は正しいのですが、本来、Aの部分に表示されるべき3つの事例のh3タグ目次が、Aでは欠落しており、あるはずのないBやCの位置に出ています。また、別のh3タグ目次の”1.4 LTspiceのシミュレーション”は ”2.対数スイープ”の下にあるべきですが、別の場所に表示されています。
表示位置と番号付けが狂っています。さらに、これらをクリックしても、そこにはジャンプしません。目次からたどると、自分の書いた記事なのに混乱してしまいます。
![]() |
左:おかしくなっている目次 右:正常に並んでいる目次 |
変更した目次スクリプト
- 全然違うコード
- シンプル
- カスタマイズ性
![[Blogger] 目次を自動生成する方法(カスタマイズ方法とスクロールアニメーション付き)](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu7eXyEizdvYc4P8E_iWfCQgeH4tlj9dmSzyYBCxfV49TKucgLHA3qDpqzZAH2Ml2lSx9I_hQmp19KoP-LmIkJu9sgsvgFJM_D8_-ml3Y6SEg6AGYEbPrhWlfYr-4hoU7EZkMnIjpYUInK/w1200-h630-p-k-no-nu/blogger-toc.png)
[Blogger] 目次を自動生成する方法(カスタマイズ方法とスクロールアニメーション付き)
この記事では、Bloggerで目次を自動で追加する方法をご紹介します。コピペでOKです。目次のカスタマイズ方法と、各見出しを押した時のスクロールアニメーション(瞬間移動ではなく、スルスルっと移動するやつ)の追加方法も合わせてお伝えします。
スクリプトを書き込む位置は、引用ブログに説明がありますが、</head> の直前です。今まで使っていた目次スクリプトの位置と同じなので、上書きしました。jQuery は以前導入していました。
カスタマイズしたCSS
デザイン
見かけをちょっとだけ豪華にするため、リストの40行目まではまるっと変更しています。色使いをブログ画面と同じにして、さらに背景を浮き上がらせ、目次タイトルには Font Awesome のアイコンを追加しました。
カスタマイズCSSを適用した新しい目次 |
14行の margin ..... は目次をセンター配置させるための魔法のです。13行だけにして、これを書かないと左揃えとなります。全幅表示にするには、13、14行を削除すると左揃えの全幅表示になりました。これもいい感じでした。
目次デザインの元になったのは、うまく表示できるスクリプトを探しているとき目にした次のブログです。ブログのソースを見て 引用( パクリ <m(__)m> )させていただきました。

Bloggerブログ|記事中のh2を利用して目次を自動生成する(ページ内リンク)|jQuery
もくじを自動生成する方法について取り上げています。h2タグでマークアップされた文を抽出しもくじとして表示させています。jQuery使用。
行頭アイコン
目次の前に番号づけをするのが、52、59、62行の list-style-type:..... の構文です。
リストスタイルは、こちらのサイトで一覧が見れます。使うかどうかは別として、かなりいろいろ選べます。 list-style-type - CSS: カスケーディングスタイルシート | MDN 引用元: [Blogger] 目次を自動生成する方法(カスタマイズ方法とスクロールアニメーション付き)
スクリプトの引用元にある説明をクリックすると、” カスケーティングスタイルシート” の詳細説明に飛びます。適用できる文字はテキストとか汎用の記号だけかと思っていたのですが、この冒頭に
list-style-type: "1F44D"; // thumbs up sign
という事例が載っていました。調べると、 "1F44D" は Unicode キャラクター図鑑 の”いいね” マークです。
そこで、気に入ったアイコンの unicode を調べて、ここに書くとアイコン付きのリストになりました。さらに、ここには Font Awesomeのアイコンを使うこともできるようです。51行からの h2list にはFont Awesome のアイコンを使ってみました。
これに気づく前には、 【CSS】リストのスタイルをFontAwesomeアイコンに変更する方法に倣って次のように書いてみたのですが、全行にアイコンがついてしまいうまくいきませんでした。今回、変更していませんが、目次の行頭は番号からアイコンにしたので、オリジナルのスクリプトの ”ol”タグは”ul”タグに変えた方が良かったのかもしれません。あるいは、目次自体は順番を意識したものなので、”ol”タグ がやはり正しい使い方かもしれません。
<< 追記 >>
後日、"ul"タグへ変更しました。行頭の符号を番号式にしていないので、変化はありません。
さらに、使用しているアイコンフォントを Unicode キャラクター図鑑 のものへ変更しました。"Font Awesome" と "Google Material Icons" を使っていたので、統一したかったのが変更の理由です。どちらへの統一でも良かったのですが、どちらも問題がでました。
- "Font Awesome" では、目次以外で表示されないアイコンが結構あった。(理由不明)
- "Google Material Icons" では、目次の表示が崩れた。
反転ホバーアニメーション
開閉式の目次に改造(追記)
過去のブログを遡って目次に注目して眺めていたら、目次数の多い記事はその表示が気になりだしました。元の目次では表示/非表示動作ができたのですが、変更した目次にはその機能がありません。ならばとよくばり根性で、見よう見まねの改造をしてみます。
googleのキーワード検索してみると、blogger では ”details タグと summary タグを使って折りたたみ式にする” 方法がたくさんヒットしましたので、これを適用してみます。
ヒントをいただいたのはこのブログです。
Blogger 目次を自動生成するスクリプト | リモスキ
Blogger に目次を自動表示するスクリプトを作成したので、使い方とあわせて紹介します。
そして、details/summaryタグ の使い方をイメージできたのでは、このブログのおかげです。

detailsとsummaryタグでアコーディオンを作る - HTMLリファレンス
HTMLのdetailsタグとsummaryタグを合わせて使えば、簡単にアコーディオンを作ることができます。CSSの装飾サンプルやアニメーションのかけ方についても合わせて解説します。
detailsとsummaryタグの使い方
<summary>と</summary>で囲われた部分は常に表示されます。そして、ここをクリックすると、それまで折りたたまれていた<details>と</details>で囲われた部分が現れるというタグの機能です。
<summary>常に表示されている・トグルスイッチの役目</summary>
<p>ここは「表示」と「非表示」が交互に切り換わる</p>
</details>
常に表示されている・トグルスイッチの役目
(ここをクリック)
ここは「表示」と「非表示」が交互に切り換わる
HTMLの改造
と書けば、目次の表示/非表示が実現できそうです。そこで、これを目次スクリプト引用元の kamoshakeh さんのHTMLに適用してみます。
改造箇所はHTML最後の</script>から3行手前の目次を構成している構文です。
[[オリジナル]]
$(".post-body h2").first().before("<div id='toc'><div id='toc-header'><p>目次</p></div>"+toc+"</div>");
デフォルトでは目次を折りたたんだ場合のHTMLです。デフォルトで開く目次にする場合には、<details id='toc' open> とします。
調整したCSS
開閉式目次の参考にした記事に合わせて、折りたたみ要素(toc)をid属性、目次タイトル(toc-header)をclass属性にしています。スタイルの呼び出しには、id属性は#、class属性は.(dot)を使うとのことで、toc-headerはそれに変えています。
summaryタグで表示する”目次”の前後(before, after)の構文が新規追加になっています。".toc-header :before"タグを使うのではなく、"summary :before"タグを使うルールです。(これに気づかず、結構悩みました。)
また、折りたたみが”ふわっと出てくるアニメーション”を入れてみました。
構文ルールを知らないので、Google先生とdeveloper tool とをにらめっこしながら、他にも try and error で表示変更や位置の微調整をしています。パッチワークを多用して、やっと仕上がったのが上記のCSSです。
サイドバーにも目次を追加
目次を見ようと思うと、記事の途中でも最上部の目次に戻らなければならないことが気になっていました。今回、色々な方のブログを目次に着目して調べたので、サイドバーに目次を置いているブログがあることに気づきました。それに、スクロールしてもサイドバー目次が消えないで残るブログもあります。
この機能を組み入れます。
ただし、目次引用元の kamoshakeh さんのブログはサイドバー目次の機能は備わっているものの、その解説記事はまだ書かれていない模様でしたので、ソースから 引用( パクリ <m(__)m> )させていただきました。
サイドバー目次のスクリプト追加
サイドバー目次のスクリプトは、オリジナルからアイコン付きにモディファイ(太字)しています。ホバーアニメーションは サイドバー全体に適用しているので、それが効いています。 サイドバー目次のスクリプト
サイドバー目次のスクロール固定
”スクロールしてもサイドバー目次が消えない機能”は、このタイトルの表現が正しいと思うのですが、なぜか "スクロール追従" という表現が普通に使われています。
私のブログは QooQ で作っているので、”QooQ スクロール追従” のキーワードで検索すると次のブログが最初に出てきます。スクロール固定の方法は、4行のCSSを書くだけのようです。

【QooQ】サイドバーウィジェットを追従させる方法 | ふじろじっく
QooQ で何故かついてこないサイドバーウィジェットを追従させる方法
CSSを置く場所でトラブルのも嫌だったので、HTMLの編集ではなく、設定画面の「テーマ」→「カスタマイズ」から、「詳細設定」を選び、下図のようにたどって、「CSSを追加」しました。
引用元: 【QooQ】サイドバーウィジェットを追従させる方法
- 一番下に JavaScript 等の見えないウィジェットを置いてる場合は上に移動させるか、
- #sub-content .widget:last-child の部分を 追従させたいウィジェットの ID に変えてください。
- ナビバーを固定させてる場合は、top の値をナビバーの高さに合わせて調整してください。
みんなやってみましたが、私のケースでは全く効くようになりませんでした。
CSSに出てくる position: sticky; とは、” スクロールした際に指定した要素を指定した位置に貼り付けるプロパティ” とのことで、これが効かない事例/原因がWebに色々説明されています。が、小生は見様見まねでブログを作っているので、なんとなくの雰囲気しか分かりません。
まず考えられる原因(これが一番多いらしい)は、 overflow-hiddeの属性が親要素に設定されていることらしいですが、当ブログの場合はナビバーへの適用だけでした。
次の原因として、何となくイメージできたのは、
- 2カラムでメインとサイドバーがあるような場合、サイドバーにposition: sticky;を適用しないと効かない。
- メインカラムとサイドカラムの2カラム構成になっている場合、両カラムの高さが同じでないと効かない。縦方向の高さが少ないと効かない。