Rub*_*uby 11 html css css-grid
好的,这就是情况,假设我有一个包含未知数量项目的列表,它可能是10或100,我希望将它们排列在3列中从上到下而不是从左到右.
现在我可以实现这一点columns: 3;,column-gap: 10px;而且一切都很好.
我的问题是,如何在display: grid;不知道项目数量的情况下实现相同的结果?
我知道如果您有固定数量的项目,您可以通过CSS Grid实现此目的,但是可以使用动态项吗?当然不使用JS.
ul {
list-style: none;
columns: 3;
column-gap: 10px;
}Run Code Online (Sandbox Code Playgroud)
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
<li>11</li>
<li>12</li>
<li>13</li>
<li>14</li>
<li>15</li>
<li>16</li>
<li>17</li>
<li>18</li>
<li>19</li>
<li>20</li>
<li>21</li>
<li>22</li>
</ul>Run Code Online (Sandbox Code Playgroud)
小智 6
我不认为如果没有您想要显示的项目数量,这是可能的,对于您的情况,您可以这样做:
ul {
display: grid;
grid-auto-flow: column;
grid-template-rows: repeat(8, 1fr);
}Run Code Online (Sandbox Code Playgroud)
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
<li>11</li>
<li>12</li>
<li>13</li>
<li>14</li>
<li>15</li>
<li>16</li>
<li>17</li>
<li>18</li>
<li>19</li>
<li>20</li>
<li>21</li>
<li>22</li>
</ul>Run Code Online (Sandbox Code Playgroud)
但是行数必须先前定义.
Utk*_*ais -1
我在这里使用了一些 JavaScript。其中“lst”是 UL 的 id。我使用 CSS 变量传递 UL 中元素的值,并最终根据要求计算所需的列。唯一的缺点是我们需要检查元素总数是奇数还是偶数。
<script>
var list = document.getElementById("lst").childElementCount;
document.getElementById("lst").style.setProperty('--x',list/2);
</script>
<style>
ul {
list-style:none;
display: grid;
grid-auto-flow:column;
grid-template-rows:repeat(var(--x),1fr);
}
</style>
Run Code Online (Sandbox Code Playgroud)