flexboxで複数の要素を横並びにする際、要素を両端揃えにする(親要素に左端と右端を合わせる)方法を試してみます。
サンプルコード
flexboxで両端揃えにする場合、justify-content: space-between;を使用します。
HTML
1 2 3 4 5 6 7 8 9 10 | < 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | .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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | .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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | .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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | $( 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()を実行して調整してください。
【参考サイト】
コメントが承認されるまで時間がかかります。