概要
横スクロールの実装でflexboxを使ったのでそのメモ。
横スクロールの実装
まず、横スクロールさせるブロックとそのアイテムの親子要素を用意します。
<div class="parent">
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
</div>
<style>
.parent{
height: 100px;
width: 300px;
background-color:cornflowerblue;
}
.child{
height: 80px;
width: 80px;
margin: 10px;
background-color: aquamarine;
}
</style>
![画像1.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F305206%2F18b351ba-05a8-42d2-43f1-9ad2895916c7.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=64af127ab32a28c7ab4e2d0ae299f99e)
親要素にflexboxにするdisplay: flex;
とoverflow-x: scroll;
を指定します。
<style>
.parent{
display: flex;
overflow-x: scroll;
}
</style>
![画像2.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F305206%2F790816ae-444a-5fa3-d962-2a9148aa0e58.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=dd258a3f3598108738de5bce8fcfcae4)
このままだと、画像のように子要素がオーバーフローするとき、親要素に合わせて、
子要素の幅が変更されてしまうので、以下の方法のいずれかで子要素のサイズを指定します。
1. flex-basisの指定
まず、1つ目の方法は子要素のflex
の指定です。
flex-basis
だけだと拡縮されてしまいます。
<style>
.child{
//1つ目の要素は余裕があるときどのくらい拡大するか, 2つ目の要素は余裕がないときどのくらい縮小するか
flex: 0 0 80px;
}
</style>
2. 子要素のmin-widthの指定
2つ目の方法は子要素のmin-width
の指定です。
子要素にmin-width
を指定するとオーバーフローしてもmin-width
未満にならないためスクロールできます。
<style>
.child{
min-width: 80px;
}
</style>
![画像3.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F305206%2F96b2d684-a765-d3b8-94b0-b13f16e7535f.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=f600801fe2734e386b620d5565d54765)