cssだけでスクロールに追従してくるメニューを作る

#HTML/CSS
writtdden by KashiwakuraKazuki

どうも柏倉です。

ついに、ゼルダの伝説 ティアーズ オブ ザ キングダムが発売しましたね。
私はまだプレイしていませんが、妻と子供が朝5時からきゃっきゃきゃっきゃ楽しそうに遊んでいます。
広い世代で一緒になって楽しめるゲームって素敵ですよねー。

ということで、今回はcssだけでスクロールに追従してくるメニューを作ってみたいと思います。
jqueryを使わなくても実装できるので、便利ですね。

超簡単position: sticky

やり方は超簡単です。
追従させたい要素にposition: sticky;を指定してtopも指定してあげればOKです。
あとはページをスクロールすれば要素がページ上部に来た時に固定されて、スクロールに追従してくれます。


<div class="wrap">
    <div class="left_contents">
        <div class="menu">
            <h2>menu</h2>
            <ul>
                <li>項目1</li>
                <li>項目2</li>
                <li>項目3</li>
                <li>項目4</li>
            </ul>
        </div>
    </div>
    <div class="right_contents">
        <h2>タイトル</h2>
        <div class="main">
            メインコンテンツ
        </div>
    </div>
</div>

こんな感じのHTMLに


.wrap {
  width: 100%;
  height: 100%;
  display: flex;
}

.left_contents {
  width: 20%;
  height: 1200px;
  background-color: #D00;
}

.menu {
  position: -webkit-sticky; /* 任意 */
  position: sticky;
  background-color: lightgreen;
  top: 0;
}

.right_contents {
  float: right;
  width: 80%;
  height: 1200px;
  background-color: rgb(144, 211, 238);
}

h2 {
  margin: 0;
}

こんな感じのCSSを当てれば完成です!
こちらから動いてるものを確認できます。

注意事項

position: sticky;を指定する要素の親要素にはかならず高さを指定してください。
自分が動く範囲が指定されていないとページ上部で固定されなくなります。
あと、floatになっているものも固定できません。

まとめ

いかがでしたでしょうか?
cssだけでも簡単に実装できるので、使いやすいですよね。

過去に下記のような記事も投稿していますので、よかったらご覧ください。
VScodeでメモを取るときにMarkdownって使ってますか?
dockerにamazon linux 2023を入れてnginx + php-fpm + Laravel の環境を作ってみた

最後まで見ていただいてありがとうございました。
また次の記事を投稿したときは宜しくお願いします。

Favorite