You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flex布局下同级Div元素尺寸调整滚动异常问题求助

Chrome/Electron Flex Layout Scroll Position Anomaly

这是Chrome浏览器特有的问题,是我们在Electron应用中遇到的问题简化版本。这并非常规Bug,更可能是对Flexbox调整内容与滚动定位的机制存在理解偏差,特此求助有没有开发者碰到过类似问题并找到了解决方案。

Problem Details

父级容器使用flex-direction: column布局,包含两个子元素:

  • 顶部子元素设置flex:1,占据容器剩余空间并开启垂直滚动
  • 底部子元素为可伸缩的操作栏

当底部子元素高度增加时,顶部滚动容器的内容没有被正确向上推送,导致滚动位置出现异常。

Reproduction Steps

  • 滚动顶部内容容器到最底部
  • 点击「increase height」按钮,会发现滚动条不再停留在底部位置
  • 多次点击「increase height」按钮,观察滚动位置的变化
  • 将顶部内容容器重新滚动回底部
  • 点击「decrease height」按钮,直到底部栏回到最小高度
  • 再次点击「increase height」按钮,此时高度增加会向上推送内容,但只会推送到上次滚动到底部的位置

Sample Code

HTML

<div class='container'>
  <div class='content'>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
    <div> askldjfaslkdjflasdjflkasjdflkjasdlfjaslkdf </div>
  </div>
  <div class='footer' id="footer">
    <button onclick="increaseHeight()"> increase height </button>
    <button onclick="decreaseHeight()"> decrease height </button>
  </div>
</div>
<script>
function increaseHeight () {
  var el = document.getElementById("footer");
  var height = el.offsetHeight;
  el.style.height = (height + 10) + 'px';
}
function decreaseHeight () {
  var el = document.getElementById("footer");
  var height = el.offsetHeight;
  el.style.height = (height - 10) + 'px';
}
</script>

CSS

html, body {
  height: 100%;
  width: 100%;
  margin: 0;
  padding: 0;
}
body {
  padding: 10px;
}
* {
  box-sizing: border-box;
}
.container {
  display: flex;
  flex-direction: column;
  height: 100%;
  border: 1px solid black;
}
.content {
  flex: 1;
  overflow-y: scroll;
  div {
    padding: 10px;
    display: block;
    width: 100%;
  }
}
.footer {
  display: flex;
  flex: 0 1 auto;
  min-height: 40px;
}

内容的提问来源于stack exchange,提问作者topched

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:21:48