CSS, HTML

レスポンシブが効かない…1時間ハマった凡ミスの正体

■ はじめに

今回は、見積もりフォームを作っていて「レスポンシブが効かない」という地獄に1時間ハマった俺の凡ミス談を記録しておく。似たような経験をした人、これから同じミスをするかもしれない人の役に立てば幸いだ。

■ 状況:JavaScriptでゴリゴリ書いてた

俺は、JavaScriptで簡単な「見積もりフォーム」のたたき台を作っていた。HTMLファイル1枚だけで、divタグを並べて、styleもscriptもその中に全部書き込むスタイル。

見た目のレイアウト調整と、クリックで金額が変わる処理を一生懸命書いていた。

ついでにスマホでも動作確認しとくかーってな感じだったんだが

“あれ? @media で画面サイズに応じたレイアウトが…効いてない?”

■ 試行錯誤:CSSは合ってるのに反応がない

何度も確認した。

  • CSSは間違ってない
  • @media screen and (max-width: 768px) も合ってる
  • flexboxの設定も問題なし

でもスマホでは全然スタイルが変わらない。なんか文字が縮小されてる。こんなの初めて!どう見てもおかしい。

“なんで? なんで? なんで!?”

■ 気づいたきっかけ:「get_header()…あれ?」

ふと、WordPressで作ってた別のページを思い出した。

“WordPressなら、get_header() と get_footer() を呼び出すけど… てことは普通のHTMLなら…ヘッダー自分で書くよな?”

ここで俺の中の何かがつながった。

“あっっっっっっっっっっ!!!!!!!!!”

<meta name="viewport" content="width=device-width, initial-scale=1.0">
コレ。忘れてた。完全に。

スマホでレスポンシブデザインが効かないとき、たいていの原因はこの1行にある。

<meta name="viewport" content="width=device-width, initial-scale=1.0">

これがないと、スマホは強制的に画面幅を1024px相当にして表示してくる。そりゃ、CSS効かんわ。

■ 教訓:テンプレから始めろ

今回の事件から得た最大の学びはこれ:

“自分でHTMLを書くときは、最初にVS Codeで html って打ってEmmet展開しろ”

VS Codeでは、html:5 などと打つと、最低限のHTMLテンプレートが出てくる。 そこには meta charsetmeta viewport もちゃんと入ってる。

今後はどんなに小さな検証ファイルでも、テンプレからスタートして確実に土台を作る

■ まとめ:ミスは成長の肥料

  • ビューポートタグは超重要。忘れたら地獄を見る
  • CSSが効かないときは、HTMLの構造から疑え
  • 凡ミスこそ、学びに直結する

今回の俺のやらかしが、誰かの時間を1時間節約できればそれでいい。

怠けるのは構造じゃない。