我try 创建一个在页面上弹出的菜单.菜单的高度是可变的,可以大于视区和/或页面内容.以下是简化的代码:

* {
  margin: 0;
}

#overlay {
  min-height: 100%;
  width: 100%;
  position: fixed;
  background: rgba(0, 0, 0, 0.7);
  display: flex;
  align-items: start;
  justify-content: center;

}

#popup {
  margin: 50px;
  height: 50vh;
  width: 300px;
  border: 1px solid red;
  background-color: blue;
}
<div id="overlay">
  <div id="popup">
  </div>
</div>

<div id="content">
  Page content
</div>

当页面内容大于视区高度时,即使覆盖在屏幕上,用户也可以滚动页面:

https://jsfiddle.net/Imabot/ydmwLo2j/1/

另一方面,当菜单大于视区高度时,用户无法滚动查看菜单底部:

https://jsfiddle.net/Imabot/ydmwLo2j/2/

我已经用overflow: scroll;试过很多东西了.但这一切都不管用.

有没有办法解决这两个问题?

我已经读过这个问题了,但它没有帮助:How to make the height REALLY 100%

推荐答案

只需添加到覆盖:

height: 100%;
overflow: auto;

由于覆盖了整个页面,因此滚动条将仅应用于覆盖:https://jsfiddle.net/65na8hy3/

要防止滚动主要内容,请添加:

正文{ 溢出:隐藏; }

正如你所料,一举两得.

Html相关问答推荐

新用户登录时无法从cookie中获取当前用户信息

卡片上方的文本

使用Scrapy Select 最后一个子文本

在CSS中不保持圆形图像形状的边框半径属性

网格容器中的定心元件

如何在angular 17.2中使用routerLink解决此错误

获得一个css框,以便在页面太小时不再粘在页面的角落.

有没有一种方法可以动态地从网格或Flexbox中取出HTML元素?

水平卷轴的内容保持堆叠

防止position:relative的child在出界时收缩

使用`<;use>;`与`<;img>;`时呈现的SVG大小不同

Style=背景图像URL引用变成&;Quot;

有没有一种方法可以很容易地将这个div从底部:0转换到顶部:0?

动画的停止和启动并不顺利

如何使单选按钮在被 Select /选中时看起来像这样的设计?

在 HTML 视频上环绕文本叠加

一旦大于最大限制,JQuery 取消 Select 复选框

Angular:从服务器下载 HTML 并打印

如何在div中设计伪元素?

水平滚动框不显示所有元素