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

内容溢出的Flexbox项仅适用于Chrome

苏星宇
2023-03-14

请看一下这支笔:

https://codepen.io/linck5/pen/grkjby?editors=1100

null

css prettyprint-override">body{ margin: 0;}

.container {
  width: 100%;
  height: 100vh;
  display: flex;
  flex-direction: column;
}

.top-bar {
  background-color: darksalmon;
  height: 50px;
}

.inner-container {
  flex: 1;
  background-color: chocolate;
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
}

.top {
  background-color: blueviolet;
  flex: 1;
  overflow: auto;
  font-size: 40px;
  line-height: 5rem;
}

.bottom {
  background-color: darkkhaki;
  height: 200px;
}
<div class="container">
    
  <div class="top-bar">Top bar</div>

  <div class="inner-container">

    <div class="top">
      O<br>v<br>e<br>r<br>f<br>l<br>o<br>w<br>i<br>n<br>g<br>C<br>o<br>n<br>t<br>e<br>n<br>t
    </div>
    <div class="bottom">Bottom part</div>

  </div>
  
</div>

null

我希望只有.topdiv是可滚动的,而不是整个页面。我不希望.topdiv下推.bottomdiv。

而这正是Chrome上发生的一切,一切都运行得很完美。但是在Firefox和Edge上,一个滚动条出现在整个页面上,.bottomdiv被下推。

此外,.top-bardiv会缩小,而不是具有所需的50px高度。

你们能帮我一下吗?

共有1个答案

蓬意致
2023-03-14

要考虑三件事:

>

  • 弹性项目的初始设置为flex-shrink:1。这意味着允许项目收缩,以便在容器中创建更多空间。若要禁用此功能,请使用flex-shrink:0

    请参阅本文的完整解释:flex-basis和width之间有什么区别?

    弹性项的初始设置是min-height:auto。这意味着项不能小于其内容的高度。若要重写此行为,请使用min-height:0

    看这篇文章的完整解释:为什么flex项目不收缩过去的内容大小?

    在您的代码中,Firefox和Edge严格遵守规范。看起来,Chrome认为规范是一个基础,但在常识性场景和预期用户行为的因素。

    要使布局跨浏览器工作,请进行以下调整:

    null

    body{ margin: 0;}
    
    .container {
      width: 100%;
      height: 100vh;
      display: flex;
      flex-direction: column;
    }
    
    .top-bar {
      background-color: darksalmon;
      height: 50px;
      flex-shrink: 0; /* NEW */
      /* Or remove height and flex-shrink and just use this: 
         flex: 0 0 50px; */
    }
    
    .inner-container {
      flex: 1;
      background-color: chocolate;
      width: 100%;
      height: 100%;
      display: flex;
      flex-direction: column;
      min-height: 0; /* NEW */
    }
    
    .top {
      background-color: blueviolet;
      flex: 1;
      overflow: auto;
      font-size: 40px;
      line-height: 5rem;
    }
    
    .bottom {
      background-color: darkkhaki;
      /* height: 200px; */
      flex: 0 0 200px; /* NEW */
      
    }
    <div class="container">
      <div class="top-bar">Top bar</div>
      <div class="inner-container">
        <div class="top">
    O<br>v<br>e<br>r<br>f<br>l<br>o<br>w<br>i<br>n<br>g<br>C<br>o<br>n<br>t<br>e<br>n<br>t
        </div>
        <div class="bottom">Bottom part</div>
      </div>
    </div>

  •  类似资料:
    • 问题 阻止类似按钮的内容会导致我的flex项目展开并溢出flexbox容器。 预期行为 在本例中,按钮应与按钮文本并排,并用省略号隐藏。flex项的宽度应基于兄弟项而非内容,并在容器更改宽度和添加或删除flex项时保持在容器内的响应性。另一个警告是,对于我的特定场景,我不能在flex项或buttons父div上使用overflow:hidden。 这是小提琴手。 例Html 示例CSS 编辑:现在

    • 问题内容: 我已经使用css3 flexbox设计了100%宽度100%高度的布局,该布局可在IE11上使用(如果对IE11的仿真正确,则可能在IE10上使用)。 但是Firefox(35.0.1),overflow-y无法正常工作。如您在此Codepen中所见: Firefox无法正确渲染溢出。它显示一个滚动条 问题答案: TL;博士:你需要在你的规则。 更详细的解释: 弹性项根据其子项的固有大

    • 以下是我用来实现上述布局的代码: 我省略了用于样式设置的代码。你可以在钢笔里看到所有的东西。 上述方法有效,但当区域的内容溢出时,会使整个页面滚动。我只希望内容区域本身滚动,因此我将添加到div。 现在的问题是,柱本身并没有超出其父高度,因此边界也在那里被切断。 这是显示滚动问题的笔。 如何将区域设置为独立滚动,同时使其子项延伸到框的高度之外?

    • 我正在玩flexbox,我的flex项似乎溢出了它的父容器。我能做些什么来确保它能呆在它的范围内? 抱歉,它有点长:) 但我正试图垂直列出一些控件,我想在一行上订购两个控件<因此,UL以一个灵活的方向(柱)和LI的方向(水平)保存所有内容 但是,即使控件嵌套在具有设置宽度的div中,它们仍然在其边缘上运行。有谁能给我一些建议,说明我应该做些什么:)<谢谢!

    • JSFIDLE 如何阻止flexbox的子项溢出容器? 我不希望溢出设置为隐藏 超文本标记语言: CSS:

    • 我试图创建一个包含两个项目的flex容器--一个文本div和一个图像div。 然而,我在容器中保存映像时遇到了实际的问题。当我将浏览器的大小调整为一个小宽度时,图像就会溢出容器,我似乎不明白为什么会发生这种情况。物品应该留在容器里吗? 代码在这里: 代码本在这里: http://codepen.io/reskk/pen/aldpbz 我四处寻找并尝试了一些解决方案:使用flex-basis、fle