Flexbox:增长所有项目但最后一行

zes*_*ssx 27 css flexbox

我目前有这个简单的Flexbox布局:

ul {
  display: flex;
  flex-wrap: wrap;
  list-style: none;
  padding: 0;
}
li {
  flex-grow: 1;
  padding: 20px;
  margin: 10px;
  background: #ddd;
}
Run Code Online (Sandbox Code Playgroud)
<ul>
    <li>lorem</li>
    <li>ipsum</li>
    <li>dolor</li>
    <li>sit</li>
    <li>amet</li>
    <li>consectetur</li>
    <li>adipisicing</li>
    <li>elit</li>
    <li>sed</li>
    <li>do</li>
    <li>eiusmod</li>
    <li>tempor</li>
    <li>incididunt</li>
    <li>ut</li>
    <li>labore</li>
    <li>et</li>
    <li>dolore</li>
    <li>magna</li>
    <li>aliqua</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我希望我的元素填充容器宽度(如现在),但保持最后一行左对齐.正如您所看到的,最后一行尝试填充空间,这有时会使最后一行元素变得难看.

Flexbox是否允许我们这样做?我找不到办法去做.

Ori*_*iol 39

您可以添加::after一个巨大的伪元素flex-grow,这样flex-grow: 1的的li元素可以忽略不计:

ul::after {
  content: '';
  flex-grow: 1000000000;
}
Run Code Online (Sandbox Code Playgroud)

ul {
  display: flex;
  flex-wrap: wrap;
  list-style: none;
  padding: 0;
}
li {
  flex-grow: 1;
  padding: 20px;
  margin: 10px;
  background: #ddd;
}
ul::after {
  content: '';
  flex-grow: 1000000000;
}
Run Code Online (Sandbox Code Playgroud)
<ul>
  <li>lorem</li>
  <li>ipsum</li>
  <li>dolor</li>
  <li>sit</li>
  <li>amet</li>
  <li>consectetur</li>
  <li>adipisicing</li>
  <li>elit</li>
  <li>sed</li>
  <li>do</li>
  <li>eiusmod</li>
  <li>tempor</li>
  <li>incididunt</li>
  <li>ut</li>
  <li>labore</li>
  <li>et</li>
  <li>dolore</li>
  <li>magna</li>
  <li>dolore</li>
  <li>magna</li>
  <li>aliqua</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

  • 你是巫师吗? (7认同)
  • 嘿……不错的把戏!我会检查一下,但我认为这正是我需要的。 (2认同)

Nik*_*asN 7

您还可以将空项目附加height: 0到容器中并让它们占用额外的空间:http : //codepen.io/anon/pen/OyOqrG

(从我的代码笔复制的来源:

<div class="container">
  <p></p>
  <p></p>
  <p></p>
  ...
  <p class="empty"></p>
  <p class="empty"></p>
</div>



.container {
  max-width: 490px;
  display: flex;
  flex-flow: row wrap;
  background-color: #00f;
}

.container p {
  min-width: 90px;
  margin: 5px;
  background-color: #f00;
  height: 90px;
  flex-grow: 1;
}

.container p.empty {
  height: 0;
  margin-top: 0;
  margin-bottom: 0;
}
Run Code Online (Sandbox Code Playgroud)


Mic*_*cke 6

遇到同样的问题,用css grid解决了。网格的最后一条规则左对齐,所有元素具有相同的宽度。

grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
Run Code Online (Sandbox Code Playgroud)

grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
Run Code Online (Sandbox Code Playgroud)
ul {
  display: grid;
  gap: 10px;
  grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
  list-style: none;
  padding: 0;
}
li {
  padding: 20px;
  background: #ddd;
}
Run Code Online (Sandbox Code Playgroud)