出现原因
页面内容超出高度,浏览器出现滚动条的时候,因为滚动条是占位的,所以页面会被挤压,导致页面内容出现错乱。
解决方案一:新属性 overlay (目前仅chrome支持)
chrome下overflow有个新的属性值overlay,这个属性简直就是为了这个问题而生,他和auto有点像,但是区别就是在触发滚动条时候并不挤压空间。但是非常遗憾,这个属性值目前只有chrome支持。
html {
overflow-y: overlay;
}
解决方案二:margin-right: calc(100% - 100vw)
100vw 相对于浏览器的 window.innerWidth ,是浏览器的内部宽度,注意,滚动条宽度也计算在内!而100%是可用宽度,是不含滚动条的宽度。没有滚动条的时候,相当于margin-right:0,没什么影响;有滚动条的时候就相当于margin-right:-17px(17px就是滚动条的宽度啦),被滚动条占据了17px后,内容再重新往右延伸了17px,效果如同overflow:overlay,很完美,并且兼容性还不错,起码高版本的ie和ff都没问题了。
html {
overflow-y: auto;
overflow-x: hidden;
}
.container {
margin-right: calc(100% - 100vw);
padding: 17px;
}
解决方案三:绝对定位
:root选择器:对于 HTML 来说,:root 表示 元素,除了优先级更高之外,与 html 选择器相同。
html {
overflow-y: scroll; //这是为了兼容ie8,不支持:root, vw
}
:root {
overflow-y: auto;
overflow-x: hidden;
}
:root body {
position: absolute;
}
body {
width: 100vw;
overflow: hidden;
}