小技巧:為滾動條添加樣式來匹配你的UI設計
Chinese (Traditional) (中文(繁體)) translation by Stypstive (you can also view the original English article)
這個小技巧將會引導你來提升滾動條的外觀以達到匹配你UI設計的目的。我們將來看看哪一些WebKit瀏覽器支持這個CSS,另外我們將使用jQuery的fallback來滿足其他瀏覽器的支持。
想要抄個捷徑?
如果正在尋求幫助來為你網站的特定組件添加樣式,那麼你可以從專家那裡找到更快速的解決辦法,Envato有眾多的專家們隨時準備幫助你重新為你添加樣式或者自定義所有種類的網頁組件。



關於瀏覽器的快速筆記
當我們涉及到以WebKit為基礎的瀏覽器的時候,我們本質上是在說Apple的Safari和Google Chrome。他們兩加起來大約佔據了超過40%的全部桌面瀏覽器市場。 對於平板電腦來說,Apple的iPad總是會使用Webkit無論它使用的是任何公司的瀏覽器。 Google同時也添加了Chrome到它的安卓系統以及Chromebooks裡,當然了,這些都是基於Google Chrome的。
看到這些數據以後,我們應該不難想像在不久的將來,滾動條的樣式化一定是很有前景的。
步驟1:一個有滾動條的簡單頁面
在我們可以實際的使用CSS來創建樣式並開始這個教程之前,我們需要一個可以正常工作的樣例;一個擁有滾動條的頁面。通常來說,滾動條在滿足以下條件時可見:
- 文字內容比可見的窗口區域要大(一個滾動條將在右側顯示)。
- 一個包含了足夠文字的
textarea,這樣滾動條也會出現。 - 一個
iframe用來顯示一個不同的頁面。 - 一個
div或者任何其他的區塊元素並且包含了overflow屬性集的。
為了實現這個樣例,我們將使用最後一個選項,這裡是我的最初的結構代碼:
1 |
<div class="container"> |
2 |
|
3 |
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur rhoncus tortor eget orci fringilla non semper magna aliquet. Aliquam convallis elit sem. Proin fringilla fermentum pretium. Phasellus id nisl eu eros convallis eleifend. In hac habitasse platea dictumst. In at felis massa. Maecenas vitae quam non elit porta pellentesque ac in erat. Nullam a ante felis, ullamcorper suscipit felis. Maecenas sit amet nisl mattis ipsum ullamcorper aliquam vitae sed sapien. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p> |
4 |
|
5 |
<p>Sed sed tellus dolor, non lobortis felis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In eget nisl viverra risus feugiat vulputate tempus et leo. Nam metus nibh, tristique non sodales non, interdum et neque. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed imperdiet aliquet vestibulum. Curabitur viverra tortor augue, a aliquet tellus. Vivamus eu felis vel lorem tincidunt imperdiet. Fusce iaculis luctus convallis. Proin adipiscing malesuada enim, et feugiat tortor sagittis eu. Cras convallis felis eu leo tempus et fermentum urna accumsan. In quis metus at metus ultricies fringilla. Maecenas sed lacus aliquam nibh semper dignissim et quis est.</p> |
6 |
|
7 |
<p>Praesent sodales, sapien sit amet congue egestas, sem ligula ornare massa, vitae suscipit felis ligula quis velit. Phasellus lectus massa, sodales ac vulputate ac, pharetra quis lacus. Morbi tempus pretium nisi sed pretium. Pellentesque dictum volutpat vulputate. Fusce dapibus sagittis felis, ut consequat nisi posuere id. Cras elit orci, vehicula in sagittis a, faucibus vitae dui. Nunc non lorem in metus adipiscing adipiscing non a sapien. Sed dictum ultrices nibh in tristique. Nulla dapibus laoreet tincidunt. Sed accumsan erat quis mi luctus porta.</p> |
8 |
|
9 |
<p>Sed mollis justo enim, ut pharetra nunc. Fusce vehicula viverra magna, et fringilla lectus porta quis. Donec eu fermentum mi. Donec congue pellentesque iaculis. Phasellus est leo, cursus eget consectetur in, tristique sit amet tortor. Cras eleifend felis sit amet eros vehicula aliquet. Pellentesque fringilla metus in libero luctus eu condimentum nulla pretium. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam consequat sodales lorem, nec dignissim turpis pharetra et. Nullam commodo hendrerit elementum. Donec porta faucibus ligula non blandit. In ultrices vehicula pretium.</p> |
10 |
|
11 |
<p>Sed ac sagittis sapien. Curabitur varius pellentesque nunc eget molestie. Vivamus in massa arcu, ut auctor tellus. Aliquam convallis lobortis magna, ut posuere odio euismod ac. Vestibulum in enim vitae metus vulputate interdum. Mauris a risus auctor nunc fermentum dapibus. Proin iaculis, nunc ut viverra varius, augue augue porta libero, id viverra nisl elit in mauris. Aenean quis risus ante. Donec bibendum erat a sem vestibulum eu aliquet lectus tincidunt. Vivamus imperdiet congue leo, non ultricies urna sodales sed. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla vitae rhoncus dui. Nunc in nisi in ante imperdiet tincidunt sagittis eu ipsum. Aenean orci justo, faucibus placerat tincidunt vitae, vehicula at libero.</p> |
12 |
|
13 |
</div>
|
這只是一個div以及一大堆虛擬的內容,然後這裡是最開始的CSS,它會設置一些固定的尺寸和橫向及縱向滾動條的觸發器:
1 |
.container { |
2 |
width: 400px; |
3 |
height: 300px; |
4 |
background-color: #DCDCDC; |
5 |
overflow: scroll; /* showing scrollbars */ |
6 |
}
|
你應該會看到一些結果看起來像下面這樣:


步驟2:開始針對Webkit內核瀏覽器的代碼
有一段時間以前(幾年前)CSS偽類元素被從Webkit內核瀏覽器開發出來針對滾動條,正是這樣才帶給了我們根據主題來改變滾動條樣式的可能性。
讓我們開始添加一些樣式,使用-webkit-前綴以及wenkit的自定義滾動條屬性。記得,我將只會演示最基本的CSS屬性來讓你明白原理,更多的解釋你可以看到我包含在了註釋裡。
1 |
::-webkit-scrollbar { |
2 |
width: 15px; |
3 |
} /* this targets the default scrollbar (compulsory) */ |
當這個偽類元素顯示時,WebKit會關閉瀏覽器自帶的滾動條渲染並僅僅使用CSS裡提供的樣式信息。 ——Surfin' Safari
那麼現在我們需要添加一些其他的偽類元素:
1 |
::-webkit-scrollbar-track { |
2 |
background-color: #b46868; |
3 |
} /* the new scrollbar will have a flat appearance with the set background color */ |
4 |
|
5 |
::-webkit-scrollbar-thumb { |
6 |
background-color: rgba(0, 0, 0, 0.2); |
7 |
} /* this will style the thumb, ignoring the track */ |
8 |
|
9 |
::-webkit-scrollbar-button { |
10 |
background-color: #7c2929; |
11 |
} /* optionally, you can style the top and the bottom buttons (left and right for horizontal bars) */ |
12 |
|
13 |
::-webkit-scrollbar-corner { |
14 |
background-color: black; |
15 |
} /* if both the vertical and the horizontal bars appear, then perhaps the right bottom corner also needs to be styled */ |
在添加了這些CSS之後你,你應該可以看到下面的效果(再一次強調,只是在Webkit內核的瀏覽器)。


你猜怎麼樣? IE瀏覽器有它自己的滾動條樣式!
是的——事實上,IE是第一個支持用CSS來為滾動條添加樣式的瀏覽器,這個可以追溯到IE5.5的版本,但是只有顏色可以改變。
這個內容可以被用在今天;看看下面這個單個的IE9屬性,僅供展示。
1 |
body { |
2 |
scrollbar-face-color: #b46868; |
3 |
}
|
我們來看看最終結果:


步驟3:非Webkit瀏覽器的Fallback功能
完成了Webkit的部分,Firefox、IE和Opera也可以來分享這一部分的快樂,對於他們,我們有一個非常漂亮的fallback來實現這個功能,我們需要用到jScrollPane,這個jQuery插件是由Kelvin Luck開發的,而且它會是我們今天的救星。
Kelvin的網站上有很多很好的樣例,但是對於基本的使用來說,我們需要的就是下載jQuery以及這個jScrollPane的文件並將它們導入到頁面中,你可以使用以下方式:
1 |
<!-- this cssfile can be found in the jScrollPane package -->
|
2 |
<link rel="stylesheet" type="text/css" href="jquery.jscrollpane.css" /> |
3 |
|
4 |
<!-- latest jQuery direct from google's CDN -->
|
5 |
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> |
6 |
<!-- the jScrollPane script -->
|
7 |
<script type="text/javascript" src="jquery.jscrollpane.min.js"></script> |
8 |
|
9 |
<!--instantiate after some browser sniffing to rule out webkit browsers-->
|
10 |
<script type="text/javascript"> |
11 |
|
12 |
$(document).ready(function () { |
13 |
if (!$.browser.webkit) { |
14 |
$('.container').jScrollPane(); |
15 |
}
|
16 |
});
|
17 |
|
18 |
</script>
|
19 |
|
20 |
</body>
|
為了做到匹配我們的主題,讓我們打開jquery.jscrollpane.css然後編輯以下幾行,來改變顏色的值(為了增強性能,你可能希望將所有的樣式都放到你自己的文件裡):
1 |
.jspTrack
|
2 |
{
|
3 |
background: #b46868; /* changed from #dde */ |
4 |
position: relative; |
5 |
}
|
6 |
|
7 |
.jspDrag
|
8 |
{
|
9 |
background: rgba(0,0,0,0.2); /* changed from #bbd */ |
10 |
position: relative; |
11 |
top: 0; |
12 |
left: 0; |
13 |
cursor: pointer; |
14 |
}
|
這裡是一個你將要看到的Firefox瀏覽器結果的屏幕截圖:


結語
在線程序諸如Gmail和Google+(以及其他很多的案例)都已經包含了這個想法了,而且如果這個勢頭繼續下去,可能Firefox和IE也會同時提供出他們自己的解決方案。


我希望你很享受這個小技巧,我也很期待看到你能將這個滾動條的設計運用到你自己的項目中去!
更多的資源
- WebKit中的自定義滾動條 由Chris Coyier著
- 滾動條樣式化 在webkit.org上可見
Envato Market上可自定義的滾動條
如果你正在尋找現成的解決辦法,Envato Market提供給你一個集合的滾動條,你可以簡單的將它們插入到你的網站中來達到各種不同的效果。這裡是其中的一些素材:
1. Lazybars - 主題可變的自適應滾動條jQuery插件
Lazybars是一個簡單易用,主題可變的jQuery滾動條插件,你僅僅需要添加一個class名字到任何你網站上可以滾動的元素上即可實現這個滾動條效果。
使用與Lazybars一起綁定的主題,或者使用一些簡單的CSS來創建你自己的主題。



2. Fancy滾動條 - Wordpress
“Fancy Scrollbar – WordPress”是一個你可以允許你在WordPress網站上創建自定義滾動條的插件,它有很多自定義的選項,你可以自定義顏色、特效、滾動延遲、軌道剝離、以及更多其他的參數。



3. 絕好的自定義滾動條
這個絕好的自定義滾動條是一個可以被高度自定義化的滾動條jQuery插件,它可以被用在你的WordPress網站上,擁有了這個插件,你可以自定義你網站的滾動條,並且你可以在你想要的任何地方植入自定義樣式的滾動條並且只需要輸入短代碼即可,甚至是在主題的文件裡。



4. DZS滾動條
DZS滾動條為你的網站提供了一個你可以通過CSS非常簡單的自定義的滾動條,當然這是在其包括的三個皮膚並不能滿足你的情況下。 它同時具有其他高級功能,例如鼠標懸停即滾動,或者鼠標移開即淡出等。而且它與iPhone/iPad兼容。



5. CSS3滾動條樣式
它簡單易用,漂亮且色彩豐富,以CSS3為基礎的滾動條可以簡單的加入到你已有的CSS文件中,即可你就能享受這個新的CSS3滾動條。






