HOME  /WordPress(応用)
 /Flexboxを使った画面コントロール
2017年11月01日

Flexboxを使った画面コントロール

Flexbox(Flexible Box Layout Module)はフレキシブルなレイアウトが組めるCSS3のレイアウトモジュールです。

従来のCSSはブロック要素が縦に書かれましたが、Flexboxの基本は横書きです。但し指定方法によっては縦書きも可能で、この辺がフレキシブルなレイアウトツールの意味する所です。

それではFlexboxの基本から順次解説していきます。

1.flexboxの基本

Flexboxは対象がエリアで、親要素と子要素から構成されます。

下記HTMLは親要素がflex-box子要素がflex-itemになります。(divでなくULを親、liを子でもOK)

<div class="flex-box">
<div class="flex-item">
		<p>子要素①</p>
	</div>
<div class="flex-item">
		<p>子要素②</p><p>二行目</p>
	</div>
	<div class="flex-item">
		<p>子要素③</p>
	</div>
</div>

CSSは下記になります。

.flex-box{display:flex;border:1px solid #000;padding:5px;}
.flex-item{margin-left:5px;padding:5px;background-color:#d9edf7;margin-bottom:5px;}

※1.親要素(.flex-box)display:flex;を指定する事により、このエリアがFlexbox対象になります。

上記の表示結果は下図になります。

これはFlexboxのプロパティで下記のデフォルト値が設定されている為上記の様な表示になります。

区分 プロパティ デフォルト値 挙動

flex-wrap nowrap nowrapは子要素を1行で表示します
align-items stretch stretchは子要素の高さを一番高い物に合わせます
justify-content flex-start flex-startは子要素の基準は左です
flex-direction row rowは子要素を左から右に書きます

flex-basis auto autoは子要素の幅をコンテンツサイズにします
flex-grow 0 0は子要素は伸長させない設定です
flex-shrink 1

1は子要素は縮小させる設定です

※1.区分の親要素は、flex-boxに指定するプロパティです。

※2.区分の子要素は、flex-itemに指定するプロパティです。

尚、上記のプロパティのデフォルト値を他の値に変更する事により表示形式を変更する事ができます。

以下に説明します。

2.1行表示の場合

2-1.親要素にalign-itemsを指定する

align-itemsは垂直方向の揃え方です。

書式はalign-items:××;になります。

 

stretch

flex-start flex-end center
意味

デフォルト
ストレッチします

上に揃えます 下に揃えます 中央に揃えます
表示

※1.上記以外にbaselineという指定方法がありますが上記htmlではflex-stratと表示は同じになります。

2-2.親要素にjustify-contentを指定する。

justify-contentは水平方向の揃え方です。

書式はjustify-content:××;になります。

設定値 意味 表示

flex-start

 

デフォルト

左基準

flex-end

 

右基準

center

 

中央基準

space-between

 

始めと最後を端にして他は均等

space-around

総てを余白を均等

2-3.親要素にflex-directionを指定する。

flex-directionは子要素を書く方向を指定します。

書式はflex-direction:××;になります。

設定値 意味 表示
row

デフォルト

左から右

row-reverse 右から左

column 上から下

column-reverse

 

下から上

2-4.子要素にflex-growを指定する。

flex-growは子要素を伸長させる方法を指定します。

書式はflex-grow:××;になります。

設定値 意味 表示

0

 

デフォルト

伸長しない

1

 

伸長させる

3.複数行表示の場合

複数行表示にする為には下記を指定する必要があります。

flex-basis:××%;

flex-wrap:wrap;

上記を親要素に設定すると子要素が横画面一杯なると次の行に書かれます。

 メモ

横に5個並べる場合は下記になります。

.flex-item{margin:0 0.5%;flex-basis:19%}

計算式は、左右マージン1%×5個+19%×5個=100%

3-1.align-contentを設定する

align-contentは複数行にした時の縦方向に余白がある場合の揃えになります。

設定値 意味 表示
stretch

デフォルト

枠一杯にストレッチする 

flex-start 上に寄せる

flex-end 下に寄せる

center 中央に寄せる

space-between 1行目と最後の行を上下に合わせて他は均等配置

space-around 総てを均等に配置する

4.その他

PCは横に5個並べるが、タブレットは4個、スマホは2個にしたい等のニーズがあります。

その場合はメディアクリエータを使って処理します。

.flex-item{    /* PCの場合 */
flex-basis:19%;
 	margin:5px 0.5%;}
@media screen and (min-width:768px) and (max-width:991px){  /* タブレットの場合 */
	.flex-item{flex-basis:24%;}
}
@media screen and (max-width:767px){  /* スマホの場合 */
	.flex-item{flex-basis:49%;}
}

※1.flex-basisの代わりにwidthを使っても動作は同じです。

以上のFlexboxの機能を使うと、綺麗に画面が設計できます。