最近のホームページでも、またはアプリケーションでも時々見かけますが、スマホで見る際に要素が画面外にまで伸びてて、スワイプするとその要素を画面内に横スクロールでするりと表示させるようなもの(表現がわかりにくいですね。ごめんなさい)のご紹介になります。
以前の記事(スマホサイトのナビゲーションに横スクロールを採用しては?)の改良版といいますか、PCの時は折り返しができて、スマホになると横並びでスクロールできるので、無駄なスペースを省き、UIの改善にもつながるのではないでしょうか?
完成イメージ

例えば画像付きのリスト表示をしたい際に、その数が多い場合、PCではいい感じに表示されるのに、スマホの場合だと多すぎるというか、縦に伸びすぎてしまって、それはそれでユーザーにストレスを与えてしまいかねません。そこでスマホの場合はある程度要素の幅を持たせながら、少し画面外に次の要素を見切れるように設置することで、ユーザーにスワイプしたら次の要素が表示できるんだと暗に示し、それでいてコンパクトに収まるような仕組みです。
実装方法
親要素にflexを使って横並びにし、PCなどの場合のみflex-wrap:wrapで折り返しを可能にします。-webkit-overflow-scrolling: touch(画面外からのスクロールにぬるっと動かすための指示)はもう不要なので(iPhoneのSafariがデフォルトでぬるっと動くようになりました。)入れなくて結構です。
子要素にPCの時に指定したい幅を指定します。
スマホ幅になったら親要素に折り返しを禁止します。(flex-wrap:no-wrap)同時にX軸のはみ出た部分にスクロールを可能にします。(overflow-x:scroll)
子要素にmin-widthを追加して、次の要素が見切れるようにします。
<div class="wrapper">
<div class="youso">
1
</div>
<div class="youso">
2
</div>
<div class="youso">
3
</div>
<div class="youso">
4
</div>
<div class="youso">
5
</div>
<div class="youso">
6
</div>
<div class="youso">
7
</div>
<div class="youso">
8
</div>
<div class="youso">
9
</div>
<div class="youso">
10
</div>
</div>
.wrapper{
display: -webkit-box;
display: flex;
}
.youso{
width:20%;
padding:5vw;
display: -webkit-box;
display: flex;
align-items: center;
justify-content: center;
}
@media screen and (min-width: 600px){
.wrapper{
flex-wrap: wrap;
}
}
@media screen and (max-width:599px){
.wrapper{
flex-wrap: nowrap;
overflow-x: scroll;
}
.youso{
width:100%;
min-width:60%;
}
}
完成デモ
デモがありますのでそちらご覧ください。
実装例
Bino佐賀武雄様サイトトップページのLINE UP部分にこの応用を利用しています。
株式会社アルラボ 代表取締役
Google広告の認定資格保持者。短期的なキャンペーンマーケティングだけでなく長期的なマーケティングが得意。
建築業関連の案件に数多く携わっています。
最近行けてないけどキャンプが好き。