次のHTMLで、リストを2列として表示する最も簡単な方法は何ですか?
<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で、リストを2列として表示する最も簡単な方法は何ですか?
<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;
});
}
私はうまくいった@jaiderのソリューションを見ていましたが、操作がより簡単で、ブラウザー全体で優れていると思われる少し異なるアプローチを提供しています。
ul{
list-style-type: disc;
-webkit-columns: 2;
-moz-columns: 2;
columns: 2;
list-style-position: inside;//this is important addition
}
デフォルトでは、順不同リストは箇条書きの位置を外側に表示しますが、一部のブラウザーでは、ブラウザーのWebサイトのレイアウト方法に基づいて、いくつかの表示問題が発生します。
それをフォーマットで表示するには:
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
CD
E
...しかし、解決策が返されると認められた答え:
広告
BE
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>
CSSは 2列以上の設定にのみ使用できます
AE
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;
}
これは、親divのcolumn-count cssプロパティを使用して実現できます。
お気に入り
column-count:2;
詳細はこちらをご覧ください。
column-count
アイテムが正しい順序で表示されません。たとえば、最初の行の目的の表示はA B
(2番目の要素は右側に追加する必要があります)ですが、使用するcolumn-count
場合はになりますA E
。
これは、jQuery-Columnsプラグインを使用して本当に簡単に行うことができます。たとえば、ulを.mylistのクラスで分割します。
$('.mylist').cols(2);
CSSソリューションではすべてが上に垂直に配置されるわけではないので、CSSを使用するよりもこれが好きです。
<ul>
リストが複数のリストに分類されています...それは他のことを複雑にする可能性があります。
数年後にもう1つ回答が得られます。
この記事の内容: 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と2番目の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と同じです。