※この記事は公開から時間が経っているため、現在の環境とは内容が異なる場合があります。
Bloggerはそのままでも記事を書けますが、長い記事やコードを含む記事では、少し読みづらく感じることがあります。
たとえば、見出しが多い記事には目次があると便利です。
HTMLやJavaScriptを載せる記事では、ソースコードが見やすい方が読み進めやすくなります。
また、関連記事をブログカードで見せたり、補足を吹き出しで入れたり、長いページにトップへ戻るボタンを追加したりすると、記事全体の使いやすさも変わります。
この記事では、Bloggerの記事を読みやすくするために使っていたカスタマイズをまとめます。
目次、コード表示、ブログカード、吹き出し、トップへ戻るボタンを、必要なところから追加できるように整理しました。
読みやすくする5つのパーツ
まず、今回追加するパーツを整理しておきます。

この記事で扱うのは、次の5つです。
- 目次
- ソースコード表示
- ブログカード
- 吹き出し
- トップへ戻るボタン
どれも必須ではありません。
記事の内容に合わせて、必要なものだけ追加すれば十分です。
カスタマイズを増やしすぎると、管理が大変になったり、表示が重くなったりすることもあります。
まずは、記事に必要なパーツから少しずつ追加していく方が扱いやすいです。
作業前にテーマをバックアップする
BloggerのテーマHTMLやCSSを編集する前に、テーマのバックアップを保存しておきます。
Bloggerの管理画面で テーマ を開き、カスタマイズボタン横の▼ボタンをクリックします。

表示されたメニューからバックアップを選択してバックアップを保存します。

バックアップを取っておくと、編集後に表示が崩れた場合でも戻しやすくなります。
HTML編集を開く場合は、テーマのメニューから HTMLを編集 を選びます。

HTMLの編集が終了したら、保存ボタンをクリックします。

コードを追加するときは、一度にまとめて変更するより、1つ追加して保存し、表示を確認する流れの方が安心です。

目次を自動表示する
Bloggerには、標準で目次を自動表示する機能がありません。
見出しが多い記事では、最初に目次があると、読者が必要な場所へ移動しやすくなります。

目次の自動表示は、見出しを取得して目次を作成するJavaScriptをテーマに追加して実現します。
ここでは、記事ページだけで動くようにして、h2とh3を目次に表示する形にします。
テーマのHTMLを開き、</head> の前に目次用の設定とスクリプトを追加します。
スクリプトを見る
<!-- 目次作成プラグイン追加 -->
<b:if cond='data:blog.pageType == "item"'>
<style>
/* 目次 */
.blogger-toc {
width: auto;
margin: 20px 0;
padding: 16px 20px;
border: 1px solid #d7e4f5;
border-radius: 8px;
background: #f7fbff;
}
.blogger-toc-title {
margin: 0 0 10px;
font-weight: bold;
font-size: 1.1em;
}
.blogger-toc-list {
margin: 0;
padding-left: 1.4em;
}
.blogger-toc-item {
margin: 6px 0;
line-height: 1.6;
}
.blogger-toc-level-h3 {
margin-left: 20px;
font-size: 0.95em;
}
.blogger-toc a {
text-decoration: none;
}
.blogger-toc a:hover {
text-decoration: underline;
}
</style>
<script>
var toc_options = {
target: ["h2", "h3"],
autoNumber: true,
condTargetCount: 2,
insertPosition: "firstHeadBefore",
showToc: true,
width: "auto",
marginTop: "20px",
marginBottom: "20px",
indent: "20px",
postBodySelector: ".widget.Blog"
};
</script>
<script>
//<![CDATA[
(function () {
function onReady(fn) {
if (document.readyState !== "loading") {
fn();
} else {
document.addEventListener("DOMContentLoaded", fn);
}
}
onReady(function () {
var options = window.toc_options || {};
var targets = options.target || ["h2", "h3"];
var selectorText = targets.join(",");
var bodySelectors = [];
if (options.postBodySelector) {
bodySelectors.push(options.postBodySelector);
}
bodySelectors.push(".post-body");
bodySelectors.push(".entry-content");
bodySelectors.push("article");
bodySelectors.push("#Blog1");
var postBody = null;
for (var i = 0; i < bodySelectors.length; i++) {
var candidate = document.querySelector(bodySelectors[i]);
if (candidate && candidate.querySelector(selectorText)) {
postBody = candidate;
break;
}
}
if (!postBody) {
return;
}
var headings = postBody.querySelectorAll(selectorText);
if (!headings || headings.length < (options.condTargetCount || 2)) {
return;
}
var toc = document.createElement("div");
toc.className = "blogger-toc";
if (options.width) {
toc.style.width = options.width;
}
if (options.marginTop) {
toc.style.marginTop = options.marginTop;
}
if (options.marginBottom) {
toc.style.marginBottom = options.marginBottom;
}
var title = document.createElement("p");
title.className = "blogger-toc-title";
title.textContent = "目次";
toc.appendChild(title);
var list = document.createElement("ol");
list.className = "blogger-toc-list";
var h2Count = 0;
var h3Count = 0;
for (var j = 0; j < headings.length; j++) {
var heading = headings[j];
var tagName = heading.tagName.toLowerCase();
if (!heading.id) {
heading.id = "toc-heading-" + (j + 1);
}
if (tagName === "h2") {
h2Count++;
h3Count = 0;
} else if (tagName === "h3") {
h3Count++;
}
var item = document.createElement("li");
item.className = "blogger-toc-item blogger-toc-level-" + tagName;
if (tagName === "h3" && options.indent) {
item.style.marginLeft = options.indent;
}
var link = document.createElement("a");
link.href = "#" + heading.id;
var label = heading.textContent || heading.innerText || "";
if (options.autoNumber) {
if (tagName === "h2") {
label = h2Count + ". " + label;
} else if (tagName === "h3") {
label = h2Count + "." + h3Count + " " + label;
}
}
link.textContent = label;
item.appendChild(link);
list.appendChild(item);
}
toc.appendChild(list);
if (options.showToc === false) {
toc.style.display = "none";
}
var firstHeading = postBody.querySelector(selectorText);
if (options.insertPosition === "firstHeadBefore" && firstHeading) {
firstHeading.parentNode.insertBefore(toc, firstHeading);
} else {
postBody.insertBefore(toc, postBody.firstChild);
}
});
})();
//]]>
</script>
</b:if>
<!-- /目次作成プラグイン追加 -->target では、目次に含める見出しを指定します。
上の設定では、h2 と h3 を目次に入れます。
condTargetCount は、目次を表示する見出し数の条件です。
見出しが少ない記事では目次を出したくない場合に使います。
外部サイトで公開されているコードを使う場合は、配布元の説明や利用条件を確認してから使います。
コードを丸ごと貼り付ける場合は、記事ページだけで動くようにしておくと、余計なページで動きにくくなります。
ソースコードを見やすく表示する
HTMLやJavaScript、Pythonなどのコードを記事に載せる場合は、コード表示を整えると読みやすくなります。
ここでは、Google-code-prettifyを使った方法をまとめます。
テーマのHTMLを開き、</head> の前に次のコードを追加します。
<!-- Google-code-prettifyを追加 -->
<script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script>
<!-- /Google-code-prettify -->追加したら保存します。
記事内でソースコードを表示するときは、HTMLモードで次のようにソースコードを<pre> タグで囲います。
<pre class="prettyprint">ソースコード</pre>ソースコードが見やすい形で表示されます。

行番号を表示する
行番号を表示したい場合は、次のようにlinenums という記述を追加します。
<pre class="prettyprint linenums">ソースコード</pre>白とグレーのしましまになって、5行ずつ行番号が表示されます。

1行ずつ行番号を表示する
行番号の表示をデフォルトの5行ずつから、1行ずつに変更したい場合は、こちらのcssを追加します。
<style type="text/css">
pre.prettyprint.linenums li {
list-style-type: decimal;
}
</style>1行ずつ行番号が表示されました。

コード表示のスキンや言語を指定する
Google-code-prettifyでは、スキンを指定できます。
たとえば、sunburst というスキンを使う場合は、読み込みURLに skin=sunburst を付けます。
<!-- Google-code-prettifyを追加 -->
<script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js?skin=sunburst"></script>
<!-- /Google-code-prettify -->ソースコードが、sunburst で表示されます。

言語を指定する
プログラミング言語を指定することもできます。
<pre class="prettyprint lang=python">pythonのソースコード</pre>スクロールバーを表示する
長いコードを載せる場合は、横スクロールできるようにしておくと、スマホ表示でも崩れにくくなります。
<pre class="prettyprint linenums" style="overflow: auto; word-wrap: normal;">CSS側でまとめて指定する場合は、次のように書きます。
<style>
pre.prettyprint {
overflow: auto;
word-wrap: normal;
}
</style>スクロールバーが追加されます。

ブログカードを追加する
Bloggerには、WordPressのようなブログカード機能は標準ではありません。
関連記事や外部記事を分かりやすく見せたい場合は、ブログカード用のCSSやブックマークレットを使ってHTMLを作成する方法があります。

ブログカードの追加方法を探してみると、はてなの機能を使わせてもらうとか、embed.ly を使うとか、いろいろな方法が見つかりました。
その中でも、使ってみて一番よかったのが、こちらのサイトで公開されているブログカードです。
使い方や注意事項も、詳しく解説されています。ありがとうございます。

使い方の流れは、次のようになります。
- ブログカード用のCSSをBloggerに追加する
- ブックマークレットをブラウザのブックマークバーに登録する
- ブログカードを作りたいページでブックマークレットをクリックする
- 表示されたHTMLをBloggerの記事に貼り付ける
ブックマークレットを使う方法は便利ですが、外部サービスや配布元の仕様に依存します。
使う場合は、配布元の説明を確認し、生成されたHTMLをそのまま使って問題ないかを見てから貼り付けます。
ブログカードは便利ですが、入れすぎると記事が重く見えることもあります。
関連性の高い記事だけに絞って使うと、読みやすくなります。
吹き出しを追加する
補足説明や会話のような見せ方をしたい場合は、吹き出しを使うと本文にメリハリが出ます。
Bloggerの標準機能にはないので、CSSとHTMLを使って、吹き出しを追加する方法を紹介します。

吹き出しは、CSSで見た目を作り、記事本文にHTMLを入れて表示します。
テーマのHTMLを開き、<b:skin><![CDATA[ と ]]></b:skin> の間に吹き出し用のCSSを追加します。
コメントの部分を変更すると、色や位置の調整ができます。
/* 吹き出し スタート */
.balloon-left, .balloon-right {
width: 100%;
margin: 5px 0;
overflow: hidden;
}
.faceicon {
width: 80px;
text-align:center;
margin-top: 0;
margin-bottom: 0;
}
.balloon-left .faceicon {
float: left;
margin-left: 5px;
}
.balloon-right .faceicon {
float: right;
margin-right: 5px;
}
.faceicon img{
width: 100%;
height: auto;
}
.img-caption {
font-size: 12px;
}
.says {
display: inline-block;
position: relative;
font-size: 14px;
border-radius: 12px;
background: white;
-webkit-filter:drop-shadow(2px 2px 2px rgba(0,0,0,0.5));
}
.balloon-left .says {
margin: 5px 0 0 20px; /* 吹き出し(左)の位置を調整 */
padding: 20px 15px;
border:2px solid #aef26a; /* 吹き出し(左)の色を調整 */
}
.balloon-right .says {
float: right;
margin: 5px 10px 0 0; /* 吹き出し(右)の位置を調整 */
padding: 20px 15px;
border:2px solid #fda1f1; /* 吹き出し(右)の色を調整 */
}
.says:before {
content: "";
display: inline-block;
position: absolute;
border: 10px solid transparent;
z-index: 2;
}
.balloon-left .says:before {
top: 17px;
left: -19px;
border-right: 10px solid #FFF;
}
.balloon-right .says:before {
top: 20px;
right: -20px;
border-left: 10px solid #FFF;
}
.says:after {
content: "";
display: inline-block;
position: absolute;
border: 12px solid transparent;
z-index: 1;
}
.balloon-left .says:after {
top: 15px;
left: -26px;
border-right: 12px solid #aef26a; /* 吹き出し(左)の色を調整 */
}
.balloon-right .says:after {
top: 18px;
right: -26px;
border-left: 12px solid #fda1f1; /* 吹き出し(右)の色を調整 */
}
/* 吹き出し エンド */ブログ内に吹き出しを追加する
記事内では、次のようなHTMLで吹き出しを表示します。
左側の吹き出しのHTMLはこちらです。
<!--吹き出しはじまり--><span class="balloon-left"><span class="faceicon">★<img>タグを設定★<span class="img-caption">★イメージの下の説明を設定</span></span><span class="says">★吹き出しの言葉を設定</span></span><!--吹き出し終わり-->右側に表示したい場合は、balloon-left を balloon-right に変更します。
<!--吹き出しはじまり--><span class="balloon-right"><span class="faceicon">★<img>タグを設定★<span class="img-caption">★イメージの下の説明を設定</span></span><span class="says">★吹き出しの言葉を設定</span></span><!--吹き出し終わり-->★タグ★ の部分は、Bloggerに画像を追加して、プレビューのソースをコピペします。
吹き出しは便利ですが、使いすぎると本文が軽く見えすぎることもあります。
補足や会話があると分かりやすい場所に絞って使うと、読みやすさとのバランスが取りやすくなります。
トップへ戻るボタンを追加する
長い記事では、ページの下まで読んだあとに上へ戻るのが少し面倒になります。
その場合は、右下に「トップへ戻る」ボタンを置いておくと移動しやすくなります。

いろいろ探してみて、こちらを利用させていただくことにしました。ありがとうございます。
以下は、設定した手順の覚え書きです。
詳細は、上の本家のサイトを参照してください。
バックアップをとってから、[テーマ] - [HTMLを編集]で、</head> の前に次のコードをコピペします。
<!-- JQuery -->
<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js'/>
<!-- 「トップへ戻る」用アイコンフォント Font Awesome -->
<link href='https://use.fontawesome.com/releases/v5.6.4/css/all.css' rel='stylesheet'/>次に、</body> の前に、スクロール時の表示とクリック時の動きを指定するコードを追加します。
<!-- topへ戻る ここから -->
<script>
jQuery(function() {
var pagetop = $('#page_top');
pagetop.hide();
$(window).scroll(function () {
if ($(this).scrollTop() > 100) { //100pxスクロールしたら表示
pagetop.fadeIn();
} else {
pagetop.fadeOut();
}
});
$('a[href^="#"]').click(function(){
var time = 500;
var href= $(this).attr("href");
var target = $(href == "#" ? 'html' : href);
var distance = target.offset().top;
$("html, body").animate({scrollTop:distance}, time, "swing");
return false;
});
});
</script>
<div id='page_top'><a href='#'/></div>
<!-- topへ戻る ここまで -->最後に、<b:skin><![CDATA[ と ]]></b:skin> の間に、ボタンの見た目を指定するCSSを追加します。
/* トップに戻る ここから */
#page_top{
width: 50px;
height: 50px;
position: fixed;
right: 0;
bottom: 0;
background: #a3e386; /* ボタンの色を指定 */
opacity: 0.6;
}
#page_top a{
position: relative;
display: block;
width: 50px;
height: 50px;
text-decoration: none;
}
#page_top a::before{
font-family: 'Font Awesome 5 Free';
font-weight: 900;
content: '\f102';
font-size: 25px;
color: #fff;
position: absolute;
width: 25px;
height: 25px;
top: 0;
bottom: 0;
right: 0;
left: 0;
margin: auto;
text-align: center;
}
/* /トップに戻る ここまで */色や位置を変えたい場合は、background、right、bottom、opacity などを調整します。
表示確認のポイント
カスタマイズを入れたら、最後に表示を確認します。

確認したいのは、主に次の4つです。
本文の見え方
目次、見出し、吹き出しが本文の邪魔になっていないか確認します。
パーツを入れすぎると、かえって読みにくくなることがあります。
コード表示
コードが横にはみ出していないか、スマホで読めるかを確認します。
長いコードは横スクロールにしておくと崩れにくくなります。
リンク
ブログカードやトップへ戻るボタンのリンクが正しく動くか確認します。
外部サービスを使う場合は、リンク先や表示内容も見ておきます。
スマホ表示
パソコンではきれいでも、スマホでは幅が足りずに崩れることがあります。
最後にスマホ表示で見ておくと安心です。
まとめ
Bloggerの記事を読みやすくするカスタマイズは、記事の内容に合わせて必要なものだけ追加するのが扱いやすいです。
今回まとめたパーツは、次の5つです。
- 目次
- ソースコード表示
- ブログカード
- 吹き出し
- トップへ戻るボタン
長い記事には目次、コードを扱う記事にはコード表示、関連記事を見せたい記事にはブログカード、補足を入れたい記事には吹き出し、長いページにはトップへ戻るボタンが役立ちます。
ただし、どれも入れれば入れるほど良いというものではありません。
まずは記事の読みやすさを優先して、必要なパーツだけ追加していくのがおすすめです。
次は、BloggerからWordPressへ移行する方法を紹介します。



