浪人のサムライ

TOP

ブログでよく見られる、サイドバー固定の方法です。完成形はこちら。

ポイント解説

親要素にdisplay:flexをして、サイドバーにposition: sticky;を書きます。heightを100%にして、実現します。

HTMLは以下になります。

HTML


<article class="container">

<div class="wrap">

<div class="item">
<figure><img src="images/compo.JPG" alt=""></figure>
<p>ここに文章が入ります。ここに文章が入ります。ここに文章が入ります。ここに文章が入ります。ここに文章が入ります。</p>
</div>

<div class="item">
<figure><img src="images/sakura.JPG" alt=""></figure>
<p>ここに文章が入ります。ここに文章が入ります。ここに文章が入ります。ここに文章が入ります。ここに文章が入ります。</p>
</div>

<div class="item">
<figure><img src="images/tou.JPG" alt=""></figure>
<p>ここに文章が入ります。ここに文章が入ります。ここに文章が入ります。ここに文章が入ります。ここに文章が入ります。</p>
</div>
</div>

<aside class="side-bar">

<div class="box">
<figure><img src="images/cloud.JPG" alt=""></figure>
<p>サイドバー</p>
</div>

</aside>

</article>


親要素はcontainerです。この中に、コンテンツ部分のwrap、サイドバーのside-barがあります。itemで画像と文字を囲んでいます。ヘッダやフッタのHTMLは含まれておりません。

CSSは以下になります。


@media (min-width: 768px) {

.container{
margin-top: 150px;
display: flex;
justify-content: space-between;
gap: 1rem;
max-width: 70%;
margin-left: auto;
margin-right: auto;
}

.wrap{
width: 80%;
}

.side-bar{
width: 40%;
position: sticky;
top:120px;
height: 100%;
}

}

親要素(container)にdisplay:flexを書き、コンテンツとサイドバーを横並びにします。widthなどは、自由で構いません。ちなみに、margin-topは、必須ではありません。

ヘッダを固定しているので、コンテンツが被ります。意図的に、marginを設定しています。wrapとside-barのwidthも自由で構いません。

ヘッダとフッタのCSSは省いています。

ちなみに、メディアクエリで対応しています。理由は、768px以上から、サイドバーを右側に置きたいので、メディアクエリで対応しました。この方が実用性があると、思っています。

side-barにposition: stickyを書き、topでどの位置にするか、設定します。ここでは120pxにしています。heightを書かないと固定されません。

さいごに

ブログで割と、目にする機会がありますね。多くは、ソーシャルボタンや、アフィリエイトをしているのであれば、広告を固定することもありますね。

当サイトはトップページのみ、プロフィールを固定しています。他ページでは、しておりません。

興味のある人は、ご参考に。バックアップを取ってから、対応しましょう。