Bulma でメルカリ風のレスポンシブなデザインにする方法
はじめに
OSS の CSS Framework Bulma を使って、メルカリ風のレスポンシブなデザインを構築する方法について整理した。
「メルカリ風のレスポンシブなデザイン」というのは、
- デスクトップなどでは「サイドバー」+「コンテンツ」
- モバイルでは「サイドバー」が非表示になり、クリック(タップ)で表示される
というような構成を意味している。
TL;DR
- モバイル表示時には隠したい部分に
is-hidden-mobile
クラスを付与する - モバイル表示時に隠した要素を表示するためのボタンなどに
is-hidden-tablet
クラスを付与する - 上記ボタンをクリックした時に
is-hidden-mobile
をトグル(On/Off)する - 全体のデザインは
columns
+column
+is-<n>-<device>
で調整する
目次
環境・条件
- Bulma v0.7.5
- jQuery v3.4.1
is-hidden-mobile
クラスのトグルに使ったが、同じことができれば素の JS でも良い
詳細
Bulma を使ったウェブサイトを作っていて、メルカリのような
- 「デスクトップ: サイドバー(検索バー) + コンテンツ」
- 「モバイル: サイドバー(検索バー)がデフォルト非表示になって、クリックすると表示」
という構成の作り方に試行錯誤したので忘れないように整理した。
イメージは以下の GIF 動画の通り。
完成イメージ
まずは完成イメージ、CodePen で書いたのでウィンドウサイズ(1x
, 0.5x
, 0.25x
のとこ)を変更すると挙動が確認できると思う。
See the Pen [Bulma] メルカリ風の構成(サイドバー、コンテンツ) by 17num (@17num) on CodePen.
リンク: [Bulma] メルカリ風の構成(サイドバー、コンテンツ)
※Slim で記述しているので、素の HTML が見たい場合は下にある「View Compiled」をクリック。
ポイント
細かい部分は省略して、ポイントとなる部分だけ簡単に整理しておく。
Responsive helpers を活用
Bulma には Responsive helpers と呼ばれる便利なクラスが用意されている。その中の Hide の項に書かれている通り、特定のサイズで非表示にする is-hidden
というクラスがある。
上記画像の通り is-hidden-mobile
と is-hidden-tablet
を組み合わせることで、「モバイルでしか表示しない要素」と「タブレット以上で表示する要素」とを実現できる。
1 | <div class="columns is-multiline is-mobile is-tablet is-desktop"> |
あとは検索フォームを開閉するボタンにトリガーを設定すれば良い。表示/非表示 の切り替えは is-hidden-mobile
クラスをトグル(On/Off) することで実現している。jQuery を使っているが、別に素の JS で addEventListener
を使っても良い。
1 | $(window).on("load", () => { |
全体デザイン
全体の配置はカラムレイアウト(Bootstrap などでもおなじみのアレ)で実現。サイズなどは Column sizes などを参考に適宜調整する。
1 | <div class="columns is-multiline is-mobile is-tablet is-desktop"> |
まとめ
- モバイル表示時には隠したい部分に
is-hidden-mobile
クラスを付与する - モバイル表示時に隠した要素を表示するためのボタンなどに
is-hidden-tablet
クラスを付与する - 上記ボタンをクリックした時に
is-hidden-mobile
をトグル(On/Off)する - 全体のデザインは
columns
+column
+is-<n>-<device>
で調整する
参考文献
- Documentation | Bulma: Free, open source, & modern CSS framework based on Flexbox
- 知っておくと少し幸せになれるBulmaを使い方6選 | とんよー。ブログ
- さらに知っておくと少し幸せになれるBulmaを使い方+5選 | とんよー。ブログ
- Bulma チートシート – スタイル&レイアウト編|ProgLearn - プログラミング総合情報サイトプログラーン
関連記事
- Bulma で画像を重ねて表示する方法
- vue-web-extension を使って Chrome 拡張機能を開発する方法
- CSS の display:none と visibility:hidden について
- jQuery Select2 で、初期値の設定と選択状態のクリア
- Laravel で現在の URL 取得方法まとめ
- JavaScript で画像をローカルにダウンロード
- JavaScript で URL のクエリパラメータを操作する方法
- axios で添付ファイルありのリクエスト(multipart/form-data の POST)