若葉の技術メモ

コンピュータやプログラミングに関して調べたり、取り組んだりしたことをまとめる若葉のノート📓。コンピュータ・プログラミング初めてって方も一緒に勉強していきましょう!初心は大事!いつでも若葉☘のような意気込みで!

  • No.   

若葉の技術メモ

コンピュータやプログラミング・数理に関して調べたり、取り組んだりしたことをまとめる若葉のノート。

コンピュータ・プログラミング・数理が初めてって方も一緒に勉強していきましょう!

初心は大事!いつでも若葉☘のような意気込みで!

【はてなブログのカスタマイズ初心者必見!】ヘッダをスクロール時に変形する簡単な方法!

ブログのデザイン。

ブログを始めて少し時間が経った頃っていろんなところにこだわりたくなりますよね?

例えば、f:id:wakaba-mafin:20181121173702j:plain:w150:right

  • どんなカテゴリを用意しよう

  • aboutページ編集しようかな

  • デザインどんな風に変えよう

とか、触れるところは全部触りたくなってしまいますよね?

かくいう、私もそうです!

実際にブログのヘッダをノートの罫線風にしてみたり↓

wakaba-mafin.hatenablog.com

はてなブログのバー(globalheader)をいじってみたり↓

wakaba-mafin.hatenablog.com

というわけで、今回はヘッダの部分をスクロールした際に変形する方法をご紹介します!

※この記事の内容をご自身で試す場合は自己責任でお願いします


ヘッダとは

まずははてなブログのパーツを確認しましょう。

私、若葉の技術メモの頭のパーツはこんな感じ。

f:id:wakaba-mafin:20181126184433j:plain

  1. はてなブログバー(globalheader)

  2. ヘッダ(header)

  3. コンテンツ

  4. サブ

(テーマによって配置は変わってきます)

特に私の場合は公式テーマのヘッダをそのまま用いるのではなく、少し改良したヘッダを使っています。詳しくはこちら参照↓

wakaba-mafin.hatenablog.com

そして、今回いじるのはこちら。

f:id:wakaba-mafin:20181126184459j:plain

ヘッダです!

デフォルトのはてなブログの設定だと...

f:id:wakaba-mafin:20181126185410g:plain

スクロールすると、ヘッダはこのように上の彼方に消えていってしまいます。

ですが、この記事ではこのヘッダの挙動をこのようにします!

f:id:wakaba-mafin:20181126185154g:plain

つまり、スクロールしてもヘッダは上の部分にとどまり続け必要なブログタイトルとナビゲーションのみを残すという設定です。

では早速、ヘッダをスクロール時にうまく変形できるように設定していきましょう!

スクロール時のヘッダの変形方法

さて、スクロール時のヘッダを変更するにはどのようにすればよいのでしょうか?

それはJavaScriptCSSを組み合わせることにより簡単に達成することができます!

JavaScriptを使ったスクロール時の変形

まずは、JavaScriptを使ってスクロール時にパーツを変形する基本についてご紹介します。

基本的には2つのステップからなります。

  1. JavaScriptでスクロール位置に応じてクラスを割り当てる

  2. CSSでスクロール時に割り当てられたクラスに対してスタイルを設定する

の2つです。

まずはJavaScriptから。

<!-- スクロールクラス -->

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>

<script>
function init() {
    // スクロール判定
    var px_change = 50; // 50pxスクロールでクラス"scrolled"を割り当てる
 
    // スクロール時のイベント処理
    window.addEventListener('scroll', function(e){
        if ( $(window).scrollTop() > px_change ) {
            // 変化するポイントまでスクロールしたらクラスを追加
            $("header").addClass("scrolled");
        } else if ( $("header").hasClass("scrolled") ) {
            // 変化するポイント以前であればクラスを削除
            $("header").removeClass("scrolled");
        }
    });
}
window.onload = init();
</script>

こちらのソースでは、$(window).scrollTop()でスクロールした位置が取り出せるので、それがこちらで決めた閾値(上のソースでは50px)よりも大きいか小さいかで、headerにscrolledというクラスを割り当てるかどうかを判別しています。

これでスクロール時にクラスを割り当てることができましたので、次はスクロール時の挙動をCSSで記述します。基本形はこんな感じ。

header.scrolled{
  〜ここにスクロール時のスタイルを記述する〜
}

スクロール時にはheaderに対してJavaScriptによりscrolledというクラスが割り当てられているので、header.scrolledというセレクタで指定することができます。

以上、こちらの節の内容は以下の記事を参考にさせていただきました。大変勉強になりました。ありがとうございました。

rfs.jp

はてなブログの場合

さて、先ほどの節でJavaScriptを使ってどのようにしてスクロール時にヘッダを変形するのかの基本をご紹介しました。

そこで、ここからは上でご紹介した基本をはてなブログのデザインでどのようにして実現するかをご紹介します。

まずははてなブログのデザインを開いてカスタマイズを選択しましょう!ここです。

f:id:wakaba-mafin:20181111165807p:plain

そして、まずはJavaScriptの記述

カスタマイズのうち、ヘッダを選んでタイトル下の項目に先ほどのJavaScriptを記述します。

f:id:wakaba-mafin:20181126184707j:plain

これでStep.1はOKです。

では、次にStep.2、CSSでスクロール時のスタイルを指定しましょう!

それは先ほどのカスタマイズの項目の一番下のデザインCSSの項目から設定することができます。

f:id:wakaba-mafin:20181126184721p:plain

ここに先ほどのCSS

header.scrolled{
  〜ここにスクロール時のスタイルを記述する〜
}

を記述すればOKです。

たったこれだけで、あなたのはてなブログをスクロール時に自在に変化させることができるようになります!

例:私の場合

というわけで私、若葉の技術メモの場合、どのように設定しているのかをご紹介します!

まずはJavaScript。上とご紹介したソースと全く同じで

<!-- スクロールクラス -->

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>

<script>
function init() {
    // スクロール判定
    var px_change = 50; // 50pxスクロールでクラス"scrolled"を割り当てる
 
    // スクロール時のイベント処理
    window.addEventListener('scroll', function(e){
        if ( $(window).scrollTop() > px_change ) {
            // 変化するポイントまでスクロールしたらクラスを追加
            $("header").addClass("scrolled");
        } else if ( $("header").hasClass("scrolled") ) {
            // 変化するポイント以前であればクラスを削除
            $("header").removeClass("scrolled");
        }
    });
}
window.onload = init();
</script>

です。続いてCSS

まずはスクロールされていないデフォルトの設定。

/* ヘッダ(固定部分) */
header#blog-title{
  position: fixed;
  background: #fff;
  width: 900px;
  z-index: 99;
}
/* 固定したヘッダの分だけメインの記事を下げる */
#top-editarea{
  padding-bottom: 220px;
}

最初の部分でヘッダを固定しています。なぜかというと、これはスクロール時でも画面の一番上で固定しておきたいからデフォルトではposition: fixedにしています。その他は背景色やその幅、あとは表示する順番の指定というところです。

そして、続く部分ではヘッダを固定してしまっているので、その下の部分(例えばコンテンツの部分)が、ヘッダの分だけ上に詰まってしまうことになり、記事とヘッダが部分的に重なってしまいます。そこで、ヘッダの部分が記述されている部分(※)のpaddingを変更することにより、ヘッダの分だけヘッダ以降の部分を引き下げています

私の場合は はてなブログのヘッダをノート風にする方法! - 若葉の技術メモ で独自のヘッダを作成しています。ですので、デフォルトのヘッダのままの方はもしかするとセレクタを変更する必要があるかもしれません。後日検証します)

続いて、スクロール時の設定。

/* スクロール時のヘッダの状態(ここから) */ 
header.scrolled h1#title{
  font-size: 20pt;
}
header.scrolled ul#note-header{
  display: none;
}
header.scrolled h2{
  display: none;
}

私の場合、headerは

f:id:wakaba-mafin:20181126184750j:plain

のようになっています。ですので、スクロール時にはノートの最上段の部分(ul#note-header)とブログの説明部分(h2)をスクロール時には邪魔なので消すことにしました。

以上の設定により、私、若葉の技術メモはこの通り。

f:id:wakaba-mafin:20181126185154g:plain

スクロール時には無駄な部分を省いた上で、ブログタイトルとナビゲーションのみを残すことができました!

まとめ

というわけで、今回の記事では、「はてなブログのデザインを変えたいな」と考えている方向けにヘッダをスクロール時に変化する方法をご紹介しました!

スクロール時の変化は、実はというと

  1. JavaScriptの簡単な記述

  2. CSSの設定

という2つの簡単な手順で達成することができてしまいます!

ぜひ、今回の内容がはてなブログのデザインを初めて変えてみようと考えている方の参考になれば嬉しいです。

間違いのご指摘やご意見等ございましたら、コメントのほどよろしくお願いします。ご質問も歓迎です!ぜひ、ちょっとしたことでもコメントお待ちしております!