存在覆盖时如何禁用滚动?

How to disable scrolling when overlay exists?

考虑一个内容溢出的容器。用户可以在两个方向上滚动以检查内容。

当用户按下一个按钮(在下面的演示中缺失)时,整个容器被一个带有侧边栏的覆盖层覆盖。

此时,滚动是不可取的。

我怎样才能禁用它?

.container {
  width: 200px;
  height: 100px;
  border: 1px solid black;
  overflow: auto;
  position: relative;
}

.line {
  white-space: nowrap;
}

.overlay {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background-color: rgba(0, 0, 0, 0.8);
}

.sidebar {
  position: absolute;
  top: 0;
  bottom: 0;
  right: 0;
  width: 100px;
  display: grid;
  place-items: center;
  background-color: #ccc;
}
<div class="container">
  <div>
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
  </div>
  <div class="overlay">
    <div class="sidebar">Sidebar</div>
  </div>
</div>

您可以在点击按钮时添加事件

.container

overflow: hidden;

在同一事件上触发叠加层时,希望这有帮助。

您可以只为内容添加溢出,而不是主要内容 div

检查代码段:

.container {
  width: 200px;
  border: 1px solid black;
  position: relative;
}
.content
{
overflow: auto;
height: 100px;
}
.line {
  white-space: nowrap;
}

.overlay {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background-color: rgba(0, 0, 0, 0.8);
}

.sidebar {
  position: absolute;
  top: 0;
  bottom: 0;
  right: 0;
  width: 100px;
  display: grid;
  place-items: center;
  background-color: #ccc;
}
<div class="container">
  <div class="content">
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
    <div class="line">Hello World, Hello World, Hello World</div>
  </div>
  <div class="overlay">
    <div class="sidebar">Sidebar</div>
  </div>
</div>