Google vs Facebook スマホサイトの横スライドメニューの比較

GoogleやFacebookのスマホサイトなどでおなじみの横スライドメニュー。(横からガッコんって出てくるやつ。
一見どのサイトも同じ動作かと思いきや、それぞれ仕様はかなり異なっています。

今回は、GoogleとFacebookの横スライドメニューの仕様の違いを比較してみます。
この観察によって、自分で横スライドメニューを実装する時に検討すべき仕様が見えてくるはずです。

スライドメニューを開く動作

slide open

Google

・開閉ボタンのtouchendイベントで開く
・イージングあり
・横スライドメニューの幅は240px
・開閉ボタンのサイズは48×48

> Facebook

・開閉ボタンのtouchendイベントで開く
・イージングなし
・横スライドメニューの幅は260px
・開閉ボタンのサイズは44×44
※スマホサイトの場合は、clickイベントは使わずtouchイベントを使います。
タッチした瞬間がtouchstart、タッチした指を離した瞬間がtouchendです。
ちなみにclickイベントで指定した場合はtouchend扱いになります。

ちなみに…

公式ガイドラインによると、ボタンのサイズはiOSでは44×44pt、Androidでは48×48dp以上が望ましいとされています(pt、dpは共に画面密度によらない抽象単位)。
Webの場合、CSS単位のpxがデバイスピクセルの差を吸収してくれるため、44×44px、48x48pxと考えてもいいでしょう。

ということで、GoogleのサイトがAndroidのガイドラインに準拠しているのは当然として、FacebookのサイトはiOSのガイドラインに従っている、というのもまた興味深いですね。

スライドメニューを閉じる動作

slide close

> Google

・スライドメニュー以外の領域のtouchstartイベントで閉じる、ただし開閉ボタン上ではtouchend
・イージングあり

> Facebook

・スライドメニュー以外の領域のtouchendイベントで閉じる
・イージングなし

スライドメニューのスクロール領域

slide scroll

> Google

・スライドメニュー内のみスクロール

> Facebook

・ページ全体がスクロール

スライドメニューが開いている時の動作

共通

・スライドメニュー以外の領域のタッチ動作を無効にする(リンク、フォーム、JavaScriptトリガーなど)

アドレスバーの扱いとスクロール

> Facebook

slide facebook

・アドレスバーを表示した状態でスライドメニューを開くと、強制的にアドレスバーが隠れる、つまり最上部にスクロールされる。閉じる時も同様。

> Google

slide google

・アドレスバーの有無、つまり高さに関わらずスライドメニューが開く。中途半端な高さでも問題ない。
・開閉時にオートスクロールもされないので、スライドメニューのスクロール位置が保持される

ということは…

slide google2

まず、アドレスバーの高さがある時にスライドメニューを開き、最下部までスクロールする。その状態でスライドメニューを閉じる。その後、アドレスバーの高さを変えて再度スライドメニューを開くと、アドレスバーの高さが減少、つまりページの高さが増加した分だけ、スライドメニューの下の領域を空けて相殺している。
これは、あくまでもスクロール位置を保持するためだと想像される。
この空白領域は、スライドメニューのtouchstartイベントで即座に解消される。

総評

ユーザビリティと実装の難易度を考慮すると、Googleサイトの方が細部へのこだわりが感じられます。
Facebookサイトの方は、実装の面でけっこう妥協している印象。

とは言え、スマホサイトにおける”完璧な実装“のポイントをどこに置くかは、かなり深い問題なので、一概がどちらが優れているとは言えません。

FacebookとGoogleのサイトトップを見比べてみると、それぞれのコンテンツ量の違いは明らかです。Googleのスライドメニューはコンテンツ量が少ないから最適と言え、仮にFacebookのサイトにそのまま実装した場合、スマホ実機の性能(JavaScriptの実行速度など)に依存してスライドメニューのスクロールがカクカクしてしまう恐れもあります。古い実機でもストレスなく閲覧できるこを重視して、OS依存、機種依存のない実装を選ぶのもまた正解であるとも言えます。

とは言え(2回目)、自分で横スライドメニューを実装するならば、Googleサイトくらい細部に拘った実装をしたいところですね。

で、実装方法はまた次の機会にッ

コメントを残す