如何在两列中显示无序列表?

新手上路,请多包涵

使用以下 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 一起使用。

原文由 atp03 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 434
2 个回答

现代浏览器

利用 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>

脚本:

 (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;
    });
}

原文由 Gabriel 发布,翻译遵循 CC BY-SA 3.0 许可协议

我正在查看 @jaider 的有效解决方案,但我提供了一种略有不同的方法,我认为这种方法更易于使用,而且我认为它适用于各种浏览器。

 ul{
    list-style-type: disc;
    -webkit-columns: 2;
    -moz-columns: 2;
    columns: 2;
    list-style-position: inside;//this is important addition
}

默认情况下,无序列表在外部显示项目符号位置,但在某些浏览器中,它会根据浏览器布局网站的方式导致一些显示问题。

要让它以以下格式显示:

 A B
C D
E

等使用以下内容:

 ul li{
    float: left;
    width: 50%;//helps to determine number of columns, for instance 33.3% displays 3 columns
}
ul{
    list-style-type: disc;
}

这应该可以解决显示列的所有问题。一切顺利,感谢@jaider,因为你的回复帮助我发现了这一点。

原文由 Winnifred 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题