css

WEB制作

【css】iPadやスマホでスクロールすると横にグラグラ揺れる現象の原因と対策

画像はイメージ。横揺れは横幅100%を突き破っているのが原因

レスポンシブのサイトでPCだと何ともないのに、iPadやスマホだとパッと見は問題なくても、縦にスクロールすると妙に横にグラグラ揺れてしまうサイトがある。

今まさにその問題に直面しているなら、原因は大体はっきりしているので安心して欲しい。

原因はレスポンシブの鉄則を守らずに「横幅100%」を突き破っている要素が存在するからだ。

まずデベロッパーツールなりで横幅チェック

サイトを作った時はもちろんだが、サイト運営中でもプラグインや広告など、何かしらの追加や変更で横幅100%超えてしまう場合がある。

デベロッパーツールを使ってipadやスマホの画面サイズをシミュレートしながら、飛び出している要素がないかチェックしよう。%ではなくてpx指定になっているオブジェクトは全体の設計次第では突き破る原因になりやすい。

原点が特定できたら%指定に変えたり、飛び出さないように何らかの対策をして無事完了。

緊急用としては全体にoverflow-x:hidden

原因が特定できないけど、とりあえず何とかしたい場合専用の最終兵器がある。

ページ全体、つまりhtmlや描画される部分全体であるbodyに横幅のはみ出し部分を強制的に隠してしまう方法だ。

cssのコードとしては下記になる。


html {
overflow-x: hidden;
}

body {
overflow-x: hidden;
}

但し、これは最終兵器であってオススメ度は低い。

ページの構造、要素によっては表示や動作に不具合が起きるからだ。ページの中にfixedやstickyなどで固定表示している要素があったり、そもそもデザインが見切れてしまう場合もある。一時凌ぎには良くても、将来のデザイン変更の時などに、これが原因で色々うまく行かなくなる事態も想像できる。

以上の理由から、大幅なデザイン修正が必要な時の時間稼ぎくらいに使うと良いだろう。詳細に実機チェックして問題が出なければ、それはそれで一件落着とも言えるけど。

余談 スマホよりiPadの方が実は厄介

個人的な経験だとスマホよりiPadでこの問題に遭遇しやすい。スマホ向けのCSS設計はシンプルだから、よほどケアレスミスしていないと横幅が超えることは通常ないのだ。

ところが、iPadは横向きにするとPCに近い解像度になる特性がある。iPad向けのサイズを細かく作っていないと微妙なハミ出しが起こるのだ。大企業のサイトなんかでも、スマホとPC向けはユーザーが多いからちゃんと作るけど、iPadはマイノリティだから考慮していない場合も割とある(リクルート社系の某サイトとか)。

Chromeなどのシミュレーターではこの現象は起きないので、実機チェックをきちんとしていないと問題に気づけないというのもある。まさに裸の王様状態だ。

上場企業の某ゲーム攻略サイトなんかでもこの現象が起きていて、「実機チェックしてないんだろうな~」とか「エンジニア寄りで作られていて、デザインの細部に無頓着なんだろうな~」とか思ったりもするのだ。チェック不足や技術力の無さが露呈してしまう。

そんなふうに見ている人に思われないように、横グラグラ現象はできる限りスマートに直したいものだ。制作会社とかでなくて、一般企業だと金のある大手ですら検証用のiPadが制作者に配布されていることは滅多にないしね。改めて思うが、実機チェックは重要だ。

WEB制作

【CSS】:first-childや:last-childを使うと最初の要素や最後の要素だけ違う値を設定できて便利

HTMLの要素の中でも、あるClassの中にある最初の要素だけとか、最後の要素だけを別のmarginやpaddingにしたいということは、デザインを作り込んでいくとよくある。

特に、WordPressなどCMSのサイトだと、こういうテクニックを使う場面が多い。

LPとかの静的ページだとそんなにないかもしれないが、商品サムネイルを分類別に大量に載せてたりすると、個別に設定するより仕事が楽だったりする。

使い方は意外と簡単

CSSの割に「最初だけ」とか「最後だけ」みたいな条件分岐があったりと少しプログラミングっぽいけど、何のことはない、超簡単に設定できる。

上記みたいにcatという親要素のクラスがあるとする。

Aの子猫(最初の要素)だけ違う値にしたいなら、
.cat::first-child
と記述するだけだ。あとはいつものように値を書いていく。

同様にBの子猫(最後の要素)だけ変えたい場合は、
.cat::last-child
とする。

コロン(:)はCSS2の時代は1つで、今のCSS3では2つにするのがルール。古いブラウザに対応させるなら1つだけど、どっちでもいいと言えばどっちでもいい(適当)

疑似クラスを使うデメリット

そんなにないと思うけど、あくまでCSSで人間向けにデザインをいじっているだけなので、プログラム(検索エンジンとかAPIとか)からは元のHTMLが参照される。

疑似クラスは中~上級者向け(たぶん)なので、職場とかチームでいじるサイトだと、初心者には理解不能な場合があるので注意することくらい。

疑似クラスを使わない場合より、構造が少しややこしくなってメンテナンス性が下がるのは間違いない。

余談 疑似クラスという言い方が微妙

こういうのを疑似クラスというけど、言い方(呼び方)が微妙だなと感じる。似ているものに疑似要素っていうのもある。

英語だとpseudo-classというけど、pseudoの意味は「偽物の、まがいの、ペテンの」と何だか酷いキーワードばかりだし。臨機応変クラスとか、自動差し替えクラスみたいなイメージかな。

WEB制作

【iPad実機検証】PCとSPだけじゃ不十分! iPadだとレイアウト崩壊するサイトが意外に多い


WebデザインやWeb制作に関わる皆さんは、どうやってサイトのデザイン検証をしていますか? PCとスマホは実機検証するとして、意外とiPadなどのタブレットPCは省略してたりしませんか?

「PCと同じくらいの画面サイズだから、PCでちゃんとなっていればiPadもOKなはず」と思っていると、痛い目に合う場合があります。大手企業のサイトでもPCやスマホは綺麗でも、iPadで見ると右や左に寄ってたり、全体的にデザインが破綻しているサイトが意外とあったりします。

iPadはラスボス級の鬼門!

iPadはiPhoneと同じiOSなので、画面が大きいだけのiPhoneと思ってしまいがちですが、どうしたことかiPhoneでベリーグッドなデザインになっているサイトでも、iPhoneだとヤバめな感じになる場合があります。

大事なのでもう一度言いますが「PCで大丈夫だから」という驕りと、「iPhoneでも大丈夫だから」という驕りが重なるため、実機検証を省くケースが多いからでしょう。確かに2018年現在、Webサイトの閲覧デバイスはスマホが6~7割くらい、PCが3~4割くらいで、iPadなどタブレットPCは1割未満というサイトが多いと思います。

しかし、企業サイトなどで月間100万PVくらいあるサイトだと、1割でも10万PVはiPadに代表されるタブレットPCなのです。実機検証を省いていいか? というと疑問ですね。

iPadの仕様は独特

個人的な経験だと、少なくとも画面が大きいiPhoneではないし、PCとは全然違うという印象です。

PCとSPを切り替えているサイトでは、PC版を表示させていることが多いと思いますが、どっちかというとiPhone仕様に近いiPadなだけに、レイアウトの崩れや意図しない動作が起きる場合が多いです。

レスポンシブはレスポンシブで、PCとスマホの中間くらいのサイズのiPadは、どっちつかずなバランスのデザインになってしまいがちです。ちょっとバランスが悪いくらいで済めばいいですが、画面がはみ出していてズーム操作すらできなかったり、余白があり過ぎたり、逆に全く余白がなかったり・・・どうしてこうなった?みたいなサイトも結構あります。

iPadユーザーのライフスタイル

私も個人的にiPadを使っているのですが、使い道としてはPCとスマホの中間的というか、ややPC寄りの使い方です。じっくり調べ物をしたり、大きな画面でじっくりゲームしたり、バッテリーの持ちが平均的なノートPCの2~3倍くらいあるので、外で使うことも多いです。

iPadはスマホよりもじっくり使う人が多いと思うので、なおさらWeb制作に関わる人にはiPad検証を薦めたいですね。

ところで、あなたのサイトは「iPadで検証」していますか?

もししていなかったとしたら、iPadで見ると結構ヤバいことになってるかも・・・(!?)