【问题标题】:CSS Grid Container shrinks inside a Flex container (Storybook reproduction)CSS Grid Container 在 Flex 容器内收缩(故事书复制)
【发布时间】:2020-08-19 06:02:11
【问题描述】:

有没有人了解这段代码为什么会这样做?我有一个网格容器,里面有 4 个元素,应该水平显示它们,它们之间有 15px 的间隙。不知道为什么,但 Storybook 的居中代码使用 flex 容器将内容垂直居中,但这样做会将我的网格容器缩小到 8px 宽度。删除 display: flex 可以解决问题,但会破坏居中显示。我需要向这个组件添加什么 CSS 以确保它保持足够的宽度以水平显示数字而不用硬编码宽度值?

<div id="sb-addon-centered-wrapper">
  <div id="sb-addon-centered-inner">
    <div id="grid">
      <div>1</div>
      <div>2</div>
      <div>3</div>
      <div>4</div>
    </div>
  </div>
</div>
#sb-addon-centered-wrapper {
  position: fixed;
  top: 0px;
  left: 0px;
  bottom: 0px;
  right: 0px;
  display: flex;
  align-items: center;
  overflow: auto;
}
#sb-addon-centered-inner {
  margin: auto;
  max-height: 100%;
}

#grid { 
 display: grid;
  grid-gap: 15px;
grid-template-columns: repeat(auto-fit, minmax(0, max-content));
}

https://codepen.io/eriklharper/pen/oNjpgVj?editors=1100

【问题讨论】:

  • 请将代码添加到问题本身。谢谢。

标签: css flexbox css-position css-grid


【解决方案1】:

因为flex-grow: 1.sb-addon-centered-inner 的孩子上没有做任何事情,所以网格项目被挤压(和换行)。

<div id="sb-addon-centered-wrapper">
  <div id="sb-addon-centered-inner">
    <div style="flex-grow: 1;"> <------ THIS
      <div id="grid">
           …

.sb-addon-centered-inner 没有应用 display: flexinline-flex,因此它的子级无法识别 flex 属性。

改为将flex-grow: 1 添加到.sb-addon-centered-inner,这是一个弹性项目。

然后,将带有justify-content: center 的内容置于网格容器的中心。

#sb-addon-centered-inner {
  flex-grow: 1;
}

#grid { 
  justify-content: center;
}

#sb-addon-centered-wrapper {
  position: fixed;
  top: 0px;
  left: 0px;
  bottom: 0px;
  right: 0px;
  display: flex;
  align-items: center;
  overflow: auto;
}

#sb-addon-centered-inner {
  margin: auto;
  max-height: 100%;
  flex-grow: 1; /* new */
}

#grid {
  display: grid;
  grid-gap: 15px;
  grid-template-columns: repeat(auto-fit, minmax(0, max-content));
  /* min-width: 18px; */
  justify-content: center; /* new */
}

#grid div {
  min-width: 40px;
}
<div id="sb-addon-centered-wrapper">
  <div id="sb-addon-centered-inner">
    <div style="flex-grow: 1;">
      <div id="grid">
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
      </div>
    </div>
  </div>
</div>

【讨论】:

  • 谢谢迈克尔!感谢您的回答,我知道现在发生了什么。我还注意到,带有内联样式的额外 div 是我为调试添加的,在我提出问题之前我忘记删除了。我已经更新了 codepen 以反映这一点。虽然你的解决方案是书面的,如果有必要我可能会在 Storybook 的 github 上创建一个官方问题,我还发现如果我在我的 #grid 上设置一个 max-width: 100vw 也可以解决它。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 2021-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多