【发布时间】:2018-03-02 22:56:31
【问题描述】:
我用 css 列做了一些事情,我真的很喜欢它们,但是今天我偶然发现了一个我找不到解决方案的问题:
我有一个包含多个列表的页面。这些列表具有动态内容并在小弹出窗口中打开。旧的行为是,列表内容显示在单个列中(普通 HTML <ul>)。新行为应该是它们最多显示在 4 列中。所以我用ul { column-count: 4; } 扩展了我的CSS。这对于包含许多条目的列表非常有效。
现在我的问题是:有时列表中的条目少于 4 个。如果是这种情况,列表的弹出窗口仍然跨越 4 列,仅填充 2 列。因此,填充较少的列表的弹出窗口仍然与填充列表的弹出窗口一样宽。例如:
ul {
background-color: lime;
list-style: none;
column-count: 4;
}
<ul>
<li>entry 1</li>
<li>entry 2</li>
<li>entry 3</li>
<li>entry 4</li>
<li>entry 5</li>
<li>entry 6</li>
<li>entry 7</li>
<li>entry 8</li>
<li>entry 9</li>
<li>entry 10</li>
<li>entry 11</li>
<li>entry 12</li>
</ul>
<ul>
<li>entry 1</li>
<li>entry 2</li>
</ul>
我现在的问题是:如何隐藏那些空列?我想要一个填充较少的列表(条目数 CSS-only 解决方案,因为我不打算计算条目并添加额外的类来减少列数。
元素的显示顺序很重要:从上到下,然后从左到右。
我尝试过使用 flexbox,但我必须为容器设置一个固定宽度,这只会导致弹出窗口太宽。
编辑澄清: 虚线应该是第二个弹出窗口的右边框。 对角线表示我需要离开的空白空间。
编辑进一步的方法: 用户“Gobbin”作为答案发布的另一种方法是使用 flex。但正如我所提到的,我必须设置一些固定宽度。这里它是列表本身的最大宽度,因此包装工作和列表元素的固定宽度。我也不想拥有。这种方法也从左到右然后从上到下列出项目,这也不是我需要的:
ul {
list-style: none;
display: inline-flex;
flex-wrap: wrap;
max-width: 16em;
float: left;
clear: both;
}
li {
background-color: lime;
width: 4em;
}
<ul>
<li>entry 1</li>
<li>entry 2</li>
<li>entry 3</li>
<li>entry 4</li>
<li>entry 5</li>
<li>entry 6</li>
<li>entry 7</li>
<li>entry 8</li>
<li>entry 9</li>
<li>entry 10</li>
<li>entry 11</li>
<li>entry 12</li>
</ul>
<ul>
<li>entry 1</li>
<li>entry 2</li>
</ul>
【问题讨论】:
-
强烈建议研究 CSS Grid 和 CSS Flexbox。它们确实是为这种事情而生的
-
@TheCrzyMan 的 CSS 网格对于列数和整体宽度不是很固定吗?我已经提到,使用 flexbox 我必须为容器设置一个固定的宽度,以便项目将在列中。
-
嗯.. 我想我需要更好地阅读。另外,为什么不需要显示空列?你能给
li元素设置背景颜色吗? -
@TheCrzyMan 这些列表显示在弹出窗口中,可以与正常背景区分开来。这里的代码 sn -p 中的背景颜色仅用于可视化。
-
你需要列数吗?你能摆脱它吗?
标签: html css css-multicolumn-layout