flexboxのゲームやって学んだことをまとめてみた

## はじめに
最近、HTMLとCSSをしっかりかけるように、Progateをやり始めました。
flexboxについてもっと勉強をしようと思い、[このゲーム](https://flexboxfroggy.com/#ja)をやってみました。

ゲームなので、理解がしやすいです。１つ１つにしっかり説明がついているので、問題につまった時に、また戻って確認できるのでとても便利です。

## justify-content
アイテムを水平方向に並べるもの（横の並べ方をきめるみたいな感じです）

* flex-start: コンテナーの左側に並ぶ
* flex-end: コンテナーの右側に並ぶ
* center: コンテナーの中央に並ぶ
* space-between: アイテム同士の間に等しい間隔を開けて表示
* space-around: アイテムは周囲に等しい間隔を開けて表示

※注意するところは、`between`と`around`の違いです

`between`は、アイテム同士の間にのみ等しい間隔を開けます。ですが、`around`は周囲なので、アイテム同士の間隔だけでなく、左右の間隔なども等しくしてくれます。

<p class="codepen" data-height="265" data-theme-id="default" data-default-tab="html,result" data-user="mei1161" data-slug-hash="JjoeVwE" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="justify-content">
  <span>See the Pen <a href="https://codepen.io/mei1161/pen/JjoeVwE">
  justify-content</a> by mei (<a href="https://codepen.io/mei1161">@mei1161</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>



## align-items
アイテムを垂直方向に並べるものです。（縦の並べ方をどうするか決めるみたいな感じ）

* flex-start: コンテナーの上部に並ぶ
* flex-end: コンテナーの下部に並ぶ
* center: 垂直方向の中央に並ぶ
* baseline: アイテムはコンテナーのベースラインに表示される
* stretch: アイテムはコンテナーの大きさに合うよう広がる

`stretch`だと`flexbox`の高さに合わせて、アイテムのサイズが自動的に伸び縮みする感じですね！

<p class="codepen" data-height="265" data-theme-id="default" data-default-tab="css,result" data-user="mei1161" data-slug-hash="Powxvqx" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="align-items">
  <span>See the Pen <a href="https://codepen.io/mei1161/pen/Powxvqx">
  align-items</a> by mei (<a href="https://codepen.io/mei1161">@mei1161</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

## flex-direction
コンテナー内でアイテムが配置される方向を決める（配置の仕方を決める）

* row: アイテムは文章と同じ方向に並びます
* row-reverse: アイテムは文章と同じ方向にアイテムの順番を逆にして並べます。
* column: アイテムの順番を変えずに、縦方向に配置
* column-reverse: アイテムの順番を逆にして、縦方向に配置

reverseがつくとアイテムの順番が変わることを覚えておきましょう！

※reverse,columnなどを使用する場合、他の配置などにも影響する可能性があるので気をつけてください！

<p class="codepen" data-height="265" data-theme-id="default" data-default-tab="html,result" data-user="mei1161" data-slug-hash="eYmQwGK" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="flex-direction">
  <span>See the Pen <a href="https://codepen.io/mei1161/pen/eYmQwGK">
  flex-direction</a> by mei (<a href="https://codepen.io/mei1161">@mei1161</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

## order
アイテムはデフォルトで０の値を取るが、正や負の整数値を設定することで、アイテムの位置を変えたりすることができる。

※同じクラスを１としてみるので、要素の数で正負の整数値を設置しない場合もある。

<p class="codepen" data-height="265" data-theme-id="default" data-default-tab="css,result" data-user="mei1161" data-slug-hash="GRgwbxZ" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="order">
  <span>See the Pen <a href="https://codepen.io/mei1161/pen/GRgwbxZ">
  order</a> by mei (<a href="https://codepen.io/mei1161">@mei1161</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

## align-self
align-itemsと同じ値を設定することができる。
指定したアイテムのみ変更することができる。

## flex-wrap
行におさめるように設定したり、アイテムを他の行に折り返したりするかを設定することができる。

* nowrap: 全てのアイテムを１行にフィットさせる
* wrap: アイテムは他の行へ折り返す
* wrap-reverse: アイテムを逆順にし、他の行へ折り返す。

<p class="codepen" data-height="265" data-theme-id="default" data-default-tab="html,result" data-user="mei1161" data-slug-hash="ZEYVQeZ" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="flex-wrap">
  <span>See the Pen <a href="https://codepen.io/mei1161/pen/ZEYVQeZ">
  flex-wrap</a> by mei (<a href="https://codepen.io/mei1161">@mei1161</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

## flex-flow
flex-direction(縦方向の並び方）とflex-wrap(行を折り返すかどうか)一緒にしたもの。

これを使うと一気に設定することができる
１つ目に`flex-direction`の指定、2つ目にflex-wrapの設定をいれます。
(逆でもOK)

## align-content
複数の行が他の行とどういう風にどう距離を取り広がるかを指定する。

* flex-start: コンテナーの上側に詰められる
* flex-end: コンテナーの下側に詰められる
* center: コンテナーの中央に詰められる
* space-between: 行はその間に等しい間隔を空けて表示される
* space-around: 行はその周囲に等しい間隔を空けて表示される
* stretch: 行はコンテナに合うように引き延ばされる

`space-between`だとアイテム同士の行間が調整されます。
`space-around`では、上下の間もしっかり等しい間隔を空けます。
※１行だけの場合は`align-content`を使用しても、効果がないので注意！


<p class="codepen" data-height="265" data-theme-id="default" data-default-tab="html,result" data-user="mei1161" data-slug-hash="eYmbZzZ" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="align-content">
  <span>See the Pen <a href="https://codepen.io/mei1161/pen/eYmbZzZ">
  align-content</a> by mei (<a href="https://codepen.io/mei1161">@mei1161</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

## 最後に
`column` `wrap` `reverse`を使うと位置関係が、少し変わるので、難易度が高くなるような気がします。
このゲームを通して、flexboxの苦手意識を少しでも、無くして行けるといいと思います。