Sticky Sidebar 是一個 JavaScript 外掛插件,大多用於製作有 sticky 效果的側邊欄(可理解為固定式、黏貼式)。支援 jQuery / Zepto,Firefox、Chrome、Safari 和 IE9+ 瀏覽器皆有兼容。
官方網站:Sticky Sidebar ⬆⬇、Github
筆者在工作上很常使用這個效果,最常見的使用範例如:Medium 文章頁左側邊欄
當閱讀文章時,頁面向下滾動,側邊欄會固定在同一個位置(高度),方便你隨時使用 Follow、拍手、收藏...等等功能,不需要再往上尋找側邊欄,非常實用!
首先,請到 cdnjs 載入 3.3.1 版的 sticky-sidebar(目前 cdnjs 提供到 3.3.1,Github 上最新版是 3.3.4)
<!-- sticky-sidebar -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/sticky-sidebar/3.3.1/sticky-sidebar.min.js"></script>
或是到官方 Github 下載最新 3.3.4 版的 sticky-sidebar.js,並載入到專案 body 的最底部。
<!-- sticky-sidebar -->
<script type="text/javascript" src="js/sticky-sidebar.js"></script>
npm install sticky-sidebar
bower install sticky-sidebar
使用 sticky-sidebar 的第一步,需要先創立一個基本結構,一定要有三個區塊:
main-content,用來指定頁面滑動到 main-content 就開始固定住 sidebar
sidebar
content
<div id="main-content" class="main">
    <div id="sidebar" class="sidebar">
        <div class="sidebar__inner">
            側邊欄內容
        </div>
    </div>
    <div id="content" class="content">
        文章內容
    </div>
</div>
創立好後就可以為它添加上 JavaScript 和參數設定:
<script type="text/javascript">
    var sidebar = new StickySidebar('#sidebar', { // 要固定的側邊欄
        containerSelector: '#main-content', // 側邊欄外面的區塊
        innerWrapperSelector: '.sidebar__inner',
        topSpacing: 20, // 距離頂部 20px,可理解成 padding-top:20px
        bottomSpacing: 20 // 距離底部 20px,可理解成 padding-bottom:20px
    });
</script>
以上步驟就可以擁有一個 sticky sidebar 功能了!
雖然功能完善了,但別忘了還需要加上 css 才能有視覺效果,這邊提供一些基本的 css 樣式:
* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
body {
  font-family: Arial, "微軟正黑體";
  margin: 0;
  padding: 0;
}
#main-content {
  margin: 20px 10px;
}
#content {
  float: right;
  border: 1px solid #aaaaaa;
  padding: 15px;
  margin-left: 15px;
  min-height: 2000px;
  color: #aaaaaa;
  width: calc(100% - 215px);
}
#sidebar {
  float: left;
  width: 200px;
  color: #333333;
  will-change: min-height;
}
#sidebar .sidebar__inner {
  border: 1px solid #333333;
  padding: 10px;
  position: relative;
  transform: translate(0, 0);
  transform: translate3d(0, 0, 0);
  will-change: position, transform;
}
.clearfix:after {
  display: block;
  content: "";
  clear: both;
}
sticky sidebar 有個怪癖是無法使用 Flex 來排版,必須使用 float。
筆者試過幾次都會跑版,最後只好乖乖回歸 float 了。゚(゚´ω`゚)゚。
main-content 記得要加上 clearfix 喔!
以上的完整範例可以看筆者的 Codepen(請滾動捲軸)
sticky sidebar 不限於製作側邊欄,也可以拿來做固定在上方的導覽列,類似 position: sticky 的效果,關於 Position 的用法可以看這篇文章:Chris - 前端新手村 Position 定位
馬拉松終於到了倒數第二天!看到數字來到 Day 29 那說不出的感動啊。゚ヽ(゚´Д`)ノ゚。
每天邊上班邊煩惱鐵人賽文章的生活,終於要告一段落,各位戰友們明天見~(揮手