值 |
语义 |
visible |
默认(超出父元素部分显示) |
hidden |
隐藏(超出父元素部分隐藏) |
scroll |
滚动条X,Y(父元素出现滚动条无论是否超出) |
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
缺失现象
- 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. 水平居中跳动问题
一般网页制作采用水平居中,这时候如果出现滚动条则会占用页面宽度,auto计算的值就会减小。
发生水平跳动现象
解决方法:ie9+
html { overflow : scroll ; }
.container { padding-left : calc( 100vw - 100% ) ; }
.container {
width: 1210px;
color: #666;
padding-left: calc(100vw - 100%);
/* 100vw : 浏览器宽度 ; 100% : 可用内容宽度 */
}
6.自定义滚动条 - webkit
实际开发就用下面几个:
/*血槽宽度*/
::-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. 触发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` 属性,否则无法实现效果;
<button style="width:200px;white-space:nowrap;textoverflow:ellipsis;overflow:hidden;">
我是一个按钮,宽度仅200像素
</button>
妙用
1. overflow-visible 妙用
2. 失效妙用
疑问?
文章中涉及效果示例
overflow 失效、overflow妙用、两栏布局
锚点选项卡示例1
target实现动画选项卡示例2
target实现动画选项卡示例3
target天气预报示例
参考
锚点定位机制-应用-问题 张鑫旭
慕课网 张鑫旭 深入理解overflow