本文へ移動

ホーム / デザイナー / 第2部 Web とアプリの実装の制約

第2部 Web とアプリの実装の制約・第3章

レスポンシブと画面サイズ

★★☆ 重要7トピック・面接 3問

デザインが表示される画面の幅・文字の大きさ・入力方法は、ユーザーによってばらばらです。この章では、レスポンシブの考え方と、画面サイズまわりで崩れやすいところを押さえます。

3.1レスポンシブの考え方

用語★★☆ 重要
ひとことで

画面幅に応じてレイアウトが変わる。固定の画面ではなく、伸び縮みのルールをデザインする。

レスポンシブデザインは、画面の幅に合わせてレイアウトを変える作り方です。スマホ・タブレット・PC の3枚を作って終わりではなく、「幅が変わったとき、どこが伸びて、どこで組み替わるか」というルールをデザインします。

決めること例実装との関係
伸びる部分と固定の部分サイドバーは 240px 固定、本文は残りいっぱいCSS の Grid・Flexbox で書ける形にする
最大の幅本文は 720px まで。それ以上は左右に余白長すぎる行は読みにくい
組み替え方PC は3列、スマホは1列。表はカードにどの要素がどの順で並ぶか(読み上げの順番にもなる)
はみ出したとき折り返す・「…」で省略・横スクロール省略するなら全文をどこで見せるか
幅が変わると、伸びる部分と組み替わる部分がある固定600px1024pxスマホ(600px 未満)1列に縦に並べるタブレット(600〜1023px)2列のカードPC(1024px 以上)サイドバー固定+本文は3列
ブレイクポイント(例)ごとのレイアウトの変化。境目の間でも連続して伸び縮みする

落とし穴:デザインを1つの幅(例:390px)だけで作り、短いダミーの文言で確かめること。いちばん狭い幅・いちばん長い文言・大きな文字の3つで一度崩してみると、実装後の手戻りが減ります。

Web エンジニア向け:CSS のレイアウトとレスポンシブ

面接ではこう答える

レスポンシブデザインは、画面の幅に合わせてレイアウトが変わる作り方です。スマホ・タブレット・PC の3枚を作るのではなく、幅が変わったときにどこが伸びて、どこが固定で、どこで組み替わるか、というルールをデザインします。本文の最大の幅や、はみ出したときに折り返すか省略するかも決めます。いちばん狭い幅、いちばん長い文言、大きな文字の3つで一度崩してみるのが、手戻りを減らすこつです。

ひとことで

レイアウトを切り替える画面幅の境目。端末の名前ではなく、中身が窮屈になる幅で、チームで数を絞って決める。

ブレイクポイントは「中身が窮屈になる幅」で決める(例)320px600px1024pxスマホ:1列タブレット:2列PC:3列+サイドバー境目と境目の間でも連続して伸び縮みする。各区間のいちばん狭い幅で確かめる
ブレイクポイントの例と、区間ごとのレイアウト

ブレイクポイントは、レイアウトを切り替える画面幅の境目です。チームでいくつかに決めておきます(例:600px 未満はスマホ、600〜1023px はタブレット、1024px 以上は PC)。端末の名前ではなく、中身が窮屈になる幅で決めるのが基本です。境目と境目の間でも画面は連続して伸び縮みするので、各ブレイクポイントのいちばん狭い幅(例:320px・600px)でも崩れないかを確かめます。

考えること目安
数3つ前後に絞る。増やすほどデザインと確認の手間が増える
決め方中身(文字の行の長さ・カードの大きさ)が窮屈になる幅
確かめる幅各区間のいちばん狭い幅(320px・600px など)と、いちばん広い幅
共有のしかたトークンとしてデザインとコードで同じ値を持つ
部品ごとの切り替え画面幅ではなく、置かれた場所の幅で部品を切り替える方法(コンテナクエリ)もある

同じカードでも、メインの欄に置くときとサイドバーに置くときで使える幅が違います。こうした部品は、画面幅ではなく「置かれた枠の幅」で形を変えるほうが自然なことがあり、CSS ではコンテナクエリで実装できます。デザインでは「この部品は幅 ○px 未満で縦並び」のように、部品の側のルールとして書きます。

面接ではこう答える

ブレイクポイントは、レイアウトを切り替える画面幅の境目です。特定の端末の幅に合わせるのではなく、中身が窮屈になって読みにくくなる幅で決めるのが基本です。境目と境目の間でも画面は連続して伸び縮みするので、各区間のいちばん狭い幅でも崩れないかを確かめます。数はチームで3つ程度に絞り、トークンとしてデザインとコードで共有するようにしています。

3.3文言の長さと翻訳

用語★★☆ 重要
ひとことで

翻訳やユーザーが入れるデータで、文言の長さは大きく変わる。折り返し・省略・最大の文字数をデザインで決めておく。

同じボタンでも、文言の長さで形が変わる保存する日本語:短いÄnderungen speichernドイツ語:2倍以上になることも山田 花子さんのプロフィールを見るユーザーの名前が入ると2行に決めること:折り返す・「…」で省略・最大の文字数・省略したら全文をどこで見せるか
文言の長さで崩れる例

崩れの原因として、画面サイズと同じくらい多いのが文言の長さです。翻訳すると日本語より長くなりやすく、ユーザーが入れる名前や商品名も長さがばらばらです。

場所起きやすいこと決めておくこと
ボタン2行になる・並んだボタンの高さがそろわない折り返しを許すか、最大の文字数
タブ・ナビゲーション入りきらない横スクロールにするか、「その他」にまとめるか
一覧の行名前が長いと右の情報を押し出す何行まで出して「…」で省略するか
見出し・タイトル3行以上になる行数の上限と、省略したときの全文の見せ方
数値・日付桁が増える(1,000,000 件)、日付の書き方が国で違う桁が増えても入る幅、書き方はコードに任せる

文言をデザインに直接書かず、文言の一覧(キーと文言)で管理している現場もあります。その場合は、文言の担当と「最大の文字数」を共有しておくと、翻訳でも崩れにくくなります。

面接ではこう答える

画面の文言は、翻訳やユーザーが入れる名前・商品名で長さが大きく変わります。英語やドイツ語にすると日本語より長くなりやすく、ボタンやタブが入りきらなくなることがあります。そこで、短いダミーの文言だけで確かめず、いちばん長い文言で一度崩してみて、折り返すのか省略するのか、省略したら全文をどこで見せるのかを決めておきます。

ひとことで

iOS の Dynamic Type や Android・ブラウザのフォントサイズの設定で、ユーザーは文字を大きくできる。高さを固定しないデザインにする。

iOS の Dynamic Type、Android のフォントサイズの設定、ブラウザの文字サイズの設定で、ユーザーは文字を大きくできます。高齢の人や目の疲れやすい人など、文字を大きくして使う人は少なくありません。

高さを固定(高さ 80)・文字が大きくなると下が切れる・ボタンが重なる・省略が増えて読めない中身に合わせて伸びる・行が増えた分だけ高くなる・横並びは縦並びに組み替える・スクロールで全部読める
文字を大きくする設定で、高さの固定が崩れる例
デザインで決めること例
文字のスタイルを役割で定義する本文・見出し・注釈を OS の文字のスタイル(iOS の Body・Headline など)に合わせると、設定に連動させやすい
高さを固定しないカード・ボタン・一覧の行は中身に合わせて伸びる
大きな文字での組み替え横並びのアイコンと文字を縦並びにする、表をカードにする
大きくしない場所を決めるタブバーのラベルなど、限られた場所は上限を設けることがある(その場合は別の手段で読めるように)

WCAG(アクセシビリティの基準)の AA では、文字を200%に拡大しても内容や機能が欠けないことが求められます。デザインの段階で、いちばん大きな文字の設定の画面を1枚作ってみると、問題のある場所がすぐ分かります。

面接ではこう答える

iOS の Dynamic Type や Android のフォントサイズ、ブラウザの文字サイズの設定で、ユーザーは文字を大きくして使えます。文字を大きくしている人は少なくないので、高さを固定した枠や、横に詰め込んだレイアウトは崩れやすくなります。デザインでは中身に合わせて伸びる形にし、とても大きな文字では横並びを縦並びに組み替えるなどのルールを決めておきます。WCAG でも、文字を200%に拡大しても内容が欠けないことが求められています。

ひとことで

狭い画面では、横に並んだ要素を縦に並べ直す(リフロー)。表は横スクロールにするかカードにするかを、使い方で選ぶ。

狭い画面では、横に並んでいた要素を縦に並べ直すのが基本です。WCAG の AA では、幅 320 CSS px 相当の画面(PC で 1280px の画面を400%に拡大したときと同じ)でも、横スクロールなしで内容が読めることが求められます。ただし、表・地図・図のように2方向の配置が意味を持つものは例外です。

横スクロール・列の比較がしやすい・見出しの列を固定すると読みやすい・スクロールできると気づきにくいカードに組み替え・1件ずつ読みやすい・列どうしの比較はしにくい・並べる順番を決める必要がある
狭い画面での表の扱い:横スクロールかカードか
要素狭い画面でのよくある形
横並びのカード1列に縦に並べる。または横にスワイプ(続きがあると分かる見せ方に)
表比較が目的なら横スクロール+見出しの列を固定。1件ずつ読むならカード
サイドバー画面の上に移すか、ボタンで開くメニューにする
フォームの横並びの入力欄1列にする(姓・名なども縦に並べてよい)
大きな画像縦横比を変えて切り抜く(大事な部分が切れないように)

縦に並べ直したときの順番は、HTML の並び順(=読み上げの順番)と一致させるのが基本です。見た目の順番だけを入れ替えると、キーボードや読み上げで使う人には順番がちぐはぐになります。

面接ではこう答える

狭い画面では、PC で横に並べていた要素を縦に並べ直します。これをリフローといい、WCAG では幅 320 CSS px 相当でも横スクロールなしで読めることが求められています。ただし表や地図のように2方向の配置が意味を持つものは例外で、表は列を比較したいなら横スクロール、1件ずつ読むならカードに組み替える、と使い方で選びます。組み替えるときは、縦に並べたときの順番が読み上げの順番にもなる点に気をつけています。

ひとことで

タッチにはホバーがなく、指は大きく、キーボードでは Tab で移動する。ホバーだけで情報や操作を出すデザインにしない。

入力方法によって、使えるものが違うマウスホバーできる細かい位置を指せる右クリックタッチホバーがない指は大きい(押す範囲を広く)スワイプ・長押しキーボードTab で移動フォーカスの表示が必要ショートカット
入力方法ごとの違い。1つの画面で全部に対応する

同じ画面でも、マウス・タッチ・キーボードのどれで使われるかは分かりません。タブレットにキーボードをつなぐ人もいれば、PC をタッチで使う人もいます。

表現起きやすい問題代わりの形
ホバーで出る説明(ツールチップ)タッチでは出ないタップで開く「i」ボタン、または最初から見せる
ホバーで出るボタン(一覧の行の「削除」)スマホでは押せない常に見せる・「…」メニュー・スワイプ(他の手段も用意)
ドラッグで並べ替えキーボードや支援技術で使えない「上へ」「下へ」のボタンも用意する
小さなリンクが密集指で押し間違える押せる範囲を広げ、間隔をあける
長押し・スワイプだけの操作気づかれない見えるボタンでも同じ操作ができるようにする

CSS では、ホバーできる端末かどうか(@media (hover: hover))や、指で操作しているか(pointer: coarse)で見た目を変えられます。「ホバーできる端末ではホバーで、それ以外では常に表示」のように、両方のデザインを渡します。

面接ではこう答える

Web の画面は、マウス・タッチ・キーボードのどれでも使われます。タッチの端末にはホバーがないので、ホバーしたときだけ出る説明やボタンは、スマホでは使えません。キーボードで使う人は Tab で移動するので、今どこにいるかを示すフォーカスの見た目が必要です。デザインでは、ホバーは補助にとどめ、大事な情報や操作はタップやフォーカスでも届くようにしています。

ひとことで

画面幅で画像の枠の縦横比が変わると、画像は切り抜かれる(object-fit: cover)。残したい場所と、文字を画像に入れないことを決めておく。

画面幅によって画像の枠の縦横比が変わると、画像はその枠に合わせて切り抜かれるか、余白が出るかのどちらかになります。実装では、枠いっぱいに表示して余った部分を切る指定(object-fit: cover)がよく使われます。

中心で切り抜くだけ・人の顔や商品が切れる・文字入りの画像は読めなくなる・画面ごとに見え方がばらばら切り抜き方を決める・注目点(残したい場所)を指定・文字は画像に入れず HTML で重ねる・画面ごとに別の画像を用意
画面幅で縦横比が変わると、画像の切り抜き方が問題になる
決めること例
枠の縦横比PC は 16:9、スマホは 4:3 など。縦横比が決まると読み込み中に場所を確保でき、画面がずれない
残したい場所人の顔・商品は中央より上、など。必要なら位置を指定(object-position)
画面ごとに別の画像構図が大きく変わるなら、スマホ用の画像を別に用意する
文字を画像に入れない文字は HTML で重ねる。切れない・翻訳できる・読み上げられる
画像がないとき代わりの色・アイコン・頭文字など

運用の担当が画像を入れ替える場所(お知らせのバナーなど)は、入稿のルール(縦横比・残す範囲・文字を入れない)も一緒に決めておくと、公開後の崩れが減ります。

面接ではこう答える

画面幅が変わると画像の枠の縦横比も変わることがあり、そのとき画像は枠に合わせて切り抜かれます。実装では object-fit: cover という指定がよく使われ、何もしなければ中心で切り抜かれるので、人の顔や商品が切れることがあります。デザインでは、枠の縦横比を画面幅ごとに決め、残したい場所や、必要なら画面ごとの別の画像を指定します。文字は画像に入れず HTML で重ねると、切れず、翻訳や読み上げにも対応できます。

この章のまとめ

🖨 まとめシート(印刷・PDF)
  • 固定の画面ではなく、幅が変わったときの伸び縮みと組み替えのルールをデザインする
  • ブレイクポイントは端末名ではなく「中身が窮屈になる幅」で決める
  • 長い文言・大きな文字・タッチとマウスの違いでも崩れないようにする

この章のクイズ

面接ではこう聞かれる

まず答えを見ずに声に出して答え、そのあと開いて比べる。

Q1長い文言や翻訳で画面が崩れた経験はありますか?どう防いでいますか?

模範回答

例えば、ボタンの文言が英語に翻訳されて2行になり、横に並んだボタンの高さがそろわなくなった、というのはよくあるケースです。原因は、短い日本語の文言だけでデザインを確かめていたことです。

防ぐために、デザインの段階でいちばん狭い幅、いちばん長い文言、文字を大きくする設定の3つで一度崩してみます。そのうえで、折り返すのか「…」で省略するのか、省略したら全文をどこで見せるのかを決めて、受け渡しのメモに書きます。高さを固定した枠は避け、中身に合わせて伸びるようにします。

深掘りされたら

  • どこまでなら省略してよいと判断しますか?

見られているポイント原因の切り分けと、崩す前提の確認方法

Q2ブレイクポイントはどうやって決めていますか?

模範回答

特定の端末の幅ではなく、中身が窮屈になる幅で決めています。例えば、本文の1行が長くなりすぎる幅、カードが2列では小さすぎる幅などを見て、チームで3つ程度に絞ります。数を増やすほど、デザインと確認の手間が増えるからです。

決めた値はトークンとしてデザインとコードで共有し、各区間のいちばん狭い幅でも崩れないかを確かめます。サイドバーとメインで同じ部品を使う場合は、画面幅ではなく置かれた枠の幅で形を変える、というルールにすることもあります。

深掘りされたら

  • 320px のような狭い幅は、どこまで対応しますか?

見られているポイント端末名ではなく中身で決める考え方と、共有・確認のしかた

Q3PC でホバーすると出る操作を、スマホではどうしますか?

模範回答

スマホにはホバーがないので、ホバーだけに頼った操作は使えません。大事な操作なら常に見せるか、「…」のメニューにまとめます。スワイプで出す形にする場合も、気づかれにくいので、見えるボタンなど別の手段も用意します。

実装では、ホバーできる端末かどうかで見た目を切り替えられるので、「ホバーできる端末ではホバーで出す、それ以外では常に表示」のように両方のデザインを渡します。キーボードで使う人のために、フォーカスしたときにもホバーと同じものが出るようにしておきます。

深掘りされたら

  • ツールチップの中に大事な情報を入れてもよいですか?

見られているポイントタッチ・キーボードでも同じことができるようにする考え方