サイドバーをCSSだけでスクロールせず、画面内に固定させる方法です。
環境
HTML5
Bootstrap4.5.3
実装方法
position: sticky を利用します。
下記はサンプルです。
<!-- HTML --> <div class="container-fluid"> <div class="row"> <div id="sidebar" class="col p-0 min-vh-100"> <div class="sidebar-item-wrapper"> <div class="menu-button"> <a href="#">menu1</a> </div> <div class="menu-button"> <a href="#">menu2</a> </div> <div class="menu-button"> <a href="#">menu2</a> </div> </div> </div> </div> </div>
/* CSS */ #sidebar { background: #ECEBC2; flex: 0 0 250px; -ms-flex: 0 0 250px; } .sidebar-item-wrapper { margin-bottom: 0; top: 0; position: sticky; z-index: 1; } .menu-button { background: #FFFFFF; display: block; font-size: 16px; height: 55px; padding:10px 20px; text-decoration: none; }
注意点は下記2点です。
- position: sticky を指定するブロックは子要素として指定すること
- position: stickyを指定した要素にはtopプロパティを必ず指定すること
position: stickyは、stickyを指定したブロックの親要素を起点として固定されます。また、固定させるためにstickyを指定した要素に対してtopプロパティの指定が必要となります。
参考記事
https://programming-beginner-zeroichi.jp/articles/171ed-content