
配圖源自 Freepik
一、什么時候會出現(xiàn)滾動條?
我們知道,默認(rèn)情況下,當(dāng)一個元素的內(nèi)容大小超過了所在容器的空間大小時,會產(chǎn)生溢出效果,而且溢出部分的內(nèi)容是可見的。
在 CSS 中,可以使用 overflow 屬性對溢出內(nèi)容做控制,它是 overflow-x 和 overflow-y 的簡寫屬性。其中 overflow 產(chǎn)生效果的前提是:
元素所在的塊級容器指定了高度(設(shè)置
height或max-height)或?qū)?white-space設(shè)為nowrap。
取值
| 屬性值 | 描述 |
|---|---|
visibile |
默認(rèn)值,內(nèi)容不會被修剪,會呈現(xiàn)在容器之外。 |
hidden |
內(nèi)容會被修剪,并且溢出內(nèi)容不可見。 |
scroll |
內(nèi)容會被修剪,瀏覽器會顯示滾動條,滾動可查看溢出內(nèi)容。 |
auto |
由瀏覽器定奪,如果內(nèi)容被修剪,就會顯示滾動條。 |
overlay |
行為與 auto 相同,但滾動條繪制在內(nèi)容之上而不是占用空間。僅被基于 WebKit 內(nèi)核的瀏覽器所支持。 |
clip |
行為與 hidden 相同,區(qū)別在于它無法通過 DOM API 使得元素滾動(新特性兼容性較差)。 |
由于 overflow 是簡寫形式,按照規(guī)范:
- 如果指定一個值時,
overflow-x和overflow-y都應(yīng)用相同的值。 - 如果指定兩個值時,第一個值應(yīng)用于
overflow-x,第二個應(yīng)用于overflow-y。
但是總有不遵循規(guī)范的家伙,在 Firefox 63 之前,指定兩個值時,剛好與規(guī)范相反,前者作用于
overflow-y,后者作用于overflow-x。在后續(xù)新版本中順序已經(jīng)調(diào)整過來,如規(guī)范一般。因此,當(dāng)overflow-x和overflow-y需指定不同的值時,不建議使用簡寫形式,應(yīng)分別設(shè)置為好。
注意點
- 當(dāng)一個軸設(shè)置了非
visibile的值,即使另外一個軸指定為visibile,它的行為也會變成auto的效果。- 當(dāng)
overflow指定為非visibile的值,該容器會形成塊級格式化上下文(Block Formatting Context,BFC)。- 盡管
overflow: hidden可以隱藏溢出內(nèi)容,但使用 Element.scrollTop 仍可以用來滾動元素。目前有一個兼容性不好的新特性clip倒是可以解決這種通過 DOM API 滾動的問題。
關(guān)于更多 clip 內(nèi)容,請看文章。
二、如何隱藏滾動條?
在不同瀏覽器中,隱藏的方式還有點不同,只要在所在的塊級容器中,添加以下樣式即可。
Chrome、Safari 等基于 WebKit(Blink)內(nèi)核的瀏覽器
它使用到 ::-webkit-scrollbar 偽元素,更多請看。
.container::-webkit-scrollbar {
display: none;
width: 0;
height: 0;
color: transparent;
}
FireFox 瀏覽器
使用到標(biāo)準(zhǔn)的 scrollbar-width 屬性,更多請看。
.container {
scrollbar-width: none;
}
IE 瀏覽器
這貨這樣處理:
.container {
-ms-overflow-style: none; /* IE 10+ */
}
因此,匯總起來如下兼容處理:
.container {
scrollbar-width: none;
-ms-overflow-style: none;
}
.container::-webkit-scrollbar {
display: none;
width: 0;
height: 0;
color: transparent;
}
其他
關(guān)于微信小程序隱藏 <scroll-view> 滾動條(我暫時未遇到這種需求,懶得去實測了),請看這兩篇文章:
The end.