使用以下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上运行。
使用以下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上运行。
Answers:
利用css3列模块来支持您要寻找的内容。
http://www.w3schools.com/cssref/css3_pr_columns.asp
CSS:
ul {
columns: 2;
-webkit-columns: 2;
-moz-columns: 2;
}
不幸的是,要获得IE支持,您将需要一个涉及JavaScript和dom操作的代码解决方案。这意味着,只要列表的内容发生更改,您就需要执行将列表重新排序为列并重新打印的操作。为了简洁起见,下面的解决方案使用jQuery。
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;
});
}
我一直在查看@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,您的回复帮助引导我发现了这一点。
我尝试将其发布为评论,但无法使列正确显示(根据您的问题)。
您要求:
AB
光盘
Ë
...但是作为解决方案接受的答案将返回:
广告
是
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/
如果您的问题是错误的,则可以使用前面的答案(带有针对IE的JS修复)。
我喜欢现代浏览器的解决方案,但是缺少项目符号,因此我添加了一些技巧:
http://jsfiddle.net/HP85j/419/
ul {
list-style-type: none;
columns: 2;
-webkit-columns: 2;
-moz-columns: 2;
}
li:before {
content: "• ";
}
list-style-position: inside;
是使子弹正确显示的更好解决方案。
这是一个可能的解决方案:
片段:
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%;
}
<ul id="double">
<li>first</li>
<li>second</li>
<li>third</li>
<li>fourth</li>
</ul>
做到了。
对于3列,使用li
宽度为33%,对于4列,使用宽度为25%,依此类推。
这是最简单的方法。仅CSS。
ul.list {
width: 300px;
}
ul.list li{
display:inline-block;
width: 100px;
}
<ul class="list">
<li>A</li>
<li>B</li>
<li>C</li>
<li>D</li>
<li>E</li>
</ul>
column-count
不会以正确的顺序显示项目。例如,在第一行中所期望的显示效果A B
(第二元件应当在右侧追加),但是如果使用column-count
这将是A E
。
您可以使用jQuery-Columns插件非常轻松地执行此操作,例如使用您要执行的.mylist类拆分ul
$('.mylist').cols(2);
我比使用CSS更好,因为使用CSS解决方案时,并非所有内容都垂直对齐顶部。
<ul>
列表分解为多个列表...这会使其他事情变得复杂。
几年后又有一个答案!
本文中的文章: 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%; }
在updateColumns()
需要if (column >= columns.length)
而不是if (column > columns.length)
列出所有元素(C,跳过例如)这样:
function updateColumns(){
column = 0;
columnItems.each(function(idx, el){
if (column >= columns.length){
column = 0;
}
console.log(column, el, idx);
$(columns.get(column)).append(el);
column += 1;
});
}
使用Bootstrap ...这个答案(https://stackoverflow.com/a/23005046/1128742)让我指出了这个解决方案:
<ul class="list-unstyled row">
<li class="col-xs-6">Item 1</li>
<li class="col-xs-6">Item 2</li>
<li class="col-xs-6">Item 3</li>
</ul>
最佳答案中的旧式解决方案对我而言不起作用,因为我想影响页面上的多个列表,并且答案假定一个列表,并且使用了相当多的全局状态。在这种情况下,我想更改内的每个列表<section class="list-content">
:
const columns = 2;
$("section.list-content").each(function (index, element) {
let section = $(element);
let items = section.find("ul li").detach();
section.find("ul").detach();
for (let i = 0; i < columns; i++) {
section.append("<ul></ul>");
}
let lists = section.find("ul");
for (let i = 0; i < items.length; i++) {
lists.get(i % columns).append(items[i]);
}
});
尽管我发现加百列的答案在一定程度上起作用了,但在尝试垂直排序列表时(第一个ul AD和第二个ul EG)确实找到了以下内容:
我已经修改了JQuery,因此希望上述情况不会发生。
(function ($) {
var initialContainer = $('.customcolumns'),
columnItems = $('.customcolumns li'),
columns = null,
column = 0;
function updateColumns() {
column = 0;
columnItems.each(function (idx, el) {
if ($(columns.get(column)).find('li').length >= (columnItems.length / initialContainer.data('columns'))) {
column += 1;
}
$(columns.get(column)).append(el);
});
}
function setupColumns() {
columnItems.detach();
while (column++ < initialContainer.data('columns')) {
initialContainer.clone().insertBefore(initialContainer);
column++;
}
columns = $('.customcolumns');
updateColumns();
}
$(setupColumns);
})(jQuery);
.customcolumns {
float: left;
position: relative;
margin-right: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<ul class="customcolumns" data-columns="3">
<li>A</li>
<li>B</li>
<li>C</li>
<li>D</li>
<li>E</li>
<li>F</li>
<li>G</li>
<li>H</li>
<li>I</li>
<li>J</li>
<li>K</li>
<li>L</li>
<li>M</li>
</ul>
</div>
多年来,Thisd对我来说是一个完美的解决方案:
http://css-tricks.com/forums/topic/two-column-unordered-list/
Abdul
他的答案中使用的代码的链接/参考,甚至与所用的宽度和ID相同。