要素を横並びにする方法はいくつか存在する。
一番おすすめはdisplay: flex;(flexbox)。
昔はfloat(とclearfixの組み合わせ)が使われていたが、flexboxが出てからは、そちらの方が主流。
横並びでもカルーセルを作成する場合は、
display: table;も使われたりするらしい。
目次
- 横並び
display: flex; display: flex;の注意点- 水平方向の位置とスペース調整
justify-content - 折り返す
flex-wrap: wrap; - 個別に並べ替えする
order: 数値 - 縦並びに戻す
flex-direction: column; - 参考リンク一覧
横並び display: flex;
通常要素は縦に積まれていく。この親要素に対してdisplay: flex;を指定すると横並びになる。
↓ display: flex;
<divclass="flexbox"><div>要素1</div><div>要素2</div><div>要素3</div><div>要素4</div><div>要素5</div></div>.flexboxdiv{background:skyblue;margin:10px;width:200px;height:100px;}.flexbox{display:flex;}display: flex;の注意点
高さは一番大きな要素に合う(画像も!)
flexの中の要素の高さに指定がない場合、一番高い要素の高さ自動で変更される。
実例
要素2が最も高さがある。
![]() |
|---|
↓ display: flex;
![]() |
|---|
高さが最も高い要素2に併せて伸びた。divタグだけでなく画像も縦にいっぱいに伸びてしまう。
これはflexboxの中の要素のcssを指定するalign-itemsというプロパティがデフォルトでstretch(引き伸ばす)になっているため。(normalでも同様になる)
高さを元に戻す方法
高さを元の要素の高さに戻す方法は2つある。
align-itemsの設定(親)align-selfの設定(子)
>moz align-items
>moz align-self
1. align-itemsの設定(親)
flexを設定した親要素がデフォルトで`align-items: stretch;となっているのでこれを変更すればいい。
center, flex-start, flex-endの3つだけ覚えておけば大丈夫そう。
| 値 | 内容 |
|---|---|
| stretch | デフォルト。一番高い要素に合わせて伸びる |
| normal | stretchと同じ。 |
| center | 中央寄せ。 |
| flex-start | 上に寄せる |
| flex-end | 下に寄せる |
| start | flex-startと同じ。 |
| end | 効かない。(flex-startと同じ) |
| baseline | ベースラインが一直線になるように配置 |
1-1. center
align-items: normal;align-items: stretch;
1-2. center
1-3. flex-start
align-items: flex-start;
1-4. flex-end
1-5. start
flex-startと同じ。。align-items: center;
1-6. end
Chromeでは効かない、、startと同じになった。
1-7. baseline
2. align-selfの設定(子)
flexboxの中身を一律で設定するのではなく、要素一つ一つを指定する方法。
使える値は、align-itemsとほぼ同じ。center, flex-start, flex-endを覚えておけばOK。
imgタグにのみalign-self: center;を適用した場合
それぞれ異なる値にした場合
各要素の横幅は各要素の中身の大きさになる(指定がない場合)
横幅の指定がない要素は、その要素の中ある要素の大きさになる。
↓ display: flex;
横幅を指定すれば、指定した長さになる。
▼コード
<divclass="flexbox"><div>要素1</div><p>要素2 ここはpタグ。</p><imgsrc="img/small-cat.jpg"alt=""><div>要素4</div></div>.flexboxdiv{background:skyblue;margin:010px;}.flexboxp{background:yellow;margin:010px;}.flexbox{border:solidlightgray1px;width:70%;display:flex;}親要素に収まるように横幅が自動調整される
中の要素にwidthを指定している場合でも、親要素の幅が縮まると合わせて小さくなる。折り返しはされない。
↓ 親要素の幅を縮める(グレーの枠線)
min-width以下にはならない
min-widthを設定している場合は、その値が守られる。
親要素の幅を超える場合ははみ出る。
要素は左寄せになる
display: flex;を適用した場合、中の要素は水平方向で左寄せになる。
グレーの親の枠線に対して左に寄っているのがわかる。
水平方向の位置とスペース調整 justify-content
justify-contentプロパティを使うと、要素を水平方向で調整できる。
| 値 | 内容 |
|---|---|
| flex-start | デフォルト。左寄せ |
| start | デフォルトと同じ。 |
| center | 中央寄せ |
| flex-end | 中央寄せ |
| end | 機能しない。(デフォルトと同じ) |
| space-evenly | 均等に配置 |
| space-between | 均等に配置。ただし、最初のアイテムは先頭寄せ。最後のアイテムは末尾寄せ。 |
| space-around | 均等に配置。ただし、各アイテムの両側に半分の大きさの間隔を置く |
1. flex-start
2. center
3. flex-end
4. space-evenly
justify-content: space-evenly;
5. space-between
justify-content: space-between;
6. space-around
justify-content: space-around;
▼point1
デフォルトでは中の要素が縦方向にstretchしてしまうため、align-itemsやalign-selfと合わせて使うのが一般的。
.flexbox{display:flex;justify-content:space-evenly;align-items:center;}
▼point2space-*を使った状態でmarginを適用することもできるがわかりにくいため、任意でスペースを開けたい場合は、space-*を使わず、個別にmarginを設定していく方が調整しやすい。
折り返す方法 flex-wrap: wrap;
親要素にflex-wrap: wrap;を指定すると、親要素の横幅に合わせて折り返すことができる。デフォルトはno-wrapになっている。
| 1 | 2 |
|---|---|
| wrap | 折り返し |
| wrap-reverse | 逆順で折り返し |
| no-wrap | 折り返しなし |
実例
↓ flex-wrap: wrap;
wrap-reverseの場合
flex-wrap: wrap-reverse;
個別に並べ替えする order: 数値
orderプロパティを使うと指定した順番で並べ替えることができる。
自分の現在位置をorder: 0として、移動した個数を-2や2のように指定する。
↓ imgタグに-2を設定
.flexboximg{order:-2;}
▼注意点
どれか一つの要素が動いた場合、動いた後の現在位置がorder: 0になる。
縦並びに戻す flex-direction: column;
display: flex;を適用すればデフォルトで横並びになるが、メディアクエリなどで再度縦並びに戻したい場合は、以下を追記する。
flex-direction: column;
ちなみにデフォルトの横並びはflex-direction: row;が省略されている。
実例
↓ flex-direction: column;
display: flex;のみの時と同じく親の横幅に合わせてstretchする。
元のサイズに戻したい場合は、親にaligh-itemsか子にalign-selfを使う。
<divclass="flexbox"><div>要素1</div><p>要素2 ここはpタグ。</p><imgsrc="img/small-cat.jpg"alt=""><div>要素4</div></div>.flexboxdiv{background:skyblue;margin:010px;min-width:200px;height:100px;}.flexboxp{background:yellow;margin:010px;min-width:150px;height:100px;}.flexbox{border:solidlightgray4px;width:70%;display:flex;flex-direction:column;align-items:center;}

























