22 Mar 2014

html/css のスマホ対応 tips

モバイル向けの html を書く機会があった。PC とはちがう tips をいろいろと知ることができたのでメモ。

viewport

表示幅やピンチでの拡大縮小を制御する meta 要素。ここで指定したサイズ等でドキュメントを表示する。例えば width をここで指定しないと、iPhone では横幅 980px とみなして表示されてしまうので、見た目がすごく小さくなってしまう。

width=device-width とすると端末にあわせてよしなに出してくれる。scale 系の設定は 1 にしておくとピンチでの拡大縮小を抑制できる。スマホの画面に最適化した html は、ピンチでの拡大縮小ができないほうがむしろ使いやすいので、こうしておくのも選択肢。

とりあえずこう書いておくと間違いない。

format-detection

こんなふうに書いておくと、電話番号っぽい文字列をかってにリンクにする動作を抑制してくれる。電話番号が表示されないページはリンクにならないほうがいいので、指定しておくとよい。

user-select, -webkit-touch-callout, -webkit-tap-highlight-color

ユーザーによる html 上の文字列選択やリンク長押し時の挙動を制御する css 要素。次のようにすると、ユーザは文字列を選択できず、リンクを長押ししても何も出なくなる。

body {
    -webkit-user-select: none;
    user-select: none;
    -webkit-touch-callout: none
    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}

user-select が選択の制御、touch-callout がリンク長押し時の制御、tap-highlight-color が選択時のハイライト色の制御でここでは透明にしている。

こうすることで誤タップで広範囲が選択され青くなってしまうような挙動を防ぐことができる。一方でユーザーの選択肢を奪うことになるので、導入時はちゃんと検討したほうがいい。例えばアプリ内 webview では、このスタイルを指定することで、ネイティブっぽい動きになって UI に一貫性を持たせることができる。

media-query

これは結構有名な、画面幅に応じて適用させるスタイルを切り替える css の機能。

例えば @media screen and (min-width: 500px) { ... } とすると、横幅が 500px 以上の時だけに適用されるスタイルを記述できる。

また幅だけではなくて、次のようにすると、

@media only screen and (orientation : landscape) {
    // 横向き
}
@media only screen and (orientation : portrait) {
    // 縦向き
}

デバイスの横向き・縦向きを検知してそれぞれに応じたスタイルを指定できる。