| 值 | 語(yǔ)義 |
|---|---|
visible |
默認(rèn)(超出父元素部分顯示) |
hidden |
隱藏(超出父元素部分隱藏) |
scroll |
滾動(dòng)條X,Y(父元素出現(xiàn)滾動(dòng)條無(wú)論是否超出) |
auto |
智能模式 未超出父元素不顯示滾動(dòng)條,反相同理 |
inherit |
ie8+ 一般不使用,有瀏覽器兼容問(wèn)題 |
overflow-x 、overflow-y ie8+(重要)
1. 情況1
`overflow-x :hidden;`
`overflow-y :hidden;`
如果 `overflow-x`與 `overflow-y` 的值相同 = `overflow`
上面的代碼等同于 : `overflow:hidden;`
2. 情況2
`overflow-x :visible;`
`overflow-y :hidden || auto || scroll;`
如果 `overflow-x` 與 `overflow-y` 任意一項(xiàng)值是 = `visible`;
另一項(xiàng)的值 = `hidden || auto || scroll`
那么值為 `visible` 這一項(xiàng)的值將被重置為 `auto`
上面的代碼等同于 :
` overflow-x :auto;`
` overflow-y :hidden || auto || scroll;`
兼容性
| 生效 | 注意 |
|---|---|
非display:inline水平 | |
對(duì)應(yīng)方位的尺寸限制 width 、height、max-width、max-height、absoule
|
ie7下max-width與max-height bug
|
單元格td等,需要table為table-layout:fixed
|
body/html與滾動(dòng)條
1. 無(wú)論什么瀏覽器,默認(rèn)的滾動(dòng)條均來(lái)自<html>而不是<body>
IE7-瀏覽器默認(rèn):`html { overflow-y : scroll ; }`
IE8+瀏覽器默認(rèn):`html { overflow-y : auto ; }`
所以,如果想要去除頁(yè)面默認(rèn)滾動(dòng)條,只需要: html { overflow : hidden ; }
而沒必要把<body>也拉下水:html , **body** { overflow : hidden ; }
2.js與滾動(dòng)高度
- Chrome瀏覽器:`document.body.scrollTop`
- 其它瀏覽器:`document.documentElement.scrollTop`
- 建議寫法:`document.documentElement.scrollTop || document.body.scrollTop;`
3. overflow 的 padding-bottom 缺失現(xiàn)象
- Chrome瀏覽器:有
- 其它瀏覽器:無(wú)
- 從而導(dǎo)致了`scrollHeight` 元素內(nèi)容高度不同

4. 滾動(dòng)條的寬度 17px
<style type="text/css">
.body{
width: 400px;
overflow:scroll ;
}
.in{*zoom: 1; /*ie7*/}
</style>
<body>
<div class="body">
<div class="in"></div>
</div>
<script type="text/javascript">
var cw = 400- document.getElementsByClassName('in')[0].clientWidth;
console.log(cw); //IE7+、Chrome、FireFox(Win7) cw = 17 !!!
</script>
</body>
5. 水平居中跳動(dòng)問(wèn)題
一般網(wǎng)頁(yè)制作采用水平居中,這時(shí)候如果出現(xiàn)滾動(dòng)條則會(huì)占用頁(yè)面寬度,auto計(jì)算的值就會(huì)減小。
發(fā)生水平跳動(dòng)現(xiàn)象
解決方法:ie9+
html { overflow : scroll ; }
.container { padding-left : calc( 100vw - 100% ) ; }
.container {
width: 1210px;
color: #666;
padding-left: calc(100vw - 100%);
/* 100vw : 瀏覽器寬度 ; 100% : 可用內(nèi)容寬度 */
}
6.自定義滾動(dòng)條 - webkit

實(shí)際開發(fā)就用下面幾個(gè):
/*血槽寬度*/
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
/*拖動(dòng)條*/
::-webkit-scrollbar-thumb {
background-color: rgba(0, 0, 0, .3);
}
/*背景槽*/
::-webkit-scrollbar-track {
background-color: #ddd;
border-radius: 6px;
}
overflow與BFC
1. 觸發(fā)BFC
1. `visible` -
2. `auto*`
3. `scroll*`
4. ` hidden*`
2. 作用
清除浮動(dòng)影響
避免`margin`穿透問(wèn)題
兩欄自適應(yīng)布局
3. overflow失效
原因 :絕對(duì)定位元素不總是被父級(jí)`overflow`屬性裁剪,尤其當(dāng)`overflow`在**絕對(duì)定位元素及其包含塊**之間的時(shí)候
包含塊 : 含 position:relative、absolute、fixed聲明的父級(jí)元素、沒有則body元素
4. 如何避免失效
overflow 元素自身為包含塊;
overflow 元素的子元素為包含塊;
任意合法`transform`聲明當(dāng)作包含塊(**new**);

<body>
<div style="overflow: hidden; margin-top:20px ; width: 200px; height: 300px;border: 5px solid saddlebrown;">
[站外圖片上傳中……(1)]
</div>
</body>
圖片設(shè)置 position: absolute; 父級(jí)元素是body 所以 overflow失效
5. resize拉伸
`ccs3`有個(gè)屬性名為`resize`,可以拉伸元素尺寸:
`resize:both` 水平垂直兩邊拉;
`resize:horizontal` 只有水平方向拉;
`resize:vertical` 只有垂直方向拉;
但是,此聲明要想其作用,元素的`overflow`屬性值不能是 `**visible**`
6. 拖拽的默認(rèn)像素是 17px 與scroll邊框一致
7. ellipsis文字溢出點(diǎn)點(diǎn)點(diǎn)省略
必須是 `overflow:hidden` 屬性,否則無(wú)法實(shí)現(xiàn)效果;
<button style="width:200px;white-space:nowrap;textoverflow:ellipsis;overflow:hidden;">
我是一個(gè)按鈕,寬度僅200像素
</button>
妙用
1. overflow-visible 妙用

2. 失效妙用

疑問(wèn)?


文章中涉及效果示例
overflow 失效、overflow妙用、兩欄布局
錨點(diǎn)選項(xiàng)卡示例1
target實(shí)現(xiàn)動(dòng)畫選項(xiàng)卡示例2
target實(shí)現(xiàn)動(dòng)畫選項(xiàng)卡示例3
target天氣預(yù)報(bào)示例
參考
錨點(diǎn)定位機(jī)制-應(yīng)用-問(wèn)題 張?chǎng)涡?/a>
慕課網(wǎng) 張?chǎng)涡?深入理解overflow