无论内容如何,​​Flexbox均匀调整大小

Tab*_*dah 15 css alignment flexbox

如何确定每个方块的大小相同???

关于JSBIN的预览问题 | 查看JSBIN上的问题代码

我使用flexbox创建网格布局.大多数网格单元没有内容,一些网格单元确实有内容.当一个单元格有内容时,它会抛弃一切. 如何确保所有细胞均匀,无论内容如何?

尺寸不正确

HTML

我有三行,每行有三个单元格.只有中心单元格的中心行包含子项.

<div>
  <div></div>
  <div></div>
  <div></div>
</div>

<div>
  <div></div>
  <div><span>contains span</span></div>
  <div></div>
</div>

<div>
  <div></div>
  <div></div>
  <div></div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

在css中,中心空间比其他方块大.

body, html {
  height: 100%;
}

body {
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
}

body>div {
  display: flex;
}

body>div>div {
  border: solid 1px blue;
}

div {
  flex-grow: 1;
}

body>div:nth-child(2)>div:nth-child(2) {
  display: flex;
  align-items: center;
  justify-content: center;
}
Run Code Online (Sandbox Code Playgroud)

Ori*_*iol 13

你正在使用flex-grow: 1.这意味着flex项的初始宽度将是其内容的宽度,然后可用空间将平均分配.

但是,您希望弹性项具有相同的宽度,因此您希望忽略其内容的宽度.你可以实现这一目标

flex: 1;
Run Code Online (Sandbox Code Playgroud)

此外,Flexbox引入auto了初始值min-width.在某些情况下,这可能会产生不同的宽度,因此为了安全起见,可以更好地添加min-width: 0或设置overflow为任何宽度visible

body,
html {
  height: 100%;
}
body {
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
}
body > div {
  display: flex;
}
body > div > div {
  border: solid 1px blue;
}
div {
  flex: 1;
  min-width: 0;
}
body > div:nth-child(2) > div:nth-child(2) {
  display: flex;
  align-items: center;
  justify-content: center;
}
Run Code Online (Sandbox Code Playgroud)
<div>
  <div></div>
  <div></div>
  <div></div>
</div>
<div>
  <div></div>
  <div><span>contains span</span></div>
  <div></div>
</div>
<div>
  <div></div>
  <div></div>
  <div></div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的解决方案,并且它有效,因为“flex”是;的简写。弹性增长、弹性收缩和弹性基础。这些的默认值是;分别为 0、1 和自动。所以普通的解决方案是:`flex-grow: 1; 弯曲收缩:1;弹性基础:0;`。请注意,“flex-basis”为 0,而不是默认的“auto”,因为如果您将“flex”设置为单个数值,则默认值实际上类似于“1 0”(与省略 flex-basis 相同)。建议使用简写版本。 (2认同)

KAD*_*KAD 12

您将使用flex-basis指定灵活项目的初始长度.

body, html {
  height: 100%;
}

body {
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
}

body>div {
  display: flex;
}

body>div>div {
  border: solid 1px blue;
}

div {
  flex-grow: 1;
   flex-basis: 80px; /*set the initial length*/
}

body>div:nth-child(2)>div:nth-child(2) {
  display: flex;
  align-items: center;
  justify-content: center;
}
Run Code Online (Sandbox Code Playgroud)
<div>
  <div></div>
  <div></div>
  <div></div>
</div>

<div>
  <div></div>
  <div><span>contains span asdsa asd asd asd asdsad ads asd sad</span></div>
  <div></div>
</div>

<div>
  <div></div>
  <div></div>
  <div></div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 如果您只想均匀分布,设置`flex-basis:0`即可 (4认同)
  • 为什么是80px?当宽度取决于浏览器大小时,您怎么知道80px? (2认同)