赞
踩
问题描述:当页面突然出现滚动条的时候,页面会突然被挤压,因为滚动条也是需要占位的呀。
解决思路:现在目标就是滚动条出现,但是内容位置不变,依然不动。
1、新属性overlay
chrome下overflow
有个新的属性值overlay
,这个属性简直就是为了这个问题而生,他和auto
有点像,但是区别就是在触发滚动条时候并不挤压空间。但是非常遗憾,这个属性值目前只有chrome支持。
- html {
- overflow-y: overlay;
- }
2、margin-right: calc(100% - 100vw)
100vw
相对于浏览器的window.innerWidth
,是浏览器的内部宽度,注意,滚动条宽度也计算在内!而100%
是可用宽度,是不含滚动条的宽度。没有滚动条的时候,相当于margin-right:0,没什么影响;有滚动条的时候就相当于margin-right:-17px(17px就是滚动条的宽度啦),被滚动条占据了17px后,内容再重新往右延伸了17px,效果如同overflow:overlay,很完美,并且兼容性还不错,起码高版本的ie和ff都没问题了。
- * {
- margin: 0;
- padding: 0;
- }
- html {
- overflow-y: auto;
- overflow-x: hidden;
- }
- .container {
- height: 2000px;
- margin-right: calc(100% - 100vw);
- padding: 17px;
- background-color: #00b83f;
- text-align: right;
- }
3、绝对定位--来自张鑫旭大佬
:root选择器:对于 HTML 来说,:root
表示 <html> 元素,除了优先级更高之外,与 html
选择器相同。
- html {
- overflow-y: scroll; //这是为了兼容ie8,不支持:root, vw
- }
-
- :root {
- overflow-y: auto;
- overflow-x: hidden;
- }
-
- :root body {
- position: absolute;
- }
-
- body {
- width: 100vw;
- overflow: hidden;
- }
本人是用第三种方法解决的,完美
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。