滚动条出现挤压页面宽度,影响布局

Posted weihuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了滚动条出现挤压页面宽度,影响布局相关的知识,希望对你有一定的参考价值。

问题描述:当页面突然出现滚动条的时候,页面会突然被挤压,因为滚动条也是需要占位的呀。

解决思路:现在目标就是滚动条出现,但是内容位置不变,依然不动。

* {
  margin: 0;
  padding: 0;
}
html {
  overflow-y: overlay;
}
.container {
  height: 200px;
  padding: 17px;
  background-color: #00b83f;
  text-align: right;
}


<div class="container">
  <h1>我是容器内容</h1>
</div>

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;
}

记录一下,厚积薄发,一飞冲天。

 

以上是关于滚动条出现挤压页面宽度,影响布局的主要内容,如果未能解决你的问题,请参考以下文章

如何解决滚动条scrollbar出现造成的页面宽度被挤压的问题?

页面出现滚动条的时候如何让滚动条不影响页面宽度

滚动条挤占内容宽度,影响布局

去掉浏览器右侧动滚条宽度对页面的影响

前端布局的几种方式

HTML页面布局问题