2015/11/18   WordPress WordPressプラグイン

Table of Contents Plusデザインカスタマイズで目次をおしゃれに演出!

デザイン

WordPress で目次を自動的に表示してくれる Table of Contents Plus はすごく便利なプラグインですが、初期設定のままだとちょっと味気ないデザインですよね。

設定画面から横幅や背景色を変更することはできますが、それでもちょっと物足りない。そこで今日は、CSS でおしゃれなデザインにする方法をご紹介します。

目次をカスタマイズしてライバルブログに一歩差をつけてみましょう!

ブログのアクセス数を最大限に増やすSEO施策

ブログのアクセス数を伸ばす方法をお探しですか? 「アクセス数が伸びない原因とその対策」が書かれた e-book を無料プレゼントしています。


カスタマイズ前の下準備

設定画面ではこのように横幅・フォントサイズ・背景色などを簡単に指定できます。

Table of Contents Plus 設定画面

参考Table of Contents Plus の使い方と設定方法

初期設定のままだと、このような感じですね。

Table of Contents Plus 初期設定デザイン

ソースをのぞくと、設定に基づいてプラグインが自動的に CSS を出力しているのがわかります。

プラグインが出力しているCSSを消す

オリジナルデザインにするためにはこの CSS がちょっとジャマなので、出力しないよう設定しましょう。

基本設定の下にある「上級者向け」を開き、「プラグインのCSSを読み込まない場合チェックを入れてください」にチェックを入れるだけで OK 。

Table of Contents Plus CSS出力を止める

そうすると、CSS が消えてこのように表示が変わります(サンプルは Gush2 を使用しています)。

テーマのCSSのみ適用された状態

テーマのCSSのみ適用された状態

では、この状態からカスタマイズしていきます!

Table of Contents Plus CSSデザイン

TOC+ が出力しているコードを調べよう

CSS でデザインを調整していく前に、目次がどのような構造になっているのか調べてみましょう。

各ブラウザに標準装備されている開発者ツール(デベロッパーツール)を使うとすぐにわかります。

Firefox 開発ツール

Firefox 開発ツール

図で表すと、このようになっていました。

Table of Contents Plus 構造

あとは CSS で指定していくだけですね。今回はこのようなデザインにしてみたいと思います。

見出し完成!

全体の横幅や枠を指定して中央に寄せる

目次は <div id=”toc_container”></div> で囲まれているので、この id を使って全体の指定をしてみましょう。

#toc_container {
	display: block !important;
	width: 80% !important;
	background: #fff; /* 背景色 */
	border: 1px solid #ccc; /* 枠 */
	font-size: 95%; /* フォントサイズ */
	box-sizing: border-box; /* スマホの横揺れ防止 */
	line-height: 1.4; /* 行間 */
	margin: 36px auto; /* 外側の余白 */
	padding: 1em 2em; /* 内側の余白 */
}

display と width に !important を指定しています。

これは、目次を閉じて開いたあとにインラインで指定が入るため、それを上書きするための記述です。

目次を開くとインラインで指定が入る

また、横幅を 100 %にするとスマホで横揺れが発生してしまうので、box-sizing を指定してあります。

サンプルのように全体の幅を 80 %にするなら不要ですが、横幅いっぱいに広げる場合は入れておきましょう。

左右の margin に auto を指定すると中央寄せになります。

目次を中央寄せにする

これだけだとデフォルトのデザインとあまり変わりませんね。

つづいて中身を調整していきましょう!

目次タイトルを調整する

初期設定では「見出し」となっている、タイトル部分を変えてみます。

#toc_container .toc_title {
	text-align: center; /* 中央寄せ */
	background: #eee; /* 背景色 */
	border-bottom: 2px solid #ddd; /* 下線 */
	padding: 0.4em 0; /* 内側の余白 */
}

背景色よりちょっと濃いグレーを下線に指定して、立体的にしてみました。

目次タイトルのデザイン

次はリストの部分を調整していきます。

目次リストのCSSをリセットする

リストは <ul> で出力されているので、プラグインの CSS を止めた場合はテーマの CSS が適用されます。

Gush2 ではこのような指定です。

ul {
    list-style: inside url("images/checkmark.png") disc;
    margin-bottom: 24px;
}

ul li {
    margin: 0.8em 0px 0.8em 0.5em;
    padding-left: 1em;
    text-indent: -1.5em;
}

まず、この指定をリセットしてしまいましょう。

#toc_container ul {
    list-style: none;
    margin-bottom: 0;
}

#toc_container ul li {
    margin: 0;
    padding-left: 0;
    text-indent: 0;
}

これで、「#toc_container の中にあるリスト」のみ指定がリセットされます。

目次リストのCSSをリセットした状態

テーマによって記述が異なるので、開発ツールで調べてみてください。

うまくリセットできないときは、CSS の優先順位をチェック してみましょう。

大見出しのみ強調したデザインにする

リストの中身はこのようになっています。

<div id="toc_container" class="no_bullets">
<p class="toc_title">見出し</p>
<ul class="toc_list">
  <li><a href="#i"><span class="toc_number toc_depth_1">1</span> ここは大見出しです</a>
    <ul>
      <li><a href="#i-2"><span class="toc_number toc_depth_2">1.1</span> ここは中見出しです</a>
        <ul>
          <li><a href="#i-3"><span class="toc_number toc_depth_3">1.1.1</span> ここは小見出しです</a></li>
        </ul>
      </li>
    </ul>
  </li>
  <li><a href="#i-4"><span class="toc_number toc_depth_1">2</span> まとめ</a></li>
</ul>
</div>

大見出しのみちょっと強調して、中見出しや小見出しは一字下げるよう調整してみました。

#toc_container ul a {
	display: block;
	text-decoration: none;
	color: #444; /* リンク色 */
	border-bottom: 1px dotted #ccc; /* リンク下線 */
}

#toc_container .toc_list > li > a {
	border-bottom: 2px solid #ccc; /* 大見出しの下線 */
	font-size: 110%; /* 大見出しのフォントサイズ */
}

#toc_container ul ul {
	padding: 1em 0 1em 1em;
}

#toc_container li {
	margin-bottom: 0.8em;
	padding-bottom: 0.2em;
}

リスト内のリンクにフォントカラーや下線を指定し、大見出しの部分だけ下線を太くしてフォントサイズも大きくしています。

.toc_list > li > a のように指定することで、直下の子要素にのみスタイルが適用されます。孫要素には反映されません。

参考意外と知らない!?CSSセレクタ20個のおさらい

というわけで、めでたく完成しました!

見出し完成!

CSS最終形

最終的に以下のようになりました。コピペして使ってみてください。

/*--------------------------------------
  TOC+
--------------------------------------*/
#toc_container {
	display: block !important;
	width: 80% !important;
	background: #fff;
	border: 1px solid #ccc;
	font-size: 95%;
	box-sizing: border-box;
	line-height: 1.4;
	margin: 36px auto;
	padding: 1em 2em;
}

#toc_container .toc_title {
	text-align: center;
	background: #eee;
	border-bottom: 2px solid #ddd;
	padding: 0.4em 0;
}

#toc_container ul {
    list-style: none;
    margin-bottom: 0;
}

#toc_container ul li {
    margin: 0;
    padding-left: 0;
    text-indent: 0;
}

#toc_container ul a {
	display: block;
	text-decoration: none;
	color: #444;
	border-bottom: 1px dotted #ccc;
}

#toc_container .toc_list > li > a {
	border-bottom: 2px solid #ccc;
	font-size: 110%;
}

#toc_container ul ul {
	padding: 1em 0 1em 1em;
}

#toc_container li {
	margin-bottom: 0.8em;
	padding-bottom: 0.2em;
}

※リセット部分は多少違うと思いますので調整が必要です

あとは配色や余白のバランスなど、テーマに合うようお好みで変えてみてください!

おまけサンプル

上記のサンプルをベースに配色を変え、さらに position プロパティ を使ってこんなのも作ってみました。

女子ブログ向きの目次

CSS はこちらです。

/*--------------------------------------
  TOC+
--------------------------------------*/
#toc_container {
	display: block !important;
	width: 80% !important;
	background: #fef;
	border: 2px solid #f39;
	border-radius: 4px;
	font-size: 95%;
	box-sizing: border-box;
	line-height: 1.4;
	margin: 36px auto;
	padding: 4em 2em 1em;
	position: relative;
}

#toc_container .toc_title {
	text-align: center;
	background: #fff;
	border-radius: 4px;
	border: 2px solid #f39;
	color: #c09;
	padding: 0.8em;
	position: absolute;
	top: -24px;
}

#toc_container ul {
    list-style: none;
    margin-bottom: 0;
}

#toc_container ul li {
    margin: 0;
    padding-left: 0;
    text-indent: 0;
}

#toc_container ul a {
	display: block;
	text-decoration: none;
	color: #c09;
	border-bottom: 1px dotted #f9c;
}

#toc_container .toc_list > li > a {
	border-bottom: 2px solid #f9c;
	font-size: 110%;
}

#toc_container ul ul {
	padding: 1em 0 1em 1em;
}

#toc_container li {
	margin-bottom: 0.8em;
	padding-bottom: 0.2em;
}

まとめ

目次を出力する Table of Contents Plus を導入するなら、デザインを変更してオリジナリティを出してみましょう。

記事を書くだけではなく、こうしてカスタマイズするのも楽しいですよ!

CSS を覚えるとほかにもいろいろ応用できるので、少しずつ勉強してみてください。

それでは、また。