在一般浏览器中,当内容超出容器时,如果不是overflow:hidden,通常都会出现滚动条,由于滚动条并不是浮在布局内容之上,所以通常会带来两个问题:

1,容器内部内容宽度固定,恰好撑满,此时出现滚动条会把内容挤到下一行(如图1.gif);

.container{

width:300px;

height:200px;

background-color:#efefef;

overflow-y:hidden;

overflow-x:hidden;

padding:10px;

}

.container:hover{

overflow-y:auto;

}

.container div{

display:inline-block;

margin-right:5px;

width:92px;

height:300px;

background-color:#777;

}

dda30aca4d1a

1.gif

2,容器内容百分比计算,自适应宽度,鼠标经过出现滚动条,鼠标离开滚动条消失,会出现中间内容晃动(如图2.gif)

注:相对于上面的变化部分,仅是将内部div宽度设为百分比自适应

.container div{

width:calc(100% - 6px);

}

dda30aca4d1a

2.gif

那么我们如何来解决这两个问题呢?

我门可以在DOM布局中做些修改,在container内部再添加一层class="inner-container"的容器,并让其宽度=width(container)+width(scroller),如此便不会在出现滚动条的时候将内容挤下去了,代码如下

.container{

width:300px;

height:200px;

background-color:#efefef;

overflow-y:hidden;

overflow-x:hidden;

white-wrap:nowrap;

padding:10px;

}

.container:hover{

overflow-y:auto;

}

.container div div{

display:inline-block;

margin-right:5px;

width:92px;

height:300px;

background-color:#777;

}

/*添加部分:一般ie中的滚动条宽度是24px*/

.inner-container{

width:calc(100% + 24px);

}

原理即是,让包裹子元素内部容器inner-container比外部容器container 的宽度大于一个滚动条宽度,这样即使滚动条出现也不会影响子元素。

一般来说windows下IE的滚动条宽度为24px,所以加上24px即可,如果是在谷歌中既可以设置滚动条宽度,或者设置overflow:overlay 也可(不过这个属性在IE中不兼容)

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐