次の 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
え
...しかし、解決策として受け入れられた答えは次のように返されます。
広告
なれ
ハ
...つまり、答えが間違っているか、質問が間違っています。
非常に簡単な解決策は、アイテム<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: "• ";
}
これが最も簡単な方法です。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>
これは、親divのcolumn-countcssプロパティを使用して実現できます。
お気に入り
column-count:2;
詳細については、こちらをご覧ください。
これは私にとって完璧な解決策であり、何年も探していました:
http://css-tricks.com/forums/topic/two-column-unordered-list/