使用以下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浏览器中运行。
利用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;
});
}
A B
(第二个元素应附加在右侧),但在您的示例中是A E
。 - Paolo Moretti我看了@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,因为他的回复帮助我发现了这个。
我试图将此内容作为评论发布,但无法正确显示列(根据您的问题)。
您要求:
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支持的解决方案)。
display:grid;
可能是最简单的方法了(是吧?)。
ul {
display: grid;
grid-template-columns: repeat(2, 1fr);
}
<ul>
<li>A</li>
<li>B</li>
<li>C</li>
<li>D</li>
<li>E</li>
</ul>
ul {
display: grid;
grid-template-columns: repeat(2, auto);
justify-content: start;
}
li {
margin-left: 1em;
border: solid 1px;/*see me */
}
<ul>
<li>A</li>
<li>B</li>
<li>C 123456</li>
<li>D</li>
<li>E</li>
</ul>
ul {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(0em, max-content));
grid-template-rows: repeat(5, 1fr);/* 5 rows */
grid-auto-flow: column;
list-style: none;
padding: 0;
margin: 1em;
gap: 5px
}
li {
background: silver;
padding: 0.15em;
margin: 0;
}
li::first-letter {
color: blue;
}
<ul>
<li>A</li>
<li>B</li>
<li>Column</li>
<li>D</li>
<li>E</li>
<li>F</li>
<li>G</li>
<li>Hello</li>
<li>I</li>
<li>J</li>
<li>K</li>
<li>L</li>
<li>M</li>
<li>N</li>
<li>On</li>
<li>P</li>
<li>Q</li>
<li>R</li>
<li>S</li>
<li>Testing</li>
<li>U</li>
<li>V</li>
<li>World</li>
<li>X</li>
<li>Y</li>
<li>Zend</li>
</ul>
ol {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(0em, max-content));
grid-auto-flow: column;
list-style: none;
padding: 0;
margin: 1em;
gap: 5px
}
ol:before {
content: '';
grid-column: -1;
width: 0;
grid-row: 1 /7; /*6 rows */
}
li {
background: silver;
padding: 0.15em;
margin: 0;
}
li:first-letter {
color:tomato; /*ketchup*/
}
<ol>
<li>A</li>
<li>B</li>
<li>Column</li>
<li>D</li>
<li>E</li>
<li>F</li>
<li>G</li>
<li>Hello</li>
<li>I</li>
<li>J</li>
<li>K</li>
<li>L</li>
<li>M</li>
<li>N</li>
<li>On</li>
<li>P</li>
<li>Q</li>
<li>R</li>
<li>S</li>
<li>Testing</li>
<li>U</li>
<li>V</li>
<li>World</li>
<li>X</li>
<li>Y</li>
<li>Zend</li>
</ol>
我喜欢这个现代浏览器的解决方案,但是它缺少了项目符号,所以我加了一个小技巧:
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;
是让项目符号正确显示的更好解决方案。 - Alexis Wilke这里是一个可能的解决方案:
代码片段:
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
。 - Paolo MorettiA 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;
}
gap
调整来justify
grid
布局。
p {
text-align: justify;
}
ul {
display: grid;
grid-template-columns: repeat(3, auto);
justify-content: space-around;
gap: 0 3em;
text-transform: capitalize;
}
<p>In publishing and graphic design, Lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document or a typeface without relying on meaningful content. Lorem ipsum may be used as a placeholder before final copy is available.</p>
<ul>
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
<li>five</li>
<li>six</li>
<li>seven</li>
<li>eight</li>
<li>nine</li>
<li>ten</li>
</ul>
<p>In publishing and graphic design, Lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document or a typeface without relying on meaningful content. Lorem ipsum may be used as a placeholder before final copy is available.</p>