目录

  • 1.Overflow基本属性
  • 可能的值
  • 2.Overflow与滚动条
  • body/html与滚动条:
  • body/html与滚动条:JS与滚动高度
  • 滚动条的宽度机制
  • overflow:auto的潜在布局隐患:
  • 水平居中跳动问题的修复
  • 3.Overflow与块状格式上下文
  • 4.Overflow与absolute绝对定位

1.Overflow基本属性

可能的值


描述

visible

默认值。内容不会被修剪,会呈现在元素框之外。

hidden

内容会被修剪,并且其余内容是不可见的。

scroll

内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。

auto

如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。

inherit

规定应该从父元素继承 overflow 属性的值。

overflow-x和overflow-y(IE8+)

overflow-x 水平方向

属性

表现

overflow-x:hidden

x方向被隐藏,y方向出现了滚动条

overflow-y:hidden

如果overflow-x和overflow-y值相同,则等同于overflow;

如果overflow-x和overflow-y值不同,且其中一个属性值被赋予visible,而另外一个属性值被赋予hidden,scroll或者auto,visible会被重置为auto;

如何让overflow起作用的前提:

1.非display:inline水平

2.对应方位的尺寸限制。width/height/max-width/max-height/absolute拉伸

3.对于单元格td等,还需要table为table-layout:fixed状态才行

2.Overflow与滚动条

滚动条出现的条件

1.overflow:auto/overflow:scroll-html/textarea

2.超过宽度和长度

body/html与滚动条:

无论什么浏览器,默认滚动条均来自!而不是标签。

IE7-浏览器默认:html {overflow-y:scroll}

IE8+等浏览器默认:html {overflow:auto }

所以,如果我们想要去除页面默认滚动条,只需要:

html {overflow:hidden}

而 没必要把也拉下水:

html,body {overflow:hidden}

body/html与滚动条:JS与滚动高度

Chrome浏览器是:document.body.scrollTop;

其他浏览器是:document.documentElement.scrollTop;

目前,2者不会同时存在,因此,坊间流行这类写法:

var st=document.body.scrollTop+document.documentElement.scrollTop;

不建议采用上面的写法,建议使用:

var st=document.body.scrollTop || document.documentElement.scrollTop;

滚动条的宽度机制

一句话:滚动条会占用容器的可用宽度或高度。

IE7+/Chrome/FireFox(win7)---均是17px

overflow:auto的潜在布局隐患:

滚动条会占用容器尺寸,原本和谐的布局,滚动条出现后可能挂掉

水平居中跳动问题的修复

1.html {overflow-y:scroll}

2..container {padding-left:calc(100vw-100%);}

100vw--浏览器宽度;100%--可用内容宽度

3.Overflow与块状格式上下文

---清除浮动,自适应布局

BFC:(block formatting context)--"块级格式化上下文"

页面之结界,内部元素再怎么翻云覆雨都不会影响外部

overflow与BFC


描述

visible

默认值。内容不会被修剪,会呈现在元素框之外。,不支持

hidden

内容会被修剪,并且其余内容是不可见的。支持

scroll

内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。支持

auto

如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。支持

inherit

规定应该从父元素继承 overflow 属性的值。

1.清除浮动影响

2.避免margin穿透问题

3.两栏自适应布局

左浮动,右overflow

4.Overflow与absolute绝对定位

隐藏失效与滚动固定

遇到内部元素absolute定位时,overflow:hidden失效,overflow滚动失效

失效原因:绝对定位元素不总是被父级overflow属性剪裁,尤其当overflow在绝对定位元素及其包含块之间的时候。

包含块指:含position:relvative/absolute/fixed声明的父级元素,没有则body元素

如何避免失效:

1.overflow元素自身为包含块

2.overflow元素的子元素为包含块

3.任何合法transform声明当做包含块

5.resize

resize声明要想起作用,元素的overflow属性值不能是visible