[解決済み】 順番なしリストを2列で表示するには?
2022-04-17 09:58:41
質問
次の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 columns モジュールを活用して、あなたが探しているものをサポートします。
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;
}
EDITです。
下記で指摘されているように、これは以下のように列を並べることになります。
A E
B F
C G
D
のようなバリアントが求められているのに対し
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;
});
}
関連
-
[解決済み】divの高さを画面の残りスペースで埋めるようにする
-
[解決済み] 高さを固定したBootstrapパネルボディの作り方
-
[解決済み] 入力のラジオ要素を水平に揃えるにはどうしたらいいですか?
-
[解決済み] textareaのresizableプロパティを無効にするにはどうしたらよいですか?
-
[解決済み] 要素を水平方向にセンタリングする方法
-
[解決済み] 箇条書きのない順序なしリストが必要です。
-
[解決済み] リンクのように動作するHTMLボタンを作成する方法
-
[解決済み] div 内の画像を縦に並べる方法
-
[解決済み] スクロールバーを隠すが、スクロールはできる状態
-
[解決済み] How do I style a <select> dropdown with only CSS?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン