阻止因出现滚动条导致页面抖动

现在大多数页面都是采用主体内容水平居中布局

[html]  view plain  copy
  1. <body>  
  2.   <div></div>  
  3. </body>  

[css]  view plain  copy
  1. div{  
  2.   width:1200px;  
  3.   margin:0 auto;  
  4. }  

但是,这种布局存在一个问题。现在的浏览器滚动条默认是overflow:auto类型的,也就是说如果内容高度不足一屏,没有滚动条;如果超出才会出现滚动条。于是,问题来了:

  1. 信息流页面,如新浪微博,是从上往下push渲染的。开始只有头部一些信息加载,此时页面高度有限,没有滚动条;然后,更多内容显示,滚动条出现,占据可用宽度,margin: 0 auto主体元素自然会做偏移——跳动产生。
  2. JS交互,本来默认页面高度不足一屏,结果点击了个“加载更多”,内容超过一屏,滚动条出现,页面主体就会左侧跳动。
  3. 结构类似几个页面通过头部的水平导航刷新切换,结果有的页面有滚动条,有的没有。造成的结果就是,导航怎么跳来跳去!

现在有以下三种方法解决这一问题:

1、让浏览器的垂直滚动条一直显示

[css]  view plain  copy
  1. body { overflow-y: scroll; }  
当然这种方法就会造成即使内容高度不足一屏,浏览器右侧也会显示一条灰色的滚动条,影响用户体验。


2、当内容高度超过一屏时,在浏览器左侧同时加上一个滚动条宽的的padding或margin。

[css]  view plain  copy
  1. .wrap-outer {  
  2.     margin-left: calc(100vw - 100%);  
  3. }  

[css]  view plain  copy
  1. .wrap-outer {  
  2.     padding-left: calc(100vw - 100%);  
  3. }  

注 :   1、 .wrap-outer 指的是居中定宽主体的父级。
2、 calc 是CSS3中的计算,IE10+浏览器支持,IE9浏览器基本支持(不能用在 background-position 上);
3、 100vw 相对于浏览器的 window.innerWidth ,是浏览器的内部宽度,注意, 滚动条宽度也计算在内 !而 100% 是可用宽度,是不含滚动条的宽度。
于是 calc(100vw - 100%) 就是浏览器滚动条的宽度大小(如果有,如果没有滚动条则是 0 )!左右都有一个滚动条宽度(或都是 0 )被占用,主体内容就可以永远居中浏览器啦,从而没有任何跳动!

3、兼容写法

[css]  view plain  copy
  1. html {  
  2.   overflow-x: hidden;  
  3.   overflow-y: auto;  
  4. }  
  5. body {  
  6.   width100vw;  
  7.   overflowhidden;  
  8.   padding-left: calc(100vw - 100%);  
  9. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值