display: flex
でjustify-content: space-around
とかしたときにoverflow: auto
でうまくスクロールできない現象があったのでその回避方法です。
- 横幅に余裕がある場合は均等配置
- 横幅が足りなければスクロール
といったことをしたい状況とします。
サンプル
はじめに成功と失敗のサンプルを置いておきます。
https://codepen.io/totoraj930/pen/VGpxvb/
問題点
justify-content
で配置すると中心が基準となるspace-around
,space-evenly
,center
で親要素からはみ出した時に左側にスクロールできなくなる。
回避策
margin
を使って独自に実装してしまう。
仕様は下記を参考に。
justify-content - CSS: カスケーディングスタイルシート | MDN
space-around
各アイテムの両側に均等に余白を分配する。
/* .flex-listが親でliが子の場合*/
.flex-list li {
margin: 0 auto;
}
flex
アイテムのmargin
がauto
の場合すべて均等に分配されるためこれだけで実現できます。
space-evenly
余白がすべて均等に分配される。
/* .flex-listが親でliが子の場合*/
.flex-list li {
margin: 0 auto;
}
.flex-list:before,
.flex-list:after {
content: "";
width: 0;
visibility: hidden;
margin-left: auto;
}
space-around
とほとんど同じですが最初と最後のアイテムのmargin
を 2 倍にするために親の疑似要素にもmargin
を設定します。
center
アイテムを中央に寄せる
/* .flex-listが親でliが子の場合*/
.flex-list li:first-child {
margin-left: auto;
}
.flex-list li:last-child {
margin-right: auto;
}
最初と最後のアイテムだけmargin
を設定して中央に寄せます。
おわりに
今回は横方向ですが縦方向でも同様に実装することが可能です。
これで横並び均等配置ではみ出したらスクロール可能なメニューが爆速でつくれる。
・・・ま、まぁ使う場面は限られてくるだろうけど。