【问题标题】:Flex items overflowing container in SafariSafari中的Flex项目溢出容器
【发布时间】:2018-02-22 11:35:46
【问题描述】:

出于某种原因,在 Safari 中,flex 项目不会留在容器内。

以下是 Chrome 和 Firefox 中的布局:

这是它在 Safari 中的样子:

这是我的代码:

#div1 {
  background: black;
  width: 250px;
  height: 600px;
  display: flex;
  flex-direction: column;
  padding-bottom: 5px
}

#div2 {
  background: pink;
  color: #FFF;
  width: 240px;
  height: 200px
}

#div3 {
  background: blue;
  color: #FFF;
  width: 240px;
  height: 100%;
  position: relative
}
<div id="div1">
  <div id="div2">test</div>
  <div id="div3">test2</div>
</div>

【问题讨论】:

  • 有时人们会发布很好的问题。社区提供答案。然后提问者删帖!我已经复制了这个问题(为了清楚起见进行了一些编辑)并添加了我的原始答案。任何其他解决原始问题的人,请随时在此处添加您的答案。
  • 我在css标签中关注你,当我查看你的个人资料时,我问自己,为什么这个人通常会发布问题并回答自己。现在我知道答案了。哈哈。坚持下去,伙计!

标签: html css safari flexbox


【解决方案1】:

问题

您有一个带有height: 600px 的容器。

这个容器有两个孩子:

  • 一个孩子有height: 200px
  • 另一个孩子有height: 100%

由于百分比高度基于父项的高度,因此您将第二个子项的高度设置为等于容器的全高。

10.5 Content height: the height property

百分比

指定百分比高度。百分比是相对于生成框的包含块的高度计算的。

结果发生溢出:

(200px + 600px) > 600px

除了在弹性容器中,初始设置是flex-shrink: 1。这意味着弹性项目可以缩小以适应容器。 Chrome 和 Firefox 正确应用此设置,允许带有 height: 100% 的元素缩小以适应。显然,Safari 有不同的解释。


解决方案

你可以使用calc()来解决这个问题:

#div3 {
  height: calc(100% - 200px);
}

#div1 {
  background: black;
  width: 250px;
  height: 600px;
  display: flex;
  flex-direction: column;
  padding-bottom: 5px
}

#div2 {
  background: pink;
  color: #FFF;
  width: 240px;
  height: 200px
}

#div3 {
  background: blue;
  color: #FFF;
  width: 240px;
  height: calc(100% - 200px);
}
<div id="div1">
  <div id="div2">test</div>
  <div id="div3">test2</div>
</div>

但是,由于您已经在列方向 flex 容器中工作,您可以使用 flex 让第二个孩子占用剩余空间:

#div3 {
  flex: 1;
}

这意味着:其他兄弟姐妹没有用完的任何空间都将被这个孩子消耗。

#div1 {
  background: black;
  width: 250px;
  height: 600px;
  display: flex;
  flex-direction: column;
  padding-bottom: 5px
}

#div2 {
  background: pink;
  color: #FFF;
  width: 240px;
  height: 200px
}

#div3 {
  background: blue;
  color: #FFF;
  width: 240px;
  flex: 1;
}
<div id="div1">
  <div id="div2">test</div>
  <div id="div3">test2</div>
</div>

【讨论】:

  • 你实际上是在让世界变得更美好:P
猜你喜欢
  • 2019-01-09
  • 2017-09-07
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2013-09-24
  • 2021-12-08
  • 2019-01-14
  • 2018-06-27
相关资源
最近更新 更多