如何将列表项显示为列?

Posted

技术标签:

【中文标题】如何将列表项显示为列?【英文标题】:How to display list items as columns? 【发布时间】:2012-09-02 04:31:41 【问题描述】:

我正在尝试构建我的第一个响应式布局。我想在垂直线上显示列表项,具体取决于宽度。

<div style="height:800px;">
    <ul>
       <li>1</li>
       <li>2</li>
       <li>3</li>
       <li>4</li>
       <li>5</li>
       <li>6</li>
       <li>7</li>
    </ul>
</div>
1 5 2 6 3 7 4

如果浏览器调整大小,我希望它变成

1 4 7 2 5 3 6

有人可以帮助我吗?我已经尝试了几个小时,但我什么也得不到。我尝试过使用表格,但我也不能这样做。

【问题讨论】:

techneblog.com/article/creating-responsive-multiple-column-list 可能是您正在寻找的 - 演示:codepen.io/ThiefMaster/full/afGbB(调整窗口大小) 【参考方案1】:

这可以很容易地使用 CSS3 列来完成。这是一个例子,html

#limheight 
    height: 300px; /*your fixed height*/
    -webkit-column-count: 3;
       -moz-column-count: 3;
            column-count: 3; /*3 in those rules is just placeholder -- can be anything*/


#limheight li 
    display: inline-block; /*necessary*/
<ul id = "limheight">
 <li><a href="">Glee is awesome 1</a></li>
 <li><a href="">Glee is awesome 2</a></li>
 <li><a href="">Glee is awesome 3</a></li>
 <li><a href="">Glee is awesome 4</a></li>    
 <li><a href="">Glee is awesome 5</a></li>
 <li><a href="">Glee is awesome 6</a></li>
 <li><a href="">Glee is awesome 7</a></li>
 <li><a href="">Glee is awesome 8</a></li>
 <li><a href="">Glee is awesome 9</a></li>
 <li><a href="">Glee is awesome 10</a></li>
 <li><a href="">Glee is awesome 11</a></li>
 <li><a href="">Glee is awesome 12</a></li>    
 <li><a href="">Glee is awesome 13</a></li>
 <li><a href="">Glee is awesome 14</a></li>
 <li><a href="">Glee is awesome 15</a></li>
 <li><a href="">Glee is awesome 16</a></li>
 <li><a href="">Glee is awesome 17</a></li>    
 <li><a href="">Glee is awesome 18</a></li>
 <li><a href="">Glee is awesome 19</a></li>
 <li><a href="">Glee is awesome 20</a></li>
</ul>

【讨论】:

caniuse.com/#feat=multicolumn - 希望您的听众无论如何都允许您使用它;这显然是最好的解决方案。您还可以为旧版浏览器添加 shim - google 吐出 csscripting.com/css-multi-column;虽然没有测试过 @ThiefMaster 是的,如果需要旧版浏览器支持,我认为 javascript 将是实现这一目标的唯一方法。 这里似乎不需要display: inline-block; for li 调整大小不起作用。列项目不会更改列。除此之外 - 更糟糕的是 - 如果页面宽度超过 6 倍项目大小,两个连续的项目(1 和 2)会在第 1 列的同一行上彼此相邻显示,然后在下一行 3 和 4 上,依此类推。您需要向&lt;li&gt; 添加一些水平填充以明确这一点。问题在于inline-block。删除它,你会得到三列(至少在 Firefox 和 Chrome 中)。 这是一个更新版本:jsfiddle.net/Fa722/270。我还注意到,如果元素的数量不能被列数整除,那么当你重新调整窗口大小时它会抖动。 (这对你有用@SPRBRN)【参考方案2】:

如果您查看以下示例 - 它使用固定宽度的列,我认为这是所要求的行为。

http://www.vanderlee.com/martijn/demo/column/

如果底部示例与顶部相同,则不需要 jquery 列插件。

ulmargin:0; padding:0;

#native 
  -webkit-column-width: 150px;
  -moz-column-width: 150px;
  -o-column-width: 150px;
  -ms-column-width: 150px;
  column-width: 150px;
  
  -webkit-column-rule-style: solid;
  -moz-column-rule-style: solid;
  -o-column-rule-style: solid;
  -ms-column-rule-style: solid;
  column-rule-style: solid;
<div id="native">
  <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>
  </ul>
</div>

【讨论】:

你能做一个 JSFiddle 或 CodePen 让我们玩吗? 不敢相信如此有效的答案从未获得过一票。【参考方案3】:

感谢您提供此示例,SPRBRN。它帮助了我。我可以根据上面给出的代码推荐我使用过的 mixin:

//multi-column-list( fixed columns width)
  @mixin multi-column-list($column-width, $column-rule-style) 
  -webkit-column-width: $column-width;
  -moz-column-width: $column-width;
  -o-column-width: $column-width;
  -ms-column-width: $column-width;
  column-width: $column-width;

  -webkit-column-rule-style: $column-rule-style;
  -moz-column-rule-style: $column-rule-style;
  -o-column-rule-style: $column-rule-style;
  -ms-column-rule-style: $column-rule-style;
  column-rule-style: $column-rule-style;
 

使用:

   @include multi-column-list(250px, solid);

【讨论】:

【参考方案4】:

根据需要创建一个包含尽可能多的列表元素的列表。 然后将列表包含在一个 div 中,设置 style=column-width 和 style=column-gap,以匹配列表元素中的信息。不要设置样式=列。 完全响应的列表,适应屏幕大小。无需插件。

【讨论】:

【参考方案5】:

使用 css 的 column-width 属性,如下所示

<ul style="column-width:135px">

【讨论】:

【参考方案6】:

你可以像下面这样使用 flex:

.parent-container 
    display: flex;
    flex-direction: column;
    flex-wrap: wrap;
    max-height: 100px;

根据需要调整 max-height 属性以生成其他列

【讨论】:

【参考方案7】:

CSS:

#cols 
    -moz-column-count: 3;
    -moz-column-gap: 20px;
    -webkit-column-count: 3;
    -webkit-column-gap: 20px;
    column-count: 3;
    column-gap: 20px;

HTML

<div id="cols">
    <ul>
    <li>List item 1</li>
    <li>List item 2</li>
    <li>List item 3</li>
    <li>List item 4</li>
    <li>List item 5</li>
    <li>List item 6</li>
    <li>List item 7</li>
    <li>List item 8</li>
    <li>List item 9</li>
    <li>List item 10</li>
    <li>List item 11</li>
    <li>List item 12</li>
    <li>List item 10</li>
    <li>List item 11</li>
    <li>List item 12</li>
   
    </ul>
</div> 

查看演示:https://codepen.io/pen/

【讨论】:

以上是关于如何将列表项显示为列?的主要内容,如果未能解决你的问题,请参考以下文章

如何将行显示为列?

如何使用 PANDAS / Python 将矩阵转换为列数组

EXCEL表格里如何将2列内容合并为1列

使用反应时如何将表格行转换为列

如何将多个功能/选项发送到多个列表项?

如何在泥浆中突出显示选定的列表项?