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

标签 html css html-lists css-multicolumn-layout

对于以下 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 配合使用。

最佳答案

现代浏览器

利用 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;
    });
}

关于html - 如何在两列中显示无序列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14745297/

相关文章:

html - 不同的 CSS 标签属性

html - CSS 下拉导航导致 html 内容移动

css - CSS 有没有办法将文本中的特定字母大写?

html - 如何将 li 标签中的一些文本向下移动?

css - 按升序排列的嵌套有序列表

jquery - Bootstrap 2.3 嵌套 Accordion 图标更改也发生在父级上

jquery - 同步选项卡式导航

html - 如何在 CSS 中选择第二个元素以及之后的元素?

html - 为什么 <div> 下的 <li> 元素与 <ul> 下的 <li> 元素渲染不同?

javascript - jQuery 选择表行中的所有复选框