使用下面的HTML,将列表显示为两列的最简单方法是什么?

<ul>
    <li>A</li>
    <li>B</li>
    <li>C</li>
    <li>D</li>
    <li>E</li>
</ul>

想要显示:

A B
C D
E

解决方案需要与Internet Explorer兼容。


当前回答

我试着把这作为评论发布,但不能让列显示正确(根据你的问题)。

你需要:

A B

C D

E

... 但作为解决方案的答案将返回:

A D

B E

C

... 所以要么答案不正确,要么问题不正确。

一个非常简单的解决方案是设置<ul>的宽度,然后浮动并设置<li>项的宽度,如下所示

<ul>
    <li>A</li>
    <li>B</li>
    <li>C</li>
    <li>D</li>
    <li>E</li>
</ul>

ul{
    width:210px;
}
li{
    background:green;
    float:left;
    height:100px;
    margin:0 10px 10px 0;
    width:100px;
}
li:nth-child(even){
    margin-right:0;
}

例如http://jsfiddle.net/Jayx/Qbz9S/1/

如果你的问题是错误的,那么前面的答案适用(与JS修复缺乏IE支持)。

其他回答

这可以使用父div上的column-count css属性来实现,

like

 column-count:2;

查看更多细节。

如何使浮动DIV列表出现在列,而不是行

几年后再来一个答案!

本文地址:http://csswizardry.com/2010/02/mutiple-column-lists-using-one-ul/

HTML:

<ul id="double"> <!-- Alter ID accordingly -->
  <li>CSS</li>
  <li>XHTML</li>
  <li>Semantics</li>
  <li>Accessibility</li>
  <li>Usability</li>
  <li>Web Standards</li>
  <li>PHP</li>
  <li>Typography</li>
  <li>Grids</li>
  <li>CSS3</li>
  <li>HTML5</li>
  <li>UI</li>
</ul>

CSS:

ul{
  width:760px;
  margin-bottom:20px;
  overflow:hidden;
  border-top:1px solid #ccc;
}
li{
  line-height:1.5em;
  border-bottom:1px solid #ccc;
  float:left;
  display:inline;
}
#double li  { width:50%;}
#triple li  { width:33.333%; }
#quad li    { width:25%; }
#six li     { width:16.666%; }

现代浏览器

利用css3列模块来支持您正在寻找的内容。

http://www.w3schools.com/cssref/css3_pr_columns.asp

CSS:

ul {
  columns: 2;
  -webkit-columns: 2;
  -moz-columns: 2;
}

http://jsfiddle.net/HP85j/8/

遗留的浏览器

不幸的是,对于IE的支持,你将需要一个涉及JavaScript和dom操作的代码解决方案。这意味着每当列表的内容发生更改时,您都需要执行将列表重新排序为列并重新打印的操作。为了简洁起见,下面的解决方案使用jQuery。

http://jsfiddle.net/HP85j/19/

HTML:

<div>
    <ul class="columns" data-columns="2">
        <li>A</li>
        <li>B</li>
        <li>C</li>
        <li>D</li>
        <li>E</li>
        <li>F</li>
        <li>G</li>
    </ul>
</div>

JavaScript:

(function($){
    var initialContainer = $('.columns'),
        columnItems = $('.columns li'),
        columns = null,
        column = 1; // account for initial column
    function updateColumns(){
        column = 0;
        columnItems.each(function(idx, el){
            if (idx !== 0 && idx > (columnItems.length / columns.length) + (column * idx)){
                column += 1;
            }
            $(columns.get(column)).append(el);
        });
    }
    function setupColumns(){
        columnItems.detach();
        while (column++ < initialContainer.data('columns')){
            initialContainer.clone().insertBefore(initialContainer);
            column++;
        }
        columns = $('.columns');
    }

    $(function(){
        setupColumns();
        updateColumns();
    });
})(jQuery);

CSS:

.columns{
    float: left;
    position: relative;
    margin-right: 20px;
}

编辑:

如下所示,这将使列的顺序如下:

A  E
B  F
C  G
D

而OP要求匹配如下的变体:

A  B
C  D
E  F
G

要实现这个变体,你只需将代码更改如下:

function updateColumns(){
    column = 0;
    columnItems.each(function(idx, el){
        if (column > columns.length){
            column = 0;
        }
        $(columns.get(column)).append(el);
        column += 1;
    });
}

您可以使用CSS只设置两个或更多列

一个E B C D

 <ul class="columns">
    <li>A</li>
    <li>B</li>
    <li>C</li>
    <li>D</li>
    <li>E</li>
</ul>

ul.columns  {
   -webkit-columns: 60px 2;
   -moz-columns: 60px 2;
    columns: 60px 2;
   -moz-column-fill: auto;
   column-fill: auto;
 }

我试着把这作为评论发布,但不能让列显示正确(根据你的问题)。

你需要:

A B

C D

E

... 但作为解决方案的答案将返回:

A D

B E

C

... 所以要么答案不正确,要么问题不正确。

一个非常简单的解决方案是设置<ul>的宽度,然后浮动并设置<li>项的宽度,如下所示

<ul>
    <li>A</li>
    <li>B</li>
    <li>C</li>
    <li>D</li>
    <li>E</li>
</ul>

ul{
    width:210px;
}
li{
    background:green;
    float:left;
    height:100px;
    margin:0 10px 10px 0;
    width:100px;
}
li:nth-child(even){
    margin-right:0;
}

例如http://jsfiddle.net/Jayx/Qbz9S/1/

如果你的问题是错误的,那么前面的答案适用(与JS修复缺乏IE支持)。