HTMLを装飾するCSSにおいて、Flexboxのjustify-contentについて気になる使い方があったので備忘録にまとめておく。
まずは基本となるHTMLコードは下記を使用。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div class="flex-container"> <div class="flex-item">fbox1</div> <div class="flex-item">fbox2</div> <div class="flex-item">fbox3</div> <div class="flex-item">fbox4</div> <div class="flex-item">fbox5</div> </div> </body> </html>
flex-start
CSSファイルは下記が基本形。
今回はこの.flex-containerのjustify-content: の部分を変更する。
8行目、.flex-containerのjustify-content: をflex-startに設定すると、コードの下の様に、
flex-direction: row; width: 400px;の始まり(ここでは左)からの並びになる。
.flex-container { display: flex; flex-direction: row; width: 400px; height: 200px; border: 1px solid gray; background: lightcyan; align-items: center; justify-content: flex-start; } .flex-item { width: 50px; height: 50px; background: rgb(0, 238, 255); } .flex-item:nth-of-type(odd) { background: rgb(0, 255, 85); }
flex-end
同じ場所をflex-endに設定すると、逆に終わり(ここでは右)からの並びになる。
center
同様に、centerに設定すると、中央に並ぶ。
space-between
そして、justify-contentをspace-betweenに設定すると、等間隔で並ぶ。
space-around
そして、justify-contentをspace-aroundに設定すると、それぞれのBoxの両端を含めて等間隔で並ぶ。
組み合わせ
以上の基礎を元に、少し設定を変えたり組み合わせてみる。
両サイドにボタン
CSS文のjustify-contentはspace-betweenに設定、HTML文の11行目以降について、fbox3以降をコメントアウト。
<div class="flex-container"> <div class="flex-item">fbox1</div> <div class="flex-item">fbox2</div> <!-- <div class="flex-item">fbox3</div> <div class="flex-item">fbox4</div> <div class="flex-item">fbox5</div> --> </div>
するとこの2つのboxは両端に来る。
space-betweenなら確かにこうなる。
グループ分け(縦)
コメントアウトを戻して、fboxをdivで123と45のグループに分けてみる。
<div class="flex-container"> <div> <div class="flex-item">fbox1</div> <div class="flex-item">fbox2</div> <div class="flex-item">fbox3</div> </div> <div> <div class="flex-item">fbox4</div> <div class="flex-item">fbox5</div> </div> </div>
グループごとに左右に分かれた。
グループ分け(横)
このdivタグにflex-containerのクラスを付けると、それぞれのグループでspace-betwenが適用される。
<div class="flex-container"> <div class="flex-container"> <div class="flex-item">fbox1</div> <div class="flex-item">fbox2</div> <div class="flex-item">fbox3</div> </div> <div class="flex-container"> <div class="flex-item">fbox4</div> <div class="flex-item">fbox5</div> </div> </div>
不要な線を消す
真ん中の線が邪魔なので消したい場合、まず.flex-containerのborderをコメントアウト、これで外の枠線が消える。
次に大枠のクラスflex-bigcontainerを作成、display、flex-directin、borderを設定。
.flex-container { display: flex; flex-direction: row; width: 400px; height: 200px; /* border: 1px solid gray; */ background: lightcyan; align-items: center; justify-content: space-between; } .flex-item { width: 50px; height: 50px; background: rgb(0, 238, 255); } .flex-item:nth-of-type(odd) { background: rgb(0, 255, 85); } .flex-bigcontainer { display: flex; flex-direction: row; width: 400px; border: 1px solid gray; }
左側と右側の表示を変える
flex-containerをlとrに分け、flex-containerrのjustify-contentはflex-endとすると、左は等間隔に、右は右詰めで表示にできる。
<div class="flex-bigcontainer"> <div class="flex-containerl"> <div class="flex-item">fbox1</div> <div class="flex-item">fbox2</div> <div class="flex-item">fbox3</div> </div> <div class="flex-containerr"> <div class="flex-item">fbox4</div> <div class="flex-item">fbox5</div> </div> </div>
.flex-containerl { display: flex; flex-direction: row; width: 400px; height: 200px; /* border: 1px solid gray; */ background: lightcyan; align-items: center; justify-content: space-between; } .flex-containerr { display: flex; flex-direction: row; width: 400px; height: 200px; /* border: 1px solid gray; */ background: lightcyan; align-items: center; justify-content: flex-end; } (以下略)
入力画面風に
この並びで入力画面を並べるイメージは下記。
HTMLで左からid/種別/項目/編集/削除ボタンを並べる。
<div class="flex-bigcontainer"> <div class="flex-containerl"> <div class="flex-item">id</div> <div class="flex-item">種別</div> <div class="flex-item">項目</div> </div> <div class="flex-containerr"> <div class="flex-item">編集</div> <div class="flex-item">削除</div> </div> </div>
最終的なCSS
並びは同様、それぞれのボックス内の文字を中央に寄せる為、
display: flex;
align-items: center;
justify-content: center;
を追記。
.flex-containerl { display: flex; flex-direction: row; width: 400px; height: 200px; /* border: 1px solid gray; */ background: lightcyan; align-items: center; justify-content: space-between; } .flex-containerr { display: flex; flex-direction: row; width: 400px; height: 200px; /* border: 1px solid gray; */ background: lightcyan; align-items: center; justify-content: flex-end; } .flex-item { width: 50px; height: 50px; background: rgb(0, 238, 255); display: flex; align-items: center; justify-content: center; } .flex-item:nth-of-type(odd) { background: rgb(0, 255, 85); } .flex-bigcontainer { display: flex; flex-direction: row; width: 400px; border: 1px solid gray; }
Flexboxはブロック分けと組み合わせると、より自由なレイアウトが出来る事、
Flexboxには
“align-items: center;” => 縦(交差軸=Cross axis)の位置を調整
“justify-content: center;” => 横(主軸=main axis)の位置を調整
の設定がありこれを使うと中央寄せが楽にできる。
と言う事が事が分かった。
この辺りの詳細については下記も読みたい。
「アイリスオーヤマ 電動ドライバー 充電式 軽量 RD110」
箪笥のレールが壊れ取り替えが必要になった際に買った電動ドライバー。
当初どれだけ使えるものか半信半疑だったが、操作が簡単、手元を照らすライトも便利、結構パワフルと三拍子揃っていて、とても便利に使えた。
今は13%オフ、たまにある安いタイミング。
コメント