绝对定位的子元素会影响滚动容器的大小

Absolute positioned child element affects size of scroll container

提问人:ConfusedHorse 提问时间:11/14/2023 最后编辑:ConfusedHorse 更新时间:11/14/2023 访问量:30

问:

我正在尝试创建一个无聊的旧内容页面,其中包含一些文本。因此,垂直滚动功能是强制性的。但是,有一个元素有一些视觉恶作剧,包括一个绝对定位的元素,其动画在某些时候可能会比其父容器的视口大,从而影响滚动容器的行为。我试图在这个代码笔中分解这个问题:

https://codepen.io/ConfusedHorse/pen/MWLvMbN(我被告知这在这里不受欢迎,请参阅下面的代码)

我试图实现的是:保留动画元素并允许它超过可用的视口,而不会影响父容器的行为。

我尝试将包含元素绝对定位,应用不同的溢出行为,摆弄 和 ,但毫无用处。绝对定位的元素位于另一个元素的内部,所以这不是问题。display: gridvisibility: visibleposition: relative

[HTML全文]

<div class="test">  
  <div class="exceed"></div>
  
  <section>
    Inside the grey rectangle you'll find another one of green shade which is positioned absolute and happens to be rotating. 
  </section>
  <section>
    The grey rectangle is placed inside a container which allows for vertical scrolling. 
  </section>
  <section>
    You might notice that the green rectangle affects the scroll container they're both placed in. How do you avoid this while keeping the green rectangles behavior intact?
  </section>  
</div>

CSS的

body {
  display: grid;
  place-content: center;
  block-size: 100dvh;
}

.test {
  position: relative;
  block-size: 20rem;
  aspect-ratio: 1;
  
  display: flex;
  flex-direction: column;
  gap: 1em;
  
  font-size: 1.25em;
  padding: 1em;
  background-color: rgb(127 127 127 / 1);
  color: rgb(255 255 255 / 1);
  
  >.exceed {
    position: absolute;
    inset-block-start: calc(50% - 25em);
    inset-inline-start: calc(50% - 25em);
    block-size: 50em;
    aspect-ratio: 1;
    background-color: rgb(0 255 0 / .25);
    
    animation: turn 10s linear infinite;
    
    @keyframes turn {
      to { rotate: 1turn };
    }
  }
}
CSS 动画 溢出 viewport absolute

评论

1赞 CBroe 11/14/2023
您的问题的适当最小可重现示例直接属于您的问题,请不要只是将我们发送到外部平台。
1赞 CBroe 11/14/2023
关于你的 codepen 标题,“不是那么绝对?”——这是绝对定位元素的完全正常行为。如果它们伸出容器元素的右侧和/或底部,它们将增加容器的尺寸;如果他们伸出顶部和/或左侧,他们就不会。(这是正常的从上到下的 L-T-R 含量。对于 R-T-L 系统,情况可能正好相反。因此,您必须将其粘贴到一些具有预定尺寸的额外容器中,以切断任何溢出。
0赞 ConfusedHorse 11/14/2023
我的目的是让绝对定位的元素巧妙地渗透到其他内容元素中。由于整个内容被放置在一个更复杂的结构中,我不能把它放在一个足够大的容器中,以考虑所需的尺寸。如果我理解正确,我试图实现的目标是不可能的。这是对的吗?
0赞 CBroe 11/14/2023
“由于整个内容物被放置在一个更复杂的结构中,我不能把它放在一个足够大的容器里,以解释所需的尺寸。- 你也许可以尝试制作该容器之前和之后的内容,部分重叠它......?效果如何,实际上取决于具体情况(哪些元素具有已知的高度,哪些元素需要根据其内容动态化,...
0赞 ConfusedHorse 11/14/2023
好吧,它应该超过内容空间(由路由器动态创建并带有一些填充)。我想我正在尝试的根本就不是要起作用的。感谢您伸出援手。

答: 暂无答案