目次の追加 と ソースコードの掲載方法 |
Vaster2の導入とカスタマイズ その4
投稿記事の目次を生成
見出し検出スクリプト
目次を生成するため、記事中に「見出し」や「小見出し」などが必須です。 そして「見出し」や「小見出し」や「準見出し」である、h1~h6を抽出する関数をHTML内に記述します。Vaster2テンプレートの一番最後にある</html>の上側に以下を貼り付けましょう。
<!-- jQuery関数ライブラリの読み込み:必要な場合のみで良い -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<!-- h1~h6を抽出する関数 -->
<script>//<![CDATA[
(function($){
jQuery.fn.toc = function(options) {
var defaults = {
startLevel: 'h2',
listType: 'ul',
target: 'toc'
};
var setting = jQuery.extend(defaults, options);
var startLevel = setting.startLevel.substr(1, 1);
var data = '';
var currentLevel = 0;
var counter = 1;
var header = [ '.entry-content h1', '.entry-content h2', '.entry-content h3',
'.entry-content h4', '.entry-content h5', '.entry-content h6' ];
var tmpArray = new Array;
for (i=startLevel-1; i<6; i++) {
tmpArray.push( header[i] );
}
var headers = tmpArray.join(',');
$( headers, this ).each(function(){
this.id = "chapter" + counter;
var level = this.nodeName.substr(1, 1) - ( startLevel - 1 );
while(currentLevel < level) {
data += '<' + setting.listType + '>';
currentLevel++;
}
while(currentLevel > level) {
data += '</' + setting.listType + '></li>';
currentLevel--;
}
if ( currentLevel == level ) {
data += '<li>';
}
data += '<a href="#' + this.id + '">' + $(this).html() + "</a>";
counter++;
});
while (currentLevel > 0) {
data += '</' + setting.listType + '>';
currentLevel--;
}
$("#" + setting.target).html(data);
return this;
};
})($) //]]>
</script>
CSSに目次の体裁を記述
目次はスクリプトにより「見出し」や「小見出し」などを検出して自動的に生成する様になっているけど、そのまま出力すると妙なリンクリスト集になっちゃうので、CSSを記述して体裁を整えます。以下の記述をCSSに追加してください。 ただし、あなたのUIに合わせて修正が必要で、明暗モードがある場合はそれぞれに合ったCSSを別々に記述します。
/*-------------------------------
目次のCSS
--------------------------------*/
#toc:before {
content: "目次";
font-weight:700;
padding-left: 8px;
}
#toc {
background:#e9e9e9;
border: 1px solid #888;
font-size: 95%;
display: table;
margin-bottom: 5px;
padding: 5px;
width: auto;
}
#toc ol,
#toc ol li {
margin: 5px 5px 5px 5px;
padding: 0;
}
#toc a:hover{
color:#ffffff;
background-color:#008ec2;
text-decoration:none;
}
私のブログでは明モードならbackground:#e9e9e9;とし、暗モードならbackground:#080808;としています。
また、Vaster2では準見出しを「h4」としていますが、明確な体裁がCSSに記述されていません。 そこで、CSSに「h4」の体裁としてオリジナルVaster2.xmlの236行目に以下の赤字部分を記述しておきます。
/* 記事のフォント
----------------------------------------------- */
.main-outer h1{
font-size:28px;
line-height:1.6em;
margin-bottom:30px;
}
.entry-content h2{
padding: .5em .75em;
margin-bottom: 30px;
background: #008ec2;
color: #fff;
}
.entry-content h3{
font-size:20px;
padding:15px 0 15px 10px;
border-left: 8px solid #008ec2;
color:#008ec2;
}
.entry-content h4{
font-size:18px;
padding:15px 0 15px 10px;
border-left: 8px solid #008ec2;
color:#008ec2;
}
.main-outer p{
font-size:16px;
line-height:1.6em;
padding-bottom:24px;
}
記事中に目次を生成させる
<script>$(function(){
$("body").toc();
});
</script>
<div align="center"><div id="toc" align="left"></div></div>
この記事の場合は以下の様に先頭の方に張り付けています。
<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
Vaster2の導入とカスタマイズ その4</h2>
<br />
<script>
$(function(){$("body").toc();});
</script>
<div align="center"><div align="left" id="toc"></div></div>
<br />
<!--more--><h3 style="text-align: left;">
投稿記事の目次を生成</h3>
:
:
:
:
ソースコードの掲載
CSSに目次の体裁を記述
記事中に掲載するソースコードの体裁をCSSに記述しておきます。 私のブログでは「source_code_box」というクラスを用意して、以下の様なCSSにしてあります。iPhoneなどのスマホでは動作が妙ですが、ソースコードを観るのはPCが多いだろうと放置しました。
.source_code_box>pre{
font-size: 80%;
width:auto;
height:auto;
max-height:400px;
overflow:scroll;
margin:5px;
padding:0px 5px;
border:1px solid;
-webkit-overflow-scrolling: touch;
}
記事中にソースコードを貼り付ける
投稿記事の文章中にソースコードを掲載する場合、改行やスペースや等幅フォントやらの指定が必要だし、長いソースコードの場合は記事内でスクロールする様にしたい。これらを個別にやるのは面倒なので、ソースコードを掲載したい部分にBloggerの投稿エディターをHTMLモードにして下記のコードを張り付けます。
<div class="source_code_box">
<pre><code>
↓ここに
↑コードを記述(エンコードは必要)
</code></pre></div>
Bloggerの投稿エディターを作成モードに切換えて掲載するソースコードを「↓ここに」と「↑コードを記述(エンコードは必要)」の間に張り付ければソースコードがエンコードされて張り付きます。 再びBloggerの投稿エディターをHTMLモードにして、「↓ここに」と「↑コードを記述(エンコードは必要)」という不要な記述を削除すればできあがりです。
目次を設定しようとググっていると、こちらのページに辿り着きました。
返信削除丁寧な説明記事でこの通りにやってみると、うまく設置できましたので、参考にさせていただきました。
ありがとうございます(o゚∀゚o)
今までは目次の最後の行に関連記事が表示されたり、1ページに表示してある記事の全てのhタグ が目次に表示したり・・・で、苦戦していました。
さすがです。。。。
だんべぇ様
削除備忘録が参考になった様なら幸いです。