【发布时间】:2018-06-07 13:02:00
【问题描述】:
据我了解,flexbox 可以做的任何事情,css-grid 也应该可以做(通常更冗长)。
但我不知道如何用margin: auto 推开其他项目来模仿弹性框
ul {
list-style-type: none;
padding: 0;
display: flex;
flex-direction: column;
outline: 1px solid red;
height: 200px;
background-color: lime;
}
li {
background-color: cornsilk;
}
li:last-of-type {
margin-top: auto;
}
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
查看所有单元格如何根据内容调整大小,最后一个li 将其他单元格推开以显示在最后?
如何在不修改我的 html 以添加元素的情况下使用 css-grid 执行此操作?
ul {
list-style-type: none;
padding: 0;
display: grid;
outline: 1px solid red;
height: 200px;
background-color: lime;
}
li {
background-color: cornsilk;
}
li:last-of-type {
margin-top: auto;
}
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
这很接近,但所有行的大小都不是min-content - 我不知道它们的大小是多少,但不是min-content。我能得到的最接近的是添加
grid-template-rows: repeat(3, min-content);
只有在您提前知道lis 的数量时才有效,这对于 flexbox 版本不是必需的。
【问题讨论】:
-
如果您知道行数,这可以在不更改 HTML 的情况下完成。如果这是一个选项,请告诉我。
-
@Michael_B 谢谢,但我有十几种不同的方式来做我想做的事,这更多地是为了理解 CSS 网格的来龙去脉。那里有很多东西,我可以如此接近,如果没有办法做到这一点,我会感到惊讶根本。我期待有人过来说“只需使用这个你从未听说过的函数并传入负数和中提琴”或类似的话
-
由于您正在处理所有在同一行与flexbox的项目,它们之间的间距很容易。由于您使用 Grid 处理存在于不同行的项目,因此复杂性更高。我不认为你的白衣骑士会出现在这种情况下。我的答案中有更多详细信息。