值 |
語義 |
visible |
默認(超出父元素部分顯示) |
hidden |
隱藏(超出父元素部分隱藏) |
scroll |
滾動條X,Y(父元素出現(xiàn)滾動條無論是否超出) |
auto |
智能模式 未超出父元素不顯示滾動條棚赔,反相同理 |
inherit |
ie8+ 一般不使用媒惕,有瀏覽器兼容問題 |
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` 任意一項值是 = `visible`;
另一項的值 = `hidden || auto || scroll`
那么值為 `visible` 這一項的值將被重置為 `auto`
上面的代碼等同于 :
` overflow-x :auto;`
` overflow-y :hidden || auto || scroll;`
兼容性
生效 |
注意 |
非display:inline 水平 |
對應方位的尺寸限制 width 、height 妒蔚、max-width 穿挨、max-height 、absoule
|
ie7下max-width 與max-height bug
|
單元格td 等肴盏,需要table 為table-layout:fixed
|
body/html與滾動條
1. 無論什么瀏覽器絮蒿,默認的滾動條均來自<html>
而不是<body>
IE7-瀏覽器默認:`html { overflow-y : scroll ; }`
IE8+瀏覽器默認:`html { overflow-y : auto ; }`
所以,如果想要去除頁面默認滾動條叁鉴,只需要: html { overflow : hidden ; }
而沒必要把<body>也拉下水:html , **body** { overflow : hidden ; }
2.js與滾動高度
- Chrome瀏覽器:`document.body.scrollTop`
- 其它瀏覽器:`document.documentElement.scrollTop`
- 建議寫法:`document.documentElement.scrollTop || document.body.scrollTop;`
3. overflow
的 padding-bottom
缺失現(xiàn)象
- Chrome瀏覽器:有
- 其它瀏覽器:無
- 從而導致了`scrollHeight` 元素內容高度不同
4. 滾動條的寬度 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. 水平居中跳動問題
一般網(wǎng)頁制作采用水平居中幌墓,這時候如果出現(xiàn)滾動條則會占用頁面寬度但壮,auto計算的值就會減小。
發(fā)生水平跳動現(xiàn)象
解決方法:ie9+
html { overflow : scroll ; }
.container { padding-left : calc( 100vw - 100% ) ; }
.container {
width: 1210px;
color: #666;
padding-left: calc(100vw - 100%);
/* 100vw : 瀏覽器寬度 ; 100% : 可用內容寬度 */
}
6.自定義滾動條 - webkit
實際開發(fā)就用下面幾個:
/*血槽寬度*/
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
/*拖動條*/
::-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. 作用
清除浮動影響
避免`margin`穿透問題
兩欄自適應布局
3. overflow失效
原因 :絕對定位元素不總是被父級`overflow`屬性裁剪常侣,尤其當`overflow`在**絕對定位元素及其包含塊**之間的時候
包含塊 : 含 position:relative蜡饵、absolute、fixed聲明的父級元素胳施、沒有則body元素
4. 如何避免失效
overflow 元素自身為包含塊溯祸;
overflow 元素的子元素為包含塊;
任意合法`transform`聲明當作包含塊(**new**)舞肆;
<body>
<div style="overflow: hidden; margin-top:20px ; width: 200px; height: 300px;border: 5px solid saddlebrown;">
[站外圖片上傳中……(1)]
</div>
</body>
圖片設置 position: absolute; 父級元素是body 所以 overflow失效
5. resize拉伸
`ccs3`有個屬性名為`resize`焦辅,可以拉伸元素尺寸:
`resize:both` 水平垂直兩邊拉;
`resize:horizontal` 只有水平方向拉;
`resize:vertical` 只有垂直方向拉椿胯;
但是筷登,此聲明要想其作用,元素的`overflow`屬性值不能是 `**visible**`
6. 拖拽的默認像素是 17px
與scroll邊框一致
7. ellipsis文字溢出點點點省略
必須是 `overflow:hidden` 屬性哩盲,否則無法實現(xiàn)效果前方;
<button style="width:200px;white-space:nowrap;textoverflow:ellipsis;overflow:hidden;">
我是一個按鈕,寬度僅200像素
</button>
妙用
1. overflow-visible 妙用
2. 失效妙用
疑問廉油?
文章中涉及效果示例
overflow 失效惠险、overflow妙用、兩欄布局
錨點選項卡示例1
target實現(xiàn)動畫選項卡示例2
target實現(xiàn)動畫選項卡示例3
target天氣預報示例
參考
錨點定位機制-應用-問題 張鑫旭
慕課網(wǎng) 張鑫旭 深入理解overflow