スマホページで最近増えているのがフリックできる横スクロールです。リストで表示するより小スペースで一覧を表示できる便利なUIです。
楽天市場やYahooショッピングのページでも使われていて、自分でも同じような横スクロールを実装したいと考え作ってみました。
基本的なHTMLとCSSだけで作成できるので、コピペで簡単に実装することができます。
それでは具体的な方法を順を追って説明していきます。サクッとデモだけ確認したい方は目次より移動してください。
参考にした横スクロールUI
僕が参考にしたのは楽天市場のスマホページに載っている横スクロールです。
商品ページの下の方に「この商品を買った人はこれも」、「ショップの人気商品ランキング」といった横スクロールがあります。
今回はこれらの横スクロールデザインを参考に作っています。
実装する横スクロールのポイント
レスポンシブに対応
スマホとPCで表示方法を変えたレスポンシブ対応です。
スマホでは横スクロール、PCでは横一列で並びます。
Javascriptを不使用
HTMLと簡単なCSSだけで動作します。
お好みでCSSを使って装飾してください。
場所を取らない
スマホページをPCと同じボリュームで作ると縦に長くなりがちです。
その点、横スクロールはUIは小さいスペースに複数の要素を並べられるため、グリッドUIと比べると場所を取りません。
横スクロールを実装する
それでは具体的な横スクロール実装方法について解説していきます。
HTML
横並びにする要素の親要素にclass=”horizontal_scroll”を付与する。
class名は任意の名前に変更可能です。HTMLとCSSのclass名を合わせるようにしてください。
また、サンプルではul、liを使用していますが、div、sectionなどでも代用可能です。
CSS
CSSで大事なのは以下の2点です。
- display: flex;
- overflow-x: scroll;
display: flex;で要素を横並び、overflow-x: scroll;で横スクロールできるようにしています。
-webkit-overflow-scrolling: touch;はiOSでの横スクロールを滑らかな惰性スクロールにする効果があります。
また、画面幅が768px以上の時はoverflow-x: inherit;を指定して横スクロールを解除します。
デモ
実際に実装したデモを用意しました。どうぞご確認ください。
See the Pen スマホで横スクロールUI(ランキング形式) by ざきひー (@zakihiii) on CodePen.0
おまけ:デモ用のデザインCSS
デモはランキング形式の横スクロールです。デザインの体裁を整えるため、順位と価格表記のCSSを追加しています。
まとめ
横スクロールUIはPCには不向きですが、小スペースで設置できるためスマホに最適な解の一つです。
また、ネットショップの関連商品やランキングの表示に使えば回遊性が高まり非常に効果的でもあります。
最後に楽天市場に横スクロールを設置するときの注意点、
楽天市場アプリでは横スクロールをフリックでうまく動かせません(特にAndroid版)
スマホの商品説明文には横スクロールを設置しないようにしましょう。代わりに商品またはカテゴリページの共通パーツに設置することを推奨します。
それでは今回はこのへんで。
コメント
こちらのサイトを参考にさせていただいております。
初心者のため分からないことが多く、もし可能でしたら教えていただきたいことがあります。
今回の「スマホの横スクロールUIをCSSで実装する方法」を実装した場合、PCでの表示は設定している横幅に合わせて画像が縮小されます。
これを下記のようなサイトのような表示にしたい場合、どこを変更すれば良いのでしょうか。
https://paypay.ne.jp/guide/start/
上手く説明できませんが、PC表示では画像の大きさを統一しつつ、スマホではそれらを横スクロールで表示にしたいと考えています。
ご回答いただけますと幸いです。
よろしくお願いいたします。
はじめまして!
本サイトをご覧いただきありがとうございます。
PayPayのサイト拝見しました。PCではグリッド表示にしたいということで良かったでしょうか?
↓本ページのCSSを修正しました。よければ試してみてください。
.horizontal_scroll {
overflow-x: scroll;
-webkit-overflow-scrolling: touch;
padding: 0 0 12px 8px;
display: -ms-flexbox;
display: flex;
}
/* 画面幅が768px以上の場合、横スクロールを解除 */
@media screen and (min-width: 768px) {
.horizontal_scroll {
overflow-x: inherit;
padding: 0 0 6px 5px;
-webkit-flex-wrap: wrap;
flex-wrap: wrap;
}
}
.horizontal_scroll>li {
min-width: 140px;
-webkit-flex-shrink: 0;
flex-shrink: 0;
width: calc(33.33333% - 5px);
}
@media screen and (min-width: 768px) {
.horizontal_scroll>li {
min-width: inherit;
margin-bottom: 48px;
}
}
.horizontal_scroll>li:not(:last-child) {
margin-right: 5px;
}
.horizontal_scroll>li:last-child {
padding-right: 5px;
}
@media screen and (min-width: 768px) {
.horizontal_scroll>li:last-child {
padding-right: 0;
}
}
.horizontal_scroll img {
max-width: 100%;
vertical-align: bottom;
}
不明点等ありましたらお気軽にどうぞ。
お世話になっております、大変参考させていただきました。
本当にありがとうございます。
ただ、申し訳ございませんが、
上記のHTML,CSS通り、ヤフーショッピングのスマホ商品ページに実装致しましたが、横並びでなく、縦並びになっています。
失礼ですが、調整方法をお伝え頂けますでしょうか?
心よりご返事をお待ちしております。
お手数ですが、どうぞよろしくお願いいたします。
こちらこそ、本サイトをご覧いただきありがとうございます。
前提としてYahooショッピングのスマホページは外部CSSが利用できません。インラインスタイル(style属性)に変換して実装してください。詳しくは別記事で解説しております。
» Yahooショッピングのスマホページに横スクロールを設置する
インラインで書いている場合、.horizontal_scrollにdisplay:flexを書いていない可能性があります。
display:flexが記述されている場合は.horizontal_scrollにflex-wrap:nowrapを記述すると横並びになるかもしれません。
よければ参考にしてください。
こちら大変参考にさせて頂いております。
私の方もヤフーショッピングにて使用したいと思っておりますが、横並びでなく
縦並びになってしまいます。
CSS,HTMLは全て上のHTMlをコピペで使用しています。
ヤフートリプルへCSSはファイル名を「horizontal_scroll.css」として
アップロードしています。HTML記述にも
.horizontal_scroll {
overflow-x: scroll;
-webkit-overflow-scrolling: touch;
padding: 0 0 12px 8px;
display: -ms-flexbox;
display: flex; }
この部分は入っています、またflex-wrap:wrapというのも試してみましたがうまくいきません。他に調整方法がございましたらぜひお返事をお待ちしております。
本サイトをご活用いただきありがとうございます!
※まずYahooショッピングのスマホ商品ページは外部CSS利用不可ですので本記事の方法では実装できません。
↓こちらの記事の方法で実装します。
» Yahooショッピングのスマホページに横スクロールを設置する
Yahooトリプルのページでしたら本記事の方法で実装できます。
下の流れで実装状況を確認して誤りがあれば修正してください。
1. linkタグのCSSへのパスが間違いがないか確認する。
2. パスが合っていれば.horizontal_scrollにflex-wrap:nowrapを追記する。
検証して改善しない場合は下の別の方法で試してみてください。
.horizontal_scroll {
overflow-x: scroll;
-webkit-overflow-scrolling: touch;
padding: 0 0 12px 8px;
display: -ms-flexbox;
display: flex;
list-style: none;
}
.horizontal_scroll>li {
min-width: 140px;
-webkit-flex-shrink: 0;
flex-shrink: 0;
width: calc(33.33333% - 5px);
}
.horizontal_scroll>li:not(:last-child) {
margin-right: 5px;
}
.horizontal_scroll>li:last-child {
padding-right: 5px;
}
.horizontal_scroll img {
max-width: 100%;
vertical-align: bottom;
}
以上です。よろしくおねがいします。
ご連絡ありがとうございました!出来ました(*^^*)
CSSはあまりいじったことが無かったですが、出来て良かったです。
丁寧にご連絡ありがとうございました!