支援者募集中!仕事依頼はこちら

【Cocoon】スマホで目次を追従させる方法

Cocoonでスマホで目次追尾 Cocoonカスタマイズ

スマホでブログを見ると横がせまい分、縦長になりがちですよね。

長いコンテンツの途中で「もういいや。」と離脱されてしまっては困ります。

読みたいところだけ読めるように、そして探しやすく」するため、スマホでも目次を追尾させました。

動作確認のデモは当ブログです。スマホで見てみると右下に目次が表示されるかと思います。

この記事はCocoon利用者限定のカスタマイズになります。

少しでも使いやすくして、離脱率の減少を防ぎましょう!

このカスタマイズはコピペでできるようになっていますが一部、位置や色など自身で変更してもらう箇所があります。

ちなみにAMPでは利用できません

編集するファイル
  • style.css
  • footer-insert.php
  • function.php

Cocoonでスマホ時に目次を追尾させる方法!

手順は以下の通りです。

手順
  • STEP1
    CSSコピペ
    style.cssにコードをコピペします。
  • STEP2
    コードコピペ
    footer-insert.phpにコードをコピペします。
  • STEP3
    PHPコピペ
    function.phpを作成します。
  • STEP4
    ウィジェット追加
    ウィジェットを設定します。

STEP1:CSSをコピペ

下記コードをコピペしてください。

メモ

「外観→テーマエディター→style.css(子テーマ)」。もしくは、「外観→カスタマイズ→追加CSS」に貼り付けてください。

/************************************
** スマホ追尾目次
************************************/
#mobile-toc-widget-wrap .menu-trigger,
#mobile-toc-widget-wrap .menu-trigger span {
  display: inline-block;
  transition: all .4s;
  box-sizing: border-box;
}
#mobile-toc-widget-wrap .menu-trigger {
  position: relative;
  width: 25px;
  height: 35px;
}
#mobile-toc-widget-wrap .menu-trigger span {
  position: absolute;
  left: 0;
  width: 100%;
  height: 3px;
  background-color: #fff; /* 三本線色 */
  border-radius: 4px;
}
#mobile-toc-widget-wrap .menu-trigger span:nth-of-type(1) {
  top: 13px;
}
#mobile-toc-widget-wrap .menu-trigger span:nth-of-type(2) {
  top: 20px;
}
#mobile-toc-widget-wrap .menu-trigger span:nth-of-type(3) {
  top: 27px;
}
#mobile-toc-widget-wrap .menu-trigger.active {
  -webkit-transform: rotate(360deg);
  transform: rotate(360deg);
}
#mobile-toc-widget-wrap .menu-trigger.active span:nth-of-type(1) {
  -webkit-transform: translateY(20px) rotate(-45deg);
  transform: translateY(20px) rotate(-45deg);
  top:0;
}
#mobile-toc-widget-wrap .menu-trigger.active span:nth-of-type(2) {
  -webkit-transform: translateY(0) rotate(45deg);
  transform: translateY(0) rotate(45deg);
}
#mobile-toc-widget-wrap .menu-trigger.active span:nth-of-type(3) {
  opacity: 0;
}
#mobile-toc-widget-wrap{
  position: fixed;
  bottom: 50px;
  right: 20px;
  margin: 0;
  padding: 0;
  z-index:5;
  counter-reset: mobile-toc;
}
#mobile-toc-widget-wrap label .mobile-toc-button {
  width: 58px;
  height: 58px;
  border-radius:50%;
  background: #f6a068; /* ボタン色 */
  box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.16);
  transition: ease-out 0.3s;
  text-align:center;
  position:relative;
  z-index: 3;
}
#mobile-toc-widget-wrap label .mobile-toc-button .mobile-toc-button-title {
  color: #fff; /* ボタン文字色 */
  font-size: 0.65em;
  letter-spacing: 0;
  position: absolute;
  bottom: 7px;
  left: 0;
  right: 0;
  margin: auto;
}
#mobile-toc-widget-wrap label:hover {
  background: #efefef;
}
#mobile-toc-widget-wrap input {
  display: none;
}
#mobile-toc-widget-wrap .mobile-toc-show {
  display:none;
}
#mobile-toc-widget-wrap input:checked ~ .mobile-toc-show {
  background:#fff;
  position: absolute;
  top: 0;
  left: 0;
  padding: 2.5em 1em;
  opacity:0.93;
  position:fixed;
  width:100%;
  height:100%;
  display:block;
  animation: 0.5s fade-in;
  -webkit-animation: 0.5s fade-in;
  overflow-y:scroll;
}
@-webkit-keyframes fadeIn { 
  0% {display: none;opacity: 0;}
  1% {display: block;opacity: 0;}
  100% {display: block;opacity: 0.93;}
}
@keyframes fade-in {
  0% {display: none;opacity: 0;}
  1% {display: block;opacity: 0;}
  100% {display: block;opacity: 0.93;}
}
#mobile-toc-widget-wrap .widgettitle{
  text-align: center;
  margin: 0 0 1.5em;
  color: #f6a068; /* 目次名の色 */
  font-size: 1.1em;
  letter-spacing:2px;
}

#mobile-toc-widget-wrap .mobile-toc-show .toc{
  border:none;
  margin: 0 !important;
  padding: 0 !important;
}
#mobile-toc-widget-wrap .toc .toc-list > li {
  list-style-type: none !important;
  position: relative;
  margin-left: 13px;
  margin-right: 25px;
  padding-left: 32px;
  margin-bottom: 15px;
  padding-bottom: 0px;
  font-size: 1.1em;
  line-height: 1.8;
}
#mobile-toc-widget-wrap .toc a {
  font-size: 0.8em;
}
#mobile-toc-widget-wrap .toc-list{
  padding:0 !important;
}
#mobile-toc-widget-wrap .toc-list > li:before{
  counter-increment: mobile-toc;
  content: counter(mobile-toc);
  position: absolute;
  left: 5px;
  top: 5px;
  background: none;
  font-size: 0.8em;
  color: #f6a068; /* 数字の色 */
}
#mobile-toc-widget-wrap .toc_widget_list > li ol {
  margin-top: 5px;
  padding-left: 20px;
}
#mobile-toc-widget-wrap .toc-list ol{
  list-style:none;
}
#mobile-toc-widget-wrap .toc-list > li > ol > li a {
  position: relative;
  text-decoration: none !important;
}
#mobile-toc-widget-wrap .toc-list > li ol li a:before {
  position: absolute;
  content: "・";
  font-size: 1.4em;
  left: -20px;
  top: -10px;
  color: #f6a068; /* 点の色 */
}

色を変更できる箇所は全てコメントを書いたのでそれに合わせてカラーコードを変更してください。

ボタンの位置を調整する

ボタンの位置にページトップボタンやメニューボタンがあって被ってしまう人は位置を変更してください。

50-51行目にあるbottomrightの数値を変更すればOK。

  • bottomは画面の下からの距離
  • rightは画面の右からの距離

になります。

スマホの画面を更新しながら確認してみてください。

STEP2:footer-insert.phpにコードをコピペ

必ずバックアップを取ってから行なってください。

メモ

バックアップはFTPソフトなどでファイルをダウンロードしておくだけでOK。

下記コードを子テーマにあるtmp-userfooter-insert.phpにコピペしてください。

<?php if ( wp_is_mobile()  && is_single()) : ?>
<?php if(is_active_sidebar('mobile_toc_widget')) : ?>
<div id="mobile-toc-widget-wrap">	
    <label for="mobile-toc">
    <div class="mobile-toc-button">
      <div class="menu-trigger">
      <span></span>
      <span></span>
      <span></span>
      </div>
     <span class="mobile-toc-button-title">目次</span>
    </div>
  </label>
    <input type="checkbox" id="mobile-toc"/>
    <div class="mobile-toc-show">
      <div class="mobile-toc-widget">	      
      <?php dynamic_sidebar('mobile_toc_widget'); ?>      
      </div>
    </div>
</div>
<script>
//スマホ目次追尾
$('#mobile-toc-widget-wrap label').on('click', function() {
    $('.menu-trigger').toggleClass('active');
});
$('#mobile-toc-widget-wrap .toc-list a').on('click', function() {
    $('.menu-trigger').toggleClass('active');
});
$('#sidebar-menu-input').on('click', function() {
    if ($('#sidebar-menu-input').prop('checked')) {
        $('#mobile-toc-widget-wrap').css('display', 'none');
    }else{
    $('#mobile-toc-widget-wrap').css('display', 'block');
  }
});
$('#mobile-toc-widget-wrap .toc-list a').click(function() {
    if ($('#mobile-toc-widget-wrap input').prop('checked')) {
        $('#mobile-toc-widget-wrap input').prop('checked', false);
    }
});

//スムーススクロール
$(function () {
 var headerHight = 50; 
 $('a[href^="#"]').click(function(){
     var href= $(this).attr("href");
       var target = $(href == "#" || href == "" ? 'html' : href);
        var position = target.offset().top-headerHight;
     $("html, body").animate({scrollTop:position}, 550, "swing");
        return false;
   });
});
</script>
<?php endif; ?>
<?php endif; ?>

各々で変更する可能性がある箇所は44行目です。

例えばヘッダーを固定している人はリンクを押したときにヘッダーの後ろに見出しが隠れてしまいます(ズレる)。

44行目の数値分、下にズラすことができるので被ってる場合は数値を変更してください。

STEP3:function.phpにコードをコピペ

コピペミスするだけでも画面が真っ白になって開かなくなる可能性があるので必ずバックアップを取ってから行なってください。

下記コードをfunction.phpにコピペします。

//目次スマホ追尾専用ウィジェット
add_action(
  'widgets_init', 
  function(){
    register_sidebar(array(
      'id' => 'mobile_toc_widget',
      'name' => '目次スマホ追尾',
      'description' => 'スマホだけに表示される追尾される目次専用エリアです。',
      'before_widget' => '',
      'after_widget' => '',
      'before_title' => '<div class="widgettitle">',
            'after_title' => "</div>\n"
    ));
  }
);

ウィジェットを作成するコードです。

STEP4:ウィジェットを設定

外観ウィジェットを開きます。

目次スマホ追尾という項目が増えているのでそこに目次を追加してください。

cocoon目次ウィジェット

タイトルは自由に変更してください!

以上で終了になります。

お疲れさまでした!

Cocoonカスタマイズ他にもやってます!

他にもCocoon利用者限定のカスタマイズ記事アップしてるのでよかったらご覧ください!

あわせて Cocoon限定カスタマイズ

Cocoonカスタマイズまとめ!コピペで簡単!
Cocoonのカスタマイズまとめです。おしゃれなものから機能性をあげるものまで紹介します。プロフィール、タブ切り替え、トップページ、リスト、ボックス、スマホのメニュー固定方法なども紹介していきます。

Cocoonを問わず誰でもコピペでできる便利カスタマイズはこちら。

あわせて コピペでできるブログカスタマイズまとめ

コピペでできるブログカスタマイズまとめ【HTML&CSS】
ブロガー、アフィリエイターに役立つブログやサイトのカスタマイズをまとめていきます。HTML、CSSがわからなくてもコピペ可!WordPress(Cocoon、JIN、SANGO、Affingerなど)、はてなブログなど一部機能を除けば誰でも利用可能です。

コメント

  1. 今回も素敵なカスタマイズありがとうございます。
    早速実装させていただいたのですが、無事目次のアイコンが記事右下に出るものの
    開いても目次が表示されず、真っ白になってしまいます。

    おそらくですが目次をデフォルトでたたむカスタマイズを入れていることが原因かなと思うのですが、カスタマイズ内容によってはおこりえるものなのでしょうか。

    こんな初歩的な質問ですいません・・・

    • コメントありがとうございます。

      当ブログもCocoon設定で「デフォルトでたたむ」ようになっているので関係ないと思うのですが何か別のカスタマイズを入れてるのでしょうか?

      もしよければ対象のURLを教えていただけると原因が特定しやすいかもしれません。

      • 問い合わせフォームよりご対応いただきありがとうございました!
        迅速な対応、誠にありがとうございます。
        これからも応援しています、この度はありがとうございました!

ページトップへ