はてなブログでサイドバーに設置した目次や広告バナーを固定して表示(スクロールに合わせて追従)させたい! JavaScriptを使わずにCSSだけでなんとかしたい。
参考になるブログ・Webサイト
「display:flex」と「position:sticky」を使えばいいはずなのに、なぜかCSSが効かない。
どうやら、ブログ記事の高さに対してサイドバー領域の高さが足りないのが原因らしい。
参考になるブログ・Webサイト
サイドバー領域(id="box2-inner")は、一番下のサイドバー項目(モジュール)までの高さしかないので、記事と同じ高さにすると(height:100%)うまくいくのでは!
それだけではダメだったので、いろいろ調整して最終的に次のようになりました。
(デザイン→カスタマイズ→「デザインCSS」にコードを入力)
CSS
/* contentとcontent-innerの両方をフレックスボックスに */
#content,
#content-inner {
display: flex !important;
}
/* サイドバー領域の高さを100%に */
#box2-inner {
height: 100%;
}
/* 一番下のサイドバー項目を固定 */
.hatena-module:last-of-type {
position: sticky;
top: 100px;
}
/* サイドバー全体の位置を調整 */
#box2 {
position: relative;
left: 50px;
}
応用として、サイドバー項目が全部で5個あったら「nth-of-type」で上から4番目と5番目を固定することもできます(位置はそれぞれで調整します)。
CSS
.hatena-module:nth-of-type(4) {
position: sticky;
top: 100px;
}
.hatena-module:nth-of-type(5) {
position: sticky;
top: 400px;
}
デザインテーマによっては動かないかもしれません(このブログはMinimalismです)。
最後に、自分のブログでできないのは悔しいので、何度もチャレンジしてやっと動くようになったときは、あきらめないでよかったとうれしい気持ちになりました。