flexboxで複数の要素を横並びにする際、要素を両端揃えにする(親要素に左端と右端を合わせる)方法を試してみます。
サンプルコード
flexboxで両端揃えにする場合、justify-content: space-between;を使用します。
HTML
<div class="parent"> <div class="children"></div> <div class="children"></div> <div class="children"></div> <div class="children"></div> <div class="children"></div> <div class="children"></div> <div class="children"></div> <div class="children"></div> </div>
CSS
.parent { width: 640px; margin: auto; display: flex; justify-content: space-between; flex-wrap: wrap; } .children { width: 200px; height: 200px; margin-bottom: 20px; background: #eeeeee; }
flex-wrap: wrap;は2行以上の場合に改行させるために入れていますが、1行想定の場合は不要です。
最終行がきれいに収まっている場合はこれで問題ないのですが、今回のように最終行がきれいに収まらない場合、意図と違う表示になることがあります。(動作としては正しいです。)
justify-content: space-between;のデモページ
今回のように3列表示の場合、疑似要素を使って対応することができます。
CSS
.parent { width: 640px; margin: auto; display: flex; justify-content: space-between; flex-wrap: wrap; } .parent:after { content: ""; display: block; width: 200px; } .children { width: 200px; height: 200px; margin-bottom: 20px; background: #eeeeee; }
疑似要素に列の幅を指定する必要がありますのでご注意ください。
疑似要素を使って対応するデモページ
列数が多い場合、空要素を追加して対応する必要があるようです。
個数が決まっている場合はHTML内に空要素を直接記述でもよいですが、複数行の場合個数が可変である場合が多いと思いますので、今回はJavaScriptで空要素を追加するようにしてみます。
CSS
.parent { width: 650px; margin: auto; display: flex; justify-content: space-between; flex-wrap: wrap; } .children { width: 100px; height: 100px; margin-bottom: 10px; background: #eeeeee; } .empty { width: 100px; }
JavaScript
$(function() { add_empty_to_flexbox($('.parent'), 6); }); /** * justify-content: space-between;で両端揃えにしたときの最終行の対応 * @param obj target (required) 対象のjQueryオブジェクト * @param num line (required) 列数 */ function add_empty_to_flexbox(target, line) { // 追加する空要素に付与するclass名 var emptyClass = 'empty'; // 既に空要素が追加されている場合は削除する target.children('.'+emptyClass).remove(); // flexbox対象の個数を取得 var l = target.children().length; // 最終行の個数を取得 var lastL = l % line; // きれいに収まっている場合は以下の処理をしない if(lastL <= 0) { return; } // 不足分だけ空要素を追加 for (var i = 0; i < line - lastL; i++) { var div = $('<div>').addClass(emptyClass); target.append(div); } }
add_empty_to_flexbox()を実行することで空要素を追加できます。
JavaScriptで空要素を追加するデモページ
レスポンシブサイトで列数が可変の場合、列数が変わったタイミングでadd_empty_to_flexbox()を実行して調整してください。
【参考サイト】
コメントが承認されるまで時間がかかります。