当前位置: 首页 > 知识库问答 >
问题:

CSS中的固定位置和溢出滚动

董奇思
2023-03-14

我有固定位置的模态形式。

HTML:

<div class="wrap">
  <div class="box">
    <div class="header">
      Form header
    </div>
    <div class="content">
      Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content
      Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content
      Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content
      Content Content Content Content Content Content Content Content Content Content Content
    </div>
  </div>
</div>
.wrap {
  position: fixed;
  background-color: rgba(0, 0, 0, 0.4);
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
}

.box {
  position: fixed;
  background: #fff;
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15);
  border-radius: 2px;
  top: 50%;
  left: 50%;
  max-height: calc(100% - 50px);
  -webkit-transform: translate(-50%, -50%);
  -moz-transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%);
  -o-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}

.header {
  padding: 10px;
  background-color: #f5f5f5;
  border-radius: 2px;
}

.content {
  padding: 10px 15px;
  border-top: 1px solid #ddd;
  max-height: 100%;
  overflow-y: scroll;
}

JSFiddle

共有1个答案

益英逸
2023-03-14

您可以使用flexbox,它可以很好地处理标题和内容区域的动态高度。

将容器设置为display:flex;flex-direction:column;,将内容设置为flex:1;,这样它就可以展开以获取除头之外的所有可用空间。

.wrap {
  position: fixed;
  background-color: rgba(0, 0, 0, 0.4);
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
}
.box {
  position: fixed;
  background: #fff;
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15);
  border-radius: 2px;
  max-height: calc(100% - 50px);
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  margin: auto;
  width: 50%;
  height: 100%;
  display: flex;
  flex-direction: column;
}
.header {
  padding: 10px;
  background-color: #f5f5f5;
  border-radius: 2px;
}
.content {
  flex: 1;
  padding: 10px;
  border-top: 1px solid #ddd;
  overflow-y: auto;
}
<div class="wrap">
  <div class="box">
    <div class="header">
      Header
    </div>
    <div class="content">
      <div style="height:2000px;">Content</div>
    </div>
  </div>
</div>
 类似资料:
  • 我创建了一个固定在页面底部的容器。但是,容器随后溢出页面,填充规则被完全忽略。我在论坛上搜索过,但找不到一个解决问题的方法。我试过使用position absolute,也试过使用Javascript计算滚动条宽度,但都没有用。 null null

  • 问题内容: 好的,我注意到了一些东西,但是在CSS规范中找不到。样式化元素将相对于浏览器视口绝对定位。如果将固定位置的元素放置在另一个元素内会怎样?CSS示例如下: 和HTML: 据我所知,该元素相对于其最近的父元素也是固定位置的。这在所有浏览器中都可以使用吗?另外,它是错误还是故意行为? 到目前为止,我在互联网上没有找到关于此主题的任何内容,只是“固定位置使其固定在页面上”。 问题答案: 固定和

  • 问题内容: 我实际上有两个问题,但是让我先解决主要问题,因为我认为另一个更容易解决。 我在菜单左侧的滚动条的左侧有一个固定位置的div。右侧是可以正确滚动的标准div。问题是,当浏览器的视口太小而看不到整个菜单时,..没有办法让它滚动到我能找到的位置(至少没有使用CSS)。我试过在CSS中使用不同的溢出,但是没有什么可以使div滚动。包含菜单的div设置为min- height:100%和posi

  • 溢出滚动不会在固定的div上工作,这里是代码本演示

  • 问题内容: 我有一个position:fixed的元素,所以随页面滚动,但是我想要它如何。当用户向上滚动时,我希望元素在某个点处停止滚动,比如说距页面顶部250px时,这可能吗?任何帮助或建议都将有所帮助,谢谢! 我有一种感觉,我需要使用jquery来做到这一点。我尝试获取用户所在位置的滚动或位置,但感到非常困惑,是否有任何jQuery解决方案? 问题答案: 这是我刚刚编写的一个快速jQuery插

  • 问题内容: 我不知道是否存在问题,但是我想知道为什么在父/子元素上不能使用。 这是一个例子: CSS和HTML: 问题答案: 因为固定位置元素是相对于视口而不是其他元素固定的。因此,由于视口没有切断,因此溢流变得无关紧要。 具有position:absolute的元素的位置和尺寸相对于其包含块,而具有position:fixed的元素的位置和尺寸始终相对于初始包含块。通常是视口:浏览器窗口或纸张的