本文へ移動

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

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

Web の仕組みと HTML・CSS の基礎

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

コードを書かなくても、Web の画面がどう組み立てられるかを知っていると、デザインがそのまま実装に移せる形になります。この章では、ブラウザの表示の流れ、HTML の要素、CSS の余白・単位・レイアウトを、Figma との対応で押さえます。

ひとことで

ブラウザは HTML で中身と構造を、CSS で見た目を読み、要素の配置を計算してから画面に描く。

HTML と CSS から、配置を計算して描くHTML を読む中身と構造CSS を読む見た目のルール組み立て要素の木配置を計算レイアウト描画色・文字・画像幅・高さ・余白が変わると「配置の計算」からやり直しになるので、動かすと重い
ブラウザが画面を表示するまで(大まかな流れ)

Web の画面は、HTML(何がどの順で並ぶか・それぞれの意味)と CSS(色・大きさ・配置のルール)の組み合わせでできています。ブラウザはこの2つを読んで、要素の位置と大きさを計算し、画面に描きます。

段階起きることデザインとの関係
HTML・CSS を読むサーバーから届いた順に読み始める最初に見える部分の素材が重いと、表示が遅れる
配置の計算(レイアウト)画面幅に合わせて各要素の位置・大きさを決めるレスポンシブのルールはここで効く。画像の大きさが未定だと後でずれる
描画色・文字・画像・影を描く大きな影やぼかしを多用すると描く手間が増える
後から届くもの画像・Web フォント・データ届いたときに配置が変わらないよう、場所を先に確保する

この流れを知っていると、「画像の縦横比を決めてほしい」「幅を動かすアニメーションは避けたい」というエンジニアの要望の理由が分かります。

面接ではこう答える

ブラウザは、サーバーから届いた HTML を読んで要素の木を作り、CSS のルールを当てはめて、各要素の位置と大きさを計算し、最後に色や文字を描きます。画像やフォントは後から届くことが多いので、届いたときに配置が変わらないよう、大きさを先に決めておくことが大事です。また、幅や高さを変えるアニメーションは配置の計算をやり直すので重く、位置の移動や透明度の変化は軽い、という違いもこの流れから来ています。

ひとことで

HTML の要素は見た目ではなく意味を表す。ボタンは button、リンクは a、見出しは h1〜h6 にすると、キーボード操作や読み上げが正しく働く。

HTML の要素は、見た目ではなく意味を表します。同じ見た目でも、どの要素で作るかで、キーボード操作・読み上げ・検索エンジンでの扱いが変わります。

見た目だけ(div で作ったボタン)・キーボードで選べない・読み上げで「ボタン」と伝わらない・Enter キーで押せない意味のある要素(button)・Tab キーで選べる・読み上げで「ボタン」と伝わる・押せる・無効の状態を OS が知る
見た目が同じでも、要素の意味で使いやすさが変わる
デザインで描いたもの合う要素デザインで決めること
押すと処理が起きる(保存・開く)buttonボタンの見た目。リンクと見分けられるか
別のページ・場所へ移るa(リンク)リンクの見た目(下線・色)
見出しh1〜h6見出しの階層。見た目の大きさと階層は別に注釈する
入力欄とその説明input+labelラベルを常に見せるか(入力すると消える案内文だけにしない)
一覧ul・ol何件あるかが読み上げで伝わる
表table見出しの行・列。スマホでの組み替え方

ボタンかリンクかは、デザインでいちばん迷いやすいところです。「押すとページが変わるならリンク、その場で処理が起きるならボタン」を基本にし、見た目もそろえておくと、実装で正しい要素が選ばれます。

Web エンジニア向け:アクセシビリティ

面接ではこう答える

HTML の要素には、見た目ではなく意味があります。押すと何かが起きるものは button、別のページに移るものはリンクの a、見出しは h1 から h6 です。意味のある要素で作ると、キーボードで操作でき、読み上げでも「ボタン」「見出し」と伝わります。デザイナーとしては、ボタンとリンクの見た目と使い分けを決め、見出しの階層をデザインに注釈で書くことで、正しい要素を選んでもらいやすくしています。

ひとことで

CSS の要素はすべて箱で、中身の外側に内の余白(padding)・枠(border)・外の余白(margin)を持つ。

ボックスモデル:中身の外側に余白・枠・外の余白margin(外の余白)border(枠)padding(内の余白)中身(文字・画像)Figma との対応padding → オートレイアウトの余白gap → 要素の間隔stroke → border(枠線)外の余白 → 親の gap で表すことが多い
CSS のボックスモデルと Figma の対応

CSS では、すべての要素が箱です。中身の外側に、内側の余白(padding)、枠(border)、外側の余白(margin)があります。

デザインで気をつけること理由
余白はオートレイアウトの padding と gap で作るCSS の padding・gap と同じ考え方なので、そのまま移せる
要素どうしの間隔は、親の gap で決める個別の外の余白が重なると、どちらの値が効くか分かりにくい
枠線の太さを含めた大きさを決める多くの現場では枠を含めた幅で計算する設定(box-sizing: border-box)を使う
余白はトークン(4 や 8 の倍数など)から選ぶ実装で値がばらばらにならない
文字の箱の上下の余白に注意行の高さ(line-height)の分だけ、文字の上下に見えない余白がある

特に「文字の上下の余白」はずれの原因になりやすいところです。Figma の文字の箱も行の高さを含むので、行の高さをトークンで決めておくと、デザインと実装の余白がそろいます。

面接ではこう答える

CSS では、すべての要素が箱として扱われ、中身の外側に内側の余白の padding、枠線の border、外側の余白の margin が重なります。Figma のオートレイアウトの余白は padding に、要素の間隔は gap にほぼそのまま対応します。デザインで余白をこの形で作っておくと、エンジニアが数値を読み替えずに実装でき、文字が長くなったときの伸び方も一致します。

ひとことで

px は固定の大きさ、rem は基準の文字サイズに対する倍率、% と vw は親や画面の幅に対する割合。文字は rem にすると、ユーザーの文字サイズの設定に合わせて大きくなる。

デザインでは px で数値を描きますが、実装ではいくつかの単位を使い分けます。どの単位になるかで、画面幅や文字の設定が変わったときの動きが変わります。

単位意味よく使う場所
px画面上の固定の大きさ(CSS の px。高密度の画面では実際の画素は2〜3倍)枠線の太さ、アイコンの大きさ
rem基準の文字サイズに対する倍率(多くのブラウザの初期値は 16px なので 1rem=16px)文字の大きさ、余白
emその要素の文字サイズに対する倍率ボタンの中の余白など、文字に連動させたいところ
%親の要素に対する割合横幅いっぱい(100%)、列の幅
vw・vh画面の幅・高さに対する割合(1vw=画面幅の1%)全面の背景、見出しの大きさ
dvh などスマホのアドレスバーの出入りを考えた画面の高さ画面いっぱいの高さの画面

文字を rem で指定する理由:ブラウザの設定で文字を大きくしているユーザーがいます。px で固定すると設定が効かず、rem なら一緒に大きくなります。デザインでは、文字が大きくなったときに行が増えても崩れないよう、高さを固定しない形にしておきます。

画面の高さに注意:スマホのブラウザは、スクロールでアドレスバーが出入りして画面の高さが変わります。「画面の高さぴったり」のデザインは、下のボタンが隠れることがあるので、エンジニアと単位を相談します。

面接ではこう答える

CSS の単位には、固定の px、基準の文字サイズに対する倍率の rem、親の要素に対する割合の %、画面の幅に対する割合の vw などがあります。ブラウザの基準の文字サイズは初期値で 16px が多いので 1rem はふつう 16px ですが、ユーザーが文字を大きくする設定をすると rem で指定した文字も大きくなります。デザインでは 16px の文字として描きますが、実装は rem で、と伝えておくと、文字の拡大にも対応できます。

ひとことで

Flexbox は要素を1方向に並べて伸び縮みさせる CSS の仕組み、Grid は縦横の格子に並べる仕組み。Figma のオートレイアウトは Flexbox とほぼ同じ考え方。

CSS で要素を並べる主な仕組みが Flexbox(1方向に並べる)と Grid(縦横の格子に並べる)です。Figma のオートレイアウトは Flexbox とほぼ同じ考え方なので、オートレイアウトで組んだデザインは、そのまま実装の構造になります。

Figma のオートレイアウトと CSS の対応縦に並べる・横に並べるflex-direction間隔(Spacing between)gap余白(Padding)padding中身に合わせる(Hug)幅を中身に合わせる(auto)親いっぱい(Fill)flex: 1 / 100%固定(Fixed)width: 240px など折り返し(Wrap)flex-wrap: wrap
オートレイアウトはほぼ Flexbox と同じ考え方
向いているもの仕組み例
1方向に並べるFlexboxボタンの並び、ヘッダー、アイコンと文字
縦横の格子Gridカードの一覧、ダッシュボード、画面全体の枠
画面幅で列数を変えるGrid(または Flexbox の折り返し)PC は3列、スマホは1列

オートレイアウトを使わず、要素を自由な位置に置いたデザインは、文字が長くなったときにどう動くかが決まっていません。エンジニアが推測で組むことになるので、ずれのもとになります。

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

面接ではこう答える

Flexbox は、要素を縦か横の1方向に並べ、間隔や伸び縮みのルールを決める CSS の仕組みです。Figma のオートレイアウトの方向・間隔・余白・Hug・Fill は、Flexbox の flex-direction・gap・padding・中身に合わせる幅・残りいっぱいの幅にほぼそのまま対応します。カードを格子状に並べるような2方向のレイアウトは Grid が向いています。デザインをオートレイアウトで組んでおくと、文字が長くなったときの伸び方まで実装と一致します。

Chrome・Safari・Firefox などのブラウザには、開発者ツール(多くは右クリックの「検証」や F12 キーで開く)があります。デザイナーでも、実装された画面の数値を自分で確かめるのに便利です。

やりたいこと使う機能
余白・大きさ・色の値を見る要素を選んで、右側のスタイルと箱の図(ボックスモデル)を見る
スマホの幅で見る端末のツールバー(レスポンシブ表示)で幅を変える。320px なども試す
遅い回線で見るネットワークの速さを落とす設定(読み込み中の表示を確かめる)
ダークモード・動きを減らす設定で見る表示の設定(prefers-color-scheme・prefers-reduced-motion の切り替え)
コントラストを確かめる色の選択画面に出るコントラスト比
速さを測るLighthouse のレポート

開発者ツールで値を変えても、自分の画面で一時的に変わるだけで、本物のサイトは変わりません。気軽に試して、指摘するときは「この要素の padding が 12px、デザインは 16px」のように具体的に伝えられます。

ひとことで

Web はブラウザで動く画面、ネイティブは OS ごとの言語と部品で作るアプリ、クロスプラットフォームは1つのコードで iOS と Android の両方を作るやり方。

画面をどう描くかで、OS の作法との距離が変わるWeb(ブラウザ)HTML・CSSどこでも開けるすぐ更新できるネイティブSwift・KotlinOS の部品と作法端末の機能を使えるReact NativeJavaScriptOS の部品を使うiOS・Android を共通にFlutterDart自前で部品を描く見た目をそろえやすい
作り方ごとの特徴(大まかな整理)

同じ「アプリ」でも、作り方によってデザインの自由さと手間が変わります。デザインを始める前に、どの作り方かをエンジニアに確かめておきます。

作り方デザインへの影響
Web(スマホのブラウザを含む)画面幅がばらばら。マウス・タッチ・キーボードの全部を考える。更新はすぐ届く
ネイティブ(Swift・Kotlin)OS の標準の部品と作法に合わせやすい。OS ごとにデザインを分けることもある
React NativeOS の部品を使うので、部品の細部は OS ごとに少し違って見える
Flutter部品を自前で描くので、両方の OS で見た目をそろえやすい。OS らしさは意識して合わせる
アプリの中の Web 画面(WebView)一部の画面だけ Web で作る。アプリの部品と見た目・戻る操作がずれやすい

アプリは、ストアの審査があったり、ユーザーが更新するまで古い版が使われ続けたりするため、Web と比べて「出してから直す」に時間がかかります。この違いはアプリの更新とストアの審査で扱います。

面接ではこう答える

Web はブラウザで動き、どの端末でも開けてすぐ更新できます。ネイティブアプリは iOS なら Swift、Android なら Kotlin で作り、OS の標準の部品と作法をそのまま使えます。React Native や Flutter のようなクロスプラットフォームは1つのコードで両方の OS を作れますが、React Native は OS の部品を使い、Flutter は自前で部品を描く、という違いがあります。どれで作るかで、OS ごとに見た目を変えるかや、標準の部品をどこまで使えるかが変わるので、デザインの最初に確かめるようにしています。

この章のまとめ

🖨 まとめシート(印刷・PDF)
  • ブラウザは HTML(中身と意味)と CSS(見た目と配置)から画面を組み立てる
  • Figma のオートレイアウト・余白は、CSS の Flexbox・ボックスモデルにほぼそのまま対応する
  • 単位(px・rem)や要素の意味(button・見出し)は、文字の拡大や読み上げに直接効く

この章のクイズ

面接ではこう聞かれる

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

Q1見た目が同じなら、ボタンを div で作っても button で作っても同じではないですか?

模範回答

見た目が同じでも、使える人の範囲が変わります。button 要素で作ると、キーボードの Tab キーで選べて Enter やスペースで押せ、読み上げでも「ボタン」と伝わります。div で見た目だけ作ると、これらを全部自前で足す必要があり、抜けやすくなります。

デザイナーとしては、押すとその場で処理が起きるものはボタン、ページが移るものはリンク、と見た目を分けてデザインし、注釈にも書いておきます。そうすると、実装で正しい要素が選ばれやすくなります。

深掘りされたら

  • ボタンとリンクの見た目をどう分けていますか?
  • 見出しの階層はデザインでどう伝えますか?

見られているポイント要素の意味がキーボード操作や読み上げに効くことを、デザインの判断につなげて説明できるか

Q2Figma のオートレイアウトと、実装のレイアウトはどう関係していますか?

模範回答

オートレイアウトは CSS の Flexbox とほぼ同じ考え方です。並べる方向は flex-direction、要素の間隔は gap、内側の余白は padding、Hug は中身に合わせた幅、Fill は残りいっぱいの幅に対応します。

なので、オートレイアウトで組んでおくと、文字が長くなったときや画面幅が変わったときに、どこが伸びてどこが固定かが実装と一致します。自由な位置に置いたデザインだと、その伸び方をエンジニアが推測することになり、ずれのもとになります。格子状に並べる画面は Grid になることも伝えておきます。

深掘りされたら

  • 画面幅で列の数が変わるデザインはどう作りますか?

見られているポイントFigma の操作とコードの対応を具体的に言えるか

Q3文字の大きさを px ではなく rem で実装してほしいと言うのはなぜですか?

模範回答

rem は基準の文字サイズに対する倍率なので、ユーザーがブラウザで文字を大きくする設定をしたとき、一緒に大きくなるからです。px で固定すると、その設定が効かず、文字を大きくしたい人が読みにくいままになります。

多くのブラウザでは基準の文字サイズの初期値が 16px なので、デザインでは 16px として描き、実装では 1rem にする、と対応させます。あわせて、文字が大きくなって行が増えても崩れないよう、高さを固定しないデザインにしておきます。

深掘りされたら

  • 文字を大きくしたときに崩れやすい場所はどこですか?

見られているポイント単位の違いを、文字の拡大というユーザーの設定と結びつけて説明できるか

Q4Web・ネイティブアプリ・Flutter などの作り方の違いで、デザインはどう変わりますか?

模範回答

いちばん変わるのは、OS の作法にどこまで合わせるかと、標準の部品をどれだけ使えるかです。ネイティブなら OS の標準の部品と戻る操作にそのまま合わせやすく、Flutter は自前で部品を描くので、両方の OS で見た目をそろえやすい代わりに、OS らしさは意識して合わせる必要があります。

Web は画面幅や入力方法の幅が広く、更新はすぐ届きます。アプリはストアの審査や古い版のユーザーがいるので、直すまでに時間がかかる前提で、リリース前の確認を厚くします。デザインの最初に作り方をエンジニアに確かめるようにしています。

深掘りされたら

  • アプリの中に Web の画面があるときに気をつけることは?

見られているポイント作り方の違いをデザインの方針と更新の速さに結びつけられるか