クオリティに拘れば、ユーザによる拡大縮小 (user-scalable=yes) と メニューなどの位置固定 (position:fixed) は排他的?!

iOS + Safari、Android + Chrome、Android + Browser の制約を考慮すると、ユーザの意思による拡大縮小と、メニュー (あるいはナビ) を画面上部に (ネイティブアプリのように完全に) 位置固定することは困難さがあります。Webアプリやレスポンシブな Webサイトのデザインにおいて、動きのクオリティに拘る場合は、拡大縮小とメニューの位置固定は排他的なものと考えた方が良いかもしれません。

ユーザビリティの観点からみて、
スマホやタブレットでは
ユーザの意思による拡大縮小を妨げる
べきではないという考え方があります。

それとは別に、ネイティブアプリのように
画面の上部や下部にメニュー等の位置を
固定したいという希望が出る場合もあります。

そこで、以下の 3つ条件をサポート範囲として
ユーザによる拡大縮小とメニューの位置固定の
両立について考えてみます。

  • iOS + Safari
  • Android + Chrome
  • Android + Browser (Androidの標準ブラウザのこと)

※iOSは5.x以降、Androidは4.x以降

まず、ネイティブアプリのように
メニューの位置を固定するには
position:absolute と ページ内スクロール
(-webkit-overflow-scrolling:touch;) という
やり方が 1つあります。

これによりメニューの位置を固定でき、
それ以外の領域はオーバーフローさせることで
-webkit-overflow-scrolling によって
モーメンタム (慣性) スクロールも可能です。

しかし、iOS 5 では子要素がタッチ不能となる
症状があるようなので採用し難いところがあります。

-webkit-overflow-scrolling を使えないとすると
スクロール中も Javascript でメニュー位置を
計算して移動・追従できれば良いわけですが、
iOS + Safari ではスクロール中の
Javascript の実行は制限されるため
これは実現できません。
つまり、スクロール終了後、突然に
メニューが移動してくるという見え方になります。

それではと、iScroll などのスクリプトを
使用する方法も考えられます。
その場合は、動的な内容の変動や、
select要素などをタップできる必要があると、
スクロールにちょっと手を加える必要性が出てきます。
また、ちょっと重いので内容満載のページだと困ります。

ですから、制約が少なく、それでいて
ネイティブアプリのようにメニューが
指定の位置にキレイに固定できるように
するためには position:fixed を使う
ことになるのではないかと思います。

position:fixed を使用している場合に
ピンチイン / ピンチアウトで拡大縮小を
行うと、position:fixed した要素が
ふらふらと動いてしまいます。
これを防ぐには拡大縮小を無効化する必要性が出てきます。

なお、今回のサポート範囲としては考えませんが、
Android 2.x 系では position:fixed を
使用するには viewport にて
user-scalable=no の指定が必須です。

このようなわけで、
ユーザによる拡大縮小 (user-scalable=yes) と
ネイティブアプリのようにキレイな
メニューの位置固定 (position:fixed) を
両立するのはちょっと困難なように思われます。

ですから、Webアプリやスマホサイトのデザインでは
これらの要素、すなわちユーザの意思による拡大縮小
メニューなどの位置固定とは排他的である
と考えておくと、高いクオリティで作りやすくなると思います。

もちろん、動作の滑らかさや美しさに
拘らなければ簡単に両立できます。
あくまでもクオリティに徹底的に拘るときには
排他的ではないかというお話でした。

Webアプリや、レスポンシブな Webサイトの
デザインのご参考になれば幸いです。

お問い合わせについて

業務として技術コンサルティングやシステム設計・開発を行っております。
気になることがありましたらご相談下さい。
ご相談のみで完結する場合、コンサルティング費用の目安は
内容によりますが1時間で5千円〜1万円ていどです。
コンサルティングや開発を検討されるその前に、
まずはお気軽にコメントやメールでご連絡下さい。
ご契約前のコメントやメールでのやりとりは無料です。

お問い合わせフォーム

お急ぎの場合など、ただちに業務対応が必要な場合は、こちらのお問い合わせフォームをご利用ください。かきしちカンパニーお客様窓口が直ちに対応いたします。
※窓口へのお問い合わせ、お見積もりは無料です。


お名前 (必須)

メールアドレス (必須)

題名

メッセージ本文 (必須)

Share

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*