攻めは飛車角銀桂守りは金銀三枚

人生、なすがママ、きゅうりがパパ

はてなブログをカスタマイズしてタイムライン表示を追加する方法

最近ブログなどでよく見かける「タイムライン表示」。

会社の年表や自分の生い立ち、プログラムのインストール方法の解説などに使われています。

今回はこのタイムライン表示をはてなブログに導入する方法です。

タイムラインを導入したらこんな表示できます。



なお、タイムラインのCSSは下記の記事を参考にさせていただきました。
nelog.jp

はてなブログにタイムラインを導入する

はてなブログにタイムラインを導入するにはちょっとしたJavascriptとCSSとHTMLを書く必要があります。
JavascriptとCSSは一度コピーすればいいので安心してください。
必ず作業前に設定しているCSSとJavascriptのバックアップ取ってください。
動作させるにはjQueryが必要です。

タイムラインのCSSを設定する

はてなブログの管理画面から「デザイン→カスタマイズ→デザインCSS」を選択して以下のCSSを設定します。

/*********************************
* タイムライン
*********************************/
.timeline-box {
  margin-bottom: 20px;
  border: 1px solid #ccc;
  border-radius: 4px;
  padding: 16px 5px;
  box-sizing: border-box;
}

.timeline-box *{
  box-sizing: border-box;
}

.timeline-box .timeline {
  list-style: none;
  padding: 0;
  margin: 0;
}

.timeline-title {
  font-weight: bold;
  font-size: 1.1em;
  text-align: center;
}

.timeline > li {
  margin-bottom: 60px;
}

.timeline > li.timeline-item {
  overflow: hidden;
  margin: 0;
  position: relative;
}

.timeline-item-label {
  width: 110px;
  float: left;
  padding-top: 18px;
  text-align: right;
  padding-right: 1em;
  font-size: 14px;
}

.timeline-item-title {
  font-weight: bold;
}

.timeline-item-content {
  width: calc(100% - 110px);
  float: left;
  padding: .8em 1.4em;
  border-left: 3px #e5e5d1 solid;
}

.timeline-item:before {
  content: '';
  width: 12px;
  height: 12px;
  background: #6fc173;
  position: absolute;
  left: 105px;
  top: 24px;
  border-radius: 100%;
}

/* for Smartphone */
@media screen and (max-width: 480px) {
  .timeline-box .timeline {
    padding-left: 10px;
  }

  .timeline > li.timeline-item {
    overflow: visible;
    border-left: 3px #e5e5d1 solid;
  }

  .timeline-item-label {
    width: auto;
    float: none;
    text-align: left;
    padding-left: 16px;
  }

  .timeline-item-content {
    width: auto;
    padding: 8px;
    float: none;
    border: none;
  }

  .timeline-item::before {
    left: -12px;
    top: 19px;
    width: 21px;
    height: 21px;
  }
}

これは引用元のサイトのもの、そのままですが、表示がずれる際は調整してください。

Javascriptを設定する

次にはてなブログの管理画面から「デザイン→カスタマイズ→ヘッダ→記事下」を選択して以下のJavascriptを設定します。

<script>
$(document).ready(function(){

    var    timeline = $( ".hatena-timeline" ) ;
    var    timeline_cnt = timeline.length ; 
    var    str = ""  ;
    var title = ""
    if( timeline_cnt == 0 ){
    	return ;
    }
   for( var i = 0 ; i < timeline_cnt ; i++ ){
        title = timeline.eq( i ).attr( "title" ) ;
        str = "" ;
        str += '<div class="timeline-box"><div class="timeline-title">' + title + '</div><ul class="timeline">' ;
        var    timelinechile = timeline.eq( i ).children( '.hatena-timeline-item' );
        var    item_cnt = timelinechile.length ;
        console.log( timelinechile );
        for( var j = 0 ; j < item_cnt ; j++ ){
            var    label = timelinechile.eq( j ).attr( "label" ) ;
            var    item_title= timelinechile.eq( j ).attr( "item-title" ) ;
            var    item_snippet= timelinechile.eq( j ).attr( "item-snippet" ) ;
            str += '<li class="timeline-item"><div class="timeline-item-label">' + label+ '</div>' ;
            str += '<div class="timeline-item-content"><div class="timeline-item-title">' +item_title + '</div>' ;
            str += '<div class="timeline-item-snippet">' +item_snippet + '</div></div></li>' ;
        }
        str += '</ul></div>' ;
        timeline.eq( i ).replaceWith( str ) ;
    }
});
</script>

これで準備は完了です。
ここまでの作業は一度やればOKです。

はてなブログ記事にタイムラインを表示させる

最後に、記事でタイムラインを表示させたい場所に以下のコードをまねて入れてください。

<div class="hatena-timeline" title="ここに全体のタイトルを入れる">
    <div class="hatena-timeline-item" label="2018年12月" item-title="会社辞めることにした" item-snippet="やる気ないしやめることにした。"></div>
    <div class="hatena-timeline-item" label="2019年01月" item-title="人間辞めることにした" item-snippet="仕事もお金ないししやめることにした。"></div>
</div>
<div class="hatena-timeline" title="ここに全体のタイトルを入れる2">
    <div class="hatena-timeline-item" label="2020年12月" item-title="会社辞めることにした2" item-snippet="やる気ないしやめることにした。2"></div>
    <div class="hatena-timeline-item" label="2022年01月" item-title="人間辞めることにした2" item-snippet="仕事もお金ないししやめることにした。2"></div>
</div>

(エラー処理は全くやってないのでちゃんとルール守ったHTML書いてください。)
これでコードを入れた部分にタイムラインが表示されているはず・・・です。



あと、タイムライン表示は1記事に1か所にしか対応してません。(id="hatena-timeline"がミソ)

まとめ

ほ~れ、ほれ。タイムライン出てるじゃろ?
出てない?そりゃ運が悪かったな。

不具合が起きても責任は取れません。ご了承ください。
あと「はてな記法モード」でしかテストしてません。

ということで、はてなブログをカスタマイズしてタイムライン表示を追加する方法でした。