搜尋

捲軸樣式 scrollbar

一般來說在瀏覽網頁時,不會刻意去調整「捲軸」樣式,但如果有特殊版面需求,調整捲軸樣式就能產生非常吸睛的效果,這篇教學會介紹 CSS 設定捲軸樣式的語法,例如通用型的 crollbar-color、scrollbar-gutter 和 scrollbar-width 樣式屬性,也會介紹 webkit 開頭的 scrollbar 選擇器,透過選擇器的方式讓捲軸更多變化。

快速導覽:

CSS 教學 - 捲軸樣式 scrollbar

scrollbar-color、scrollbar-gutter、scrollbar-width

scrollbar-colorscrollbar-gutterscrollbar-width 是三種 CSS 原生修改捲軸樣式的樣式屬性,都具有繼承特性,相關說明如下:

注意,目前仍有少部分瀏覽器不支援調整捲軸樣式。

樣式屬性 屬性值 說明
scrollbar-color auto ( 預設 )、color color ( 捲軸拉霸、捲軸底色 ) 捲軸顏色
scrollbar-width auto ( 預設 )、thin ( 細 )、none ( 無 ) 捲軸寬度
scrollbar-gutter auto ( 預設 )、stable ( 右側出現 )、stable both-edges ( 左右都出現 ) 捲軸空間

下方範例呈現這三個樣式屬性的效果,如果要觀察 scrollbar-gutter 效果,需要使用會根據寬度收折的內容才能看出差異。

線上展示:https://codepen.io/oxxo/pen/GgKrdOG

<!-- HTML 程式碼 -->
<h2>scrollbar-color</h2>
<div class="a1">apple<br>banana<br>oxxo<br>orange<br>papaya<br>peach</div>
<div class="a2">apple<br>banana<br>oxxo<br>orange<br>papaya<br>peach</div>
<h2>scrollbar-width</h2>
<div class="b1">apple<br>banana<br>oxxo<br>orange<br>papaya<br>peach</div>
<div class="b2">apple<br>banana<br>oxxo<br>orange<br>papaya<br>peach</div>
<h2>scrollbar-gutterr</h2>  
<div class="c1">STEAM 教育學習網秉持著 STEAM/STEM 的精神,透過一系列免費且高品質的教學與範例,讓所有人都能輕鬆跨入 STEAM 的學習領域。</div>
<div class="c2">STEAM 教育學習網秉持著 STEAM/STEM 的精神,透過一系列免費且高品質的教學與範例,讓所有人都能輕鬆跨入 STEAM 的學習領域。</div>
<div class="c3">STEAM 教育學習網秉持著 STEAM/STEM 的精神,透過一系列免費且高品質的教學與範例,讓所有人都能輕鬆跨入 STEAM 的學習領域。</div>

<!-- CSS 程式碼 -->
<style>
  div {
    width: 200px;
    height: 100px;
    border: 1px solid #000;
    overflow-y: auto;
    margin: 5px;
    float: left;
  }
  h2 {
    margin: 0;
    padding: 20px 5px 5px;
    clear: both;
  }
  .c1, .c2, .c3 {height: 150px;}

  .a1 {scrollbar-color: red orange;}            /* 拉霸紅色,底色橘色 */
  .a2 {scrollbar-color: yellow blue;}           /* 拉霸黃色,底色藍色 */
  .b1 {scrollbar-width: auto;}                  /* 預設寬度 */
  .b2 {scrollbar-width: thin;}                  /* 寬度較細 */
  .c1 {scrollbar-gutter: auto;}                 /* 預設值,在沒有出現捲軸時,左右正常間距 */
  .c2 {scrollbar-gutter: stable;}               /* 預設值,在沒有出現捲軸時,右側保留捲軸空間 */
  div.c3 {scrollbar-gutter: stable both-edges;} /* 預設值,在沒有出現捲軸時,右側保留捲軸空間,左側出現裝訂空間 */
</style>

CSS 教學 - 捲軸樣式 scrollbar - scrollbar-color、scrollbar-gutter、scrollbar-width

webkit scrollbar 選擇器

除了原生控制捲軸的樣式屬性,Chrome 或 Safari 等支援「::-webkit-」選擇器的瀏覽器,很早就已經支援卷軸樣式的調整,而新版的 Edge 目前已經支援 ::-webkit- 選擇器,但 firebox 或 IE 則不支援相關寫法。由於 ::-webkit- 開頭的是「選擇器」,表示組成捲軸的所有元件都是可以選取的元素,也因為是元素,所以呈現時會有「階層」的分別

樣式屬性 說明
::-webkit-scrollbar 捲軸背景 ( 必要樣式,設定後會同步設定其他捲軸元素寬高 )
::-webkit-scrollbar-thumb 捲軸拉霸
::-webkit-scrollbar-track 捲軸拉霸之外的空間
::-webkit-scrollbar-track-piece 捲軸拉霸 + 捲軸拉霸之外的空間
::-webkit-scrollbar-corner 水平與垂直捲軸交會的角落
::-webkit-scrollbar-button 捲軸按鈕 ( Mac 無此元素 )
::-webkit-resizer 捲軸空間 ( Mac 無此元素 )

CSS 教學 - 捲軸樣式 scrollbar - webkit scrollbar 選擇器

下方範例使用六個 div 呈現不同的捲軸樣式,第一個是預設值,接下來每個都會額外增加 ::-webkit- 選擇器選取特定捲軸元素調整樣式。

線上展示:https://codepen.io/oxxo/pen/pvzRKmd

<!-- HTML 程式碼 -->
<div>apple12345678987654321<br>banana<br>oxxo<br>orange<br>papaya<br>peach<br>grape</div>
<h3>預設</h3>
  
<div class="a1">apple12345678987654321<br>banana<br>oxxo<br>orange<br>papaya<br>peach<br>grape</div>
<h3>::-webkit-scrollbar<br>::-webkit-scrollbar-thumb</h3>

<div class="a2">apple12345678987654321<br>banana<br>oxxo<br>orange<br>papaya<br>peach<br>grape</div>
<h3>::-webkit-scrollbar<br>::-webkit-scrollbar-thumb 加上圓角半徑<br>::-webkit-scrollbar-track</h3>

<div class="a3">apple12345678987654321<br>banana<br>oxxo<br>orange<br>papaya<br>peach<br>grape</div>
<h3>::-webkit-scrollbar<br>::-webkit-scrollbar-thumb<br>::-webkit-scrollbar-track 加上圓角半徑<br>::-webkit-scrollbar-track-piece</h3>

<div class="a4">apple12345678987654321<br>banana<br>oxxo<br>orange<br>papaya<br>peach<br>grape</div>
<h3>::-webkit-scrollbar<br>::-webkit-scrollbar-thumb<br>::-webkit-scrollbar-track<br>::-webkit-scrollbar-track-piece 不同圓角半徑</h3>

<div class="a5">apple12345678987654321<br>banana<br>oxxo<br>orange<br>papaya<br>peach<br>grape</div>
<h3>::-webkit-scrollbar<br>::-webkit-scrollbar-thumb<br>::-webkit-scrollbar-track<br>::-webkit-scrollbar-track-piece<br>::-webkit-scrollbar-corner</h3>



<!-- CSS 程式碼 -->
<style>
  div {
    width: 150px;
    height: 150px;
    border: 1px solid #000;
    overflow: scroll;
    margin: 5px;
    resize: both;
  }
  h3 {
    margin: 0;
    padding: 20px 10px;
    font-size:15px;
    float: left;
  }
  div {
    float: left;
    clear: both;
    margin: 20px 0 0 20px;
  }
  div:last-of-type {margin-bottom: 50px;}

  /* 捲軸背景綠色,垂直捲軸寬度 40px,水平捲軸高度 20px */
  div[class]::-webkit-scrollbar {
    width: 40px;
    height: 20px;
    background: green;
  }

  /* 捲軸拉霸紅色 */
  div[class]::-webkit-scrollbar-thumb {background: red;}

  /* a2~a5 拉霸半徑 20px */
  .a2::-webkit-scrollbar-thumb,
  .a3::-webkit-scrollbar-thumb,
  .a4::-webkit-scrollbar-thumb,
  .a5::-webkit-scrollbar-thumb{
    border-radius: 20px;
  }

  /* a2~a5 拉霸之外的顏色 orange */
  .a2::-webkit-scrollbar-track, 
  .a3::-webkit-scrollbar-track,
  .a4::-webkit-scrollbar-track,
  .a5::-webkit-scrollbar-track{
    background: orange;
  }

  /* a3~a5 捲軸之上的底色 cyan */
  .a3::-webkit-scrollbar-track-piece,
  .a4::-webkit-scrollbar-track-piece,
  .a5::-webkit-scrollbar-track-piece{
    background: cyan;
  }

  /* a3~a5 捲軸之上的底色圓角半徑 20px */
  .a3::-webkit-scrollbar-track-piece,
  .a4::-webkit-scrollbar-track-piece,
  .a5::-webkit-scrollbar-track-piece{
    border-radius: 20px;
  }

  /* a2~a5 拉霸之外的區塊圓角半徑 10px */
  .a4::-webkit-scrollbar-track,
  .a5::-webkit-scrollbar-track {
    border-radius: 10px;
  }

  /* a5 交會角落黑色 */
  .a5::-webkit-scrollbar-corner {
    background: black;
  }
</style>

CSS 教學 - 捲軸樣式 scrollbar - webkit scrollbar 選擇器改變捲軸樣式

如果在選擇器後方加上 :horizontal 可單獨控制水平捲軸樣式,加上 :vertical 可單獨控制垂直捲軸樣式,下方範例會讓水平和垂直捲軸呈現不同樣式。

線上展示:https://codepen.io/oxxo/pen/pvzRKXd

<!-- HTML 程式碼 -->
<div>apple0.1.2.3.45.6.7.8.9.8.7.6.5.4.3.2.1.0<br>banana<br>oxxo<br>orange<br>papaya<br>peach<br>grape<br>banana<br>oxxo<br>orange<br>papaya<br>peach<br>grape</div>

<!-- CSS 程式碼 -->
<style>
  div {
    width: 200px;
    height: 200px;
    border: 1px solid #000;
    overflow: scroll;
    margin: 5px;
    resize: both;
  }
  div::-webkit-scrollbar {
    width: 50px;
    height: 20px;
    background: green;
  }

  div::-webkit-scrollbar-thumb:horizontal {background: red;}  /* 水平拉霸 */
  div::-webkit-scrollbar-thumb:vertical {background: #0c0;}   /* 垂直拉霸 */
  div::-webkit-scrollbar-thumb:vertical{border-radius: 25px;} /* 垂直拉霸圓角 */
  div::-webkit-scrollbar-track{background: orange;}
  div::-webkit-scrollbar-track-piece:vertical{background: cyan;}   /* 垂直非拉霸底色 */
  div::-webkit-scrollbar-track-piece:horizontal{background: pink;}  /* 水平非拉霸底色 */
  div::-webkit-scrollbar-track-piece:vertical{border-radius: 25px;} /* 垂直非拉霸圓角 */
  div::-webkit-scrollbar-track:vertical{border-radius: 15px;}       /* 垂直非拉霸下層圓角 */
</style>

CSS 教學 - 捲軸樣式 scrollbar - 在選擇器後方加上 :horizontal 和 :vertical

小結

雖然調整 scrollbar 的用處不多,但對於想要讓版面更有一致性的設計師來說就格外重要,透過這些 CSS 調整拉霸樣式的技巧,就能讓版面更好看,更不受限於瀏覽器預設醜醜的拉霸樣式了。

意見回饋

如果有任何建議或問題,可傳送「意見表單」給我,謝謝~

CSS 教學

基本介紹

認識 CSS 開始使用 CSS CSS 語法規則 CSS 命名原則 CSS 常用樣式屬性

CSS 選擇器

認識 CSS 選擇器 優先順序 ( 權重 ) 樣式繼承與聯集 使用巢狀結構語法 元素選擇器 ID 和 Class 選擇器 屬性選擇器 文件結構選擇器 虛擬類別選擇器 ( 結構 ) 虛擬類別選擇器 ( 類型 ) 虛擬類別選擇器 ( 輸入 ) 虛擬類別選擇器 ( 行為 ) 虛擬類別選擇器 ( 超連結 ) 虛擬類別選擇器 ( 邏輯 ) 虛擬類別選擇器 ( 其他 ) 虛擬元素選擇器 群組與組合選擇器

數值與單位

關鍵字與文字數值 長度與角度單位 位置名稱與時間單位

規則與定義

變數 ( Variables ) 媒體查詢 ( @media ) 容器查詢 ( @container ) 自訂屬性值 ( @property ) 匯入樣式 ( @import ) 分層優先順序 ( @layer )

函式類型

數學計算 文字與清單計數 形狀與線段 路徑 ( path ) 生成內容與引號

顏色與濾鏡

顏色單位 色彩模型 漸層色 影像濾鏡 ( filter ) 背景濾鏡 ( backdrop-filter ) 混合模式 ( mix-blend-mode )

文字與段落

設定字型 ( font-family ) 使用外部字型 定義字型 ( @font-face ) 文字尺寸 文字樣式 ( 常用 ) 文字樣式 ( 其他實用 ) 文字樣式 ( 特殊用途 ) 文字換行 文字空白與 Tab 大小 文字行高與縮排 文字水平與垂直對齊 文字書寫方向 文字自動分欄

元素容器

容器顯示類型 ( display ) 元素 display 對照表 盒子模型 ( Box Model ) 寬度與高度 內邊距 ( padding ) 外邊界 ( margin ) 邊框 ( border ) 邊框圓角 ( border-radius ) 影像邊框 ( border-image ) 輪廓 ( outline ) 內容溢出與裁切 ( overflow ) 內容範圍 ( contain ) 可見性與透明度

背景與陰影

背景顏色 背景圖 ( 定位、尺寸 ) 背景圖 ( 固定、重複 ) 背景圖 ( 多重背景、混合 ) 背景縮寫 ( background ) 容器陰影 ( box-shadow )

清單與表格

清單樣式 清單計數器 定義計數規則 表格基本樣式 表格邊框樣式 表格內容寬度與對齊

基本排版與定位

元素排版方式 浮動 ( float ) 浮動形狀 定位 ( position )

Flexbox 彈性排版

Flexbox 彈性盒子 Flexbox 對齊方式 Flexbox 彈性伸縮

Grid 網格排版

Grid 網格容器與格線 Grid 網格空間與命名 Grid 網格流向與間距 Grid 排列網格項目 Grid 項目對齊與順序

轉場與動畫

轉場 ( transition ) 轉場觸發事件 動畫 ( animation ) 自訂動畫路徑 ( offset ) 動畫觸發事件 多重動畫的權重與順序

變形、裁切與遮罩

裁切路徑 ( clip-path ) 影像遮罩 ( mask ) 物件填滿方式與定位 轉換函式 ( transform ) 平移、旋轉與縮放 3D 轉換與透視 3D 正多面體

視窗與使用者行為

捲軸樣式 ( scrollbar ) 滑鼠游標圖示 ( cursor ) 滑鼠事件 ( pointer-events ) 使用者選取 ( user-select ) 捲動行為 ( scroll、overscroll )

範例效果

CSS 圓餅圖 CSS 跑馬燈 Google 載入動畫 漸層色的轉場與動畫 電子時鐘數字 不規則形狀動畫