独学の挫折と、コードが動いた瞬間の魔法について
「Webデザイナーになりたい」「副業でLP(ランディングページ)を作って月に5万稼ぎたい」
そう意気込んでProgateやドットインストールで学習を始めたものの、いざ自分でイチからサイトを作ろうとした瞬間に、手が止まってしまった経験はありませんか?
「要素が横並びにならない」
「画像のサイズが勝手に変わる」
「スマホで見たらレイアウトがグチャグチャ」
「ていうか、何から書き始めればいいのか分からない」
私自身、Web業界に入って15年以上経ちますが、最初の頃は本当にCSSが大嫌いでした。当時はまだFlexboxのような便利な機能はなく、float というプロパティを使って無理やり要素を横並びにしては、レイアウト崩れ(いわゆるカラム落ち)と深夜まで格闘していたものです。
「なんで書いた通りに動かないんだ!」とモニターに向かって悪態をついた回数は数え切れません。上司に「ピクセルが1ズレてるよ」と指摘され、トイレで泣いたこともあります。
でも、今なら断言できます。コーディングがうまくいかない原因は、センスがないからでも、暗記力が足りないからでもありません。
「Webページがブラウザに描画される仕組み」と「箱(ボックス)の概念」を、現場視点で理解していないだけなのです。
世の中のプログラミングスクールや教本は、タグの意味やプロパティの書き方は教えてくれますが、「どういう思考順序で組み立てるか」という一番大事な部分を省略しがちです。
この記事では、単なるタグの辞書的な解説はしません。それはGoogleで検索すれば数秒で出てくるからです。
その代わり、現役のエンジニアである私が、実際の案件で「どうやってデザインをコードに落とし込んでいるか」という思考プロセスを、泥臭い失敗談も交えながらすべて言語化します。
これを読み終える頃には、HTMLとCSSが「暗記しなければならない呪文」から「思い通りに組み立てられる楽しいパズル」に変わっているはずです。
10,000文字を超える長丁場になりますが、本気でWeb制作を仕事にしたい方は、ぜひ最後までお付き合いください。

暗記不要論|プロはカンニングしながら仕事をしている
学習を始めたばかりの人が陥りやすい最大の罠。それは「タグやプロパティを全部覚えようとすること」です。
これこそが、挫折の第一歩です。
記憶力テストではない
HTMLのタグは100種類以上、CSSのプロパティに至っては数え切れないほどあります。
私を含め、現場のプロエンジニアたちも、これらを空で全部書けるわけではありません。
「あれ、背景画像を固定するプロパティなんだっけ? background-attachment だッケ?」と思ったら、息をするようにググっています。なんなら、毎日使っているFlexboxの書き方ですら、たまにど忘れしてチートシートを見に行きます。
重要なのは、スペルを一言一句暗記することではなく、「何ができるかを知っていること」と「調べ方を知っていること」です。
「画像を横並びにして中央揃えにしたい」と思った時に、「CSS 横並び 中央寄せ」と検索できれば、それで100点満点なのです。
現場で求められるのは「何も見ずに書く能力」ではなく、「顧客が求めるデザインを、あらゆる手段を使って画面上に再現する能力」です。カンニング上等。コピペ推奨。それがエンジニアの世界です。
コーディングは「翻訳」作業である
Web制作におけるコーディングとは、デザイナーが作った(あるいは頭の中にある)ビジュアルイメージを、ブラウザが理解できる言葉(HTML/CSS)に翻訳する作業です。
英語の翻訳と同じで、単語をただ並べればいいわけではありません。
「ここは見出しだから強く言う」「ここは補足情報だから小さく添える」といった、文書の構造(意味)を正しく伝える必要があります。
この「構造」を意識せずに、見た目だけを整えようとするから、後で修正が困難なスパゲッティコードが生まれてしまうのです。
HTMLは「文章の構造」を担当し、CSSは「見た目の装飾」を担当する。この役割分担を徹底することが、きれいなコードを書く第一歩です。
HTMLの本質|Webサイトは「マトリョーシカ」でできている
HTML(HyperText Markup Language)について、初心者が最初に持つべきイメージは「積み木」あるいは「段ボール箱」です。もっと言えば、箱の中に箱が入る「マトリョーシカ」です。
タグは要素に付ける「名札」
HTMLタグは、テキストや画像に「これは見出しですよ」「これは段落ですよ」と名札を付ける役割を持っています。
<h1>Webデザイン基礎講座</h1>
<p>これは段落です。</p>
このように囲むことで、ブラウザは「ああ、これは一番偉い見出し(Heading 1)なんだな」と理解します。これを「マークアップ」と呼びます。
SEO(検索エンジン最適化)の観点からも、正しい名札をつけることは非常に重要です。Googleのロボットは、デザインの綺麗さではなく、このタグを見てページの内容を判断しているからです。
div という魔法の段ボール
HTMLを学ぶ上で避けて通れないのが <div> タグです。
初心者の方から「divって何の意味があるんですか? 見た目変わらないですよね?」とよく聞かれますが、答えは「特に意味はない」です。
意味がないからこそ、最強なのです。<div> は「ただの箱」です。
Webサイトのレイアウトを作る際、見出しや画像や文章をバラバラに置いておくと散らかってしまいます。そこで、関連する要素をひとまとめにするために <div> という段ボール箱に入れます。
例えば、Webサイトのヘッダーを作るならこんなイメージです。
<div class="header">
<div class="logo-box">
<img src="logo.png" alt="ロゴ">
</div>
<div class="nav-box">
<ul>
<li>ホーム</li>
<li>会社概要</li>
</ul>
</div>
</div>
ロゴやナビゲーションを、それぞれの箱に入れ、さらにそれらを header という大きな箱に入れる。
こうすることで、CSSで「ヘッダー全体を背景色で塗る」とか「ヘッダー全体を画面の上に固定する」といった操作が可能になります。
「Webサイト制作とは、適切な大きさの箱(div)を作り、その中に要素を詰め込み、その箱を並べていくパズルゲームである」
この感覚を掴めると、一気に視界が開けます。コードを書く前に、手元のノートに四角い枠を書いて、箱の構成を考える。プロはみんなやっています。

CSSの本質|すべては「余白」と「配置」の制御
HTMLで骨組みを作ったら、CSS(Cascading Style Sheets)で装飾します。
初心者は色(color)やフォントサイズ(font-size)に目が行きがちですが、CSSで最も難しく、かつ重要なのは「レイアウト(配置)」です。
私が初心者のコードをレビューする時、一番修正するのは色の指定ではなく、margin と padding の使い方、そして要素の並べ方です。
ボックスモデルという「絶対の掟」
CSSを理解する上で避けて通れないのが「ボックスモデル」です。
すべてのHTML要素は、長方形のボックスとして扱われます。このボックスは4つの層でできています。
- Content(内容):文字や画像そのもの。
- Padding(内側の余白):内容と境界線の間のスペース。緩衝材のようなもの。
- Border(境界線):枠線。段ボールの厚み。
- Margin(外側の余白):隣の要素との距離。
ここでの最大の落とし穴が、「幅(width)の計算」です。
通常、CSSで width: 100px; と指定しても、それに padding や border の太さが加算され、実際の見た目の幅は120pxになったりします。これがレイアウト崩れの主犯です。
これを防ぐための魔法の呪文があります。
* {
box-sizing: border-box;
}
これをCSSの最初に書いておくだけで、「widthにpaddingとborderを含める」という計算方式に変わります。つまり、width: 100px; と書けば、paddingをいくら増やしても全体の幅は100pxのまま保たれます。
これを設定していないプロの現場は見たことがありません。何も考えずに最初に書いてください。
現代の武器 Flexbox を使いこなせ
かつて私たちを苦しめた float に代わり、現在のWeb制作現場で標準となっているのが Flexbox(フレックスボックス) です。
これさえ覚えれば、要素の横並びは9割解決します。
使い方は簡単です。並べたい要素が入っている「親の箱」に対して、魔法の言葉を唱えるだけです。
.container {
display: flex;
}
これだけで、子要素たちが綺麗に横一列に並びます。
さらに、以下のプロパティを組み合わせることで、配置を自由自在に操れます。
justify-content: 横方向(主軸)の配置。中央寄せ(center)や両端揃え(space-between)など。align-items: 縦方向(交差軸)の配置。上下中央揃え(center)など。
昔は「上下中央揃え」をするために、複雑な計算やハックが必要でしたが、今は align-items: center; 一行で終わります。本当にいい時代になりました。
現場での使いどころ
- ヘッダーのロゴとメニューを横並びにする
- 商品リストをタイル状に並べる
- 記事のサムネイルとタイトルを横並びにする
これらは全てFlexboxの仕事です。まだ float: left; をメインで使っている古い参考書があったら、それは歴史資料として本棚にしまいましょう。
「絶対配置」の甘い罠
もう一つ、初心者がハマるのが position: absolute;(絶対配置)です。
これは、指定した場所に要素をピンポイントで配置できる強力なプロパティですが、多用すると痛い目を見ます。
なぜなら、絶対配置された要素は、他の要素との関係性を断ち切り、浮遊してしまうからです。
前の要素の文章が長くなって行数が増えたとしても、絶対配置された要素は位置が変わらないため、重なって文字が読めなくなったりします。これを「要素の重なり事故」と呼びます。
「レイアウトは基本的にFlexboxやGridで組み、どうしても微調整が必要な装飾(アイコンのバッジや画像上のラベルなど)だけabsoluteを使う」
これが、崩れないコーディングの鉄則です。
最強の環境構築|VS Codeと拡張機能
プロはメモ帳でコードを書きません。Visual Studio Code(VS Code) というエディタを使っています。
Microsoftが開発したこの無料ソフトは、現在世界中のWebエンジニアの標準ツールです。これを使わない手はありません。
なぜVS Codeなのか?
- 入力補完が神:
divと打ってTabキーを押すだけで<div></div>と補完してくれます(Emmet機能)。 - エラーを教えてくれる:閉じタグを忘れたり、スペルミスをすると赤色で警告してくれます。
- 拡張機能が豊富:自分好みにカスタマイズできます。
初心者が最初に入れるべき拡張機能3選
私が新しいPCを買ったら真っ先に入れる拡張機能を紹介します。
- Japanese Language Pack
メニューなどを日本語化してくれます。英語アレルギーの特効薬です。 - Live Server
これが最強です。コードを保存(Ctrl+S)した瞬間に、ブラウザが自動でリロードされて変更が反映されます。
「保存して、ブラウザに切り替えて、更新ボタンを押して…」という無駄な動作から解放されます。デュアルモニター環境なら、片方でコードを書き、片方でリアルタイムに変わっていく画面を確認できます。 - Auto Rename Tag
開始タグ(例:<h1>)を書き換えると、自動で閉じタグ(</h1>)も書き換えてくれます。地味ですが、修正作業のストレスが激減します。
環境構築は、エンジニアにとって「包丁を研ぐ」作業です。
ここを面倒くさがると、料理(コーディング)の効率がガタ落ちします。

実践!プロのワークフロー「いきなり書かない」
ここからが本題です。
実際にデザインデータ(カンプ)を渡された時、プロはどう動くのか?
初心者の多くは、すぐにエディタを開いて <html> と書き始めますが、それは間違いです。
コードを書く前に、勝負の8割は決まっています。
手順1:情報のグルーピング(パーツ分け)
まずはデザイン画をじっくり観察し、赤ペンで「箱の境界線」を引いていきます。
「ここはヘッダーという大きな箱」
「その中にロゴの箱とナビの箱がある」
「ここは商品一覧セクションの箱」
「この3つの商品は同じレイアウトだから、共通のクラスが使えるな」
このように、Webサイト全体を入れ子の箱として認識するのです。これを「構造化」と呼びます。
この設計図なしにコードを書き始めるのは、設計図なしに家を建てるようなもので、必ず途中で破綻します。私は今でも、複雑なレイアウトを組む時は裏紙に手書きで箱を描きます。
手順2:HTMLのみで骨組みを作る
箱の構成が決まったら、HTMLを書きます。
この段階ではCSSは一切書きません。真っ白な背景に、文字と画像が縦にズラッと並ぶだけの状態を作ります。
ここで重要なのは、正しいタグを選ぶこと。
見出しには h1~h6、リストには ul li、ボタンには button や a タグを使う。
この骨組みがしっかりしていれば、後でCSSを当てた時に驚くほどスムーズにレイアウトが決まります。
手順3:大枠からCSSを当てる
詳細な装飾(文字色や余白)は後回しです。
まずは「配置」です。Flexboxを使って横並びにしたり、幅(width)を決めて中央に寄せたりして、大まかなレイアウトを完成させます。
家で言えば、壁と屋根を作ってしまう段階です。壁紙を貼るのは最後です。
手順4:細部の装飾
最後に、フォントサイズ、色、細かい余白(margin/padding)、角丸などを調整します。
これが、手戻りを最小限に抑えるプロの手順です。
鬼門「レスポンシブ対応」を攻略する
現代のWeb制作において、「スマホで見れないサイト」は「存在しない」のと同じです。
PC画面では綺麗なのに、スマホで見ると文字が小さすぎたり、横スクロールが発生してしまう…。これがレスポンシブ対応の壁です。
Googleも「モバイルファーストインデックス」を掲げており、スマホ対応していないサイトは検索順位を落とされます。
メディアクエリの考え方
CSSには「画面幅が〇〇px以下なら、このスタイルを適用する」という条件分岐の書き方があります。これがメディアクエリです。
/* 基本(PC向け)のスタイル */
.box {
width: 50%;
display: flex;
}
/* スマホ向け(画面幅767px以下) */
@media screen and (max-width: 767px) {
.box {
width: 100%; /* 横幅いっぱいに広げる */
display: block; /* 縦並びに戻す */
}
}
スマホファーストという思考
最近の主流は、PC用コードを先に書いてスマホ用で上書きするのではなく、スマホ用コードを基本として、PC用を書き足す(モバイルファースト)手法です。
理由の1つは、スマホのデザインの方がシンプルだからです。
シンプルなコード(スマホ)をベースに、画面が広い時だけ複雑なレイアウト(PC)を追加する方が、コードの記述量が減り、バグも少なくなります。
もう1つの理由は、ユーザーの大半がスマホで見ているからです。
私が担当している案件でも、アクセス解析を見ると8割以上がスマホからのアクセスということがザラにあります。
「まずはスマホでどう見えるか」を起点に考える癖をつけましょう。
独学最強の勉強法「模写コーディング」
「本を読んでも全然できるようにならない」という悩みへの特効薬。
それが模写コーディングです。
既存のWebサイト(自分の好きなサイトや、模写練習用の教材サイト)を見て、その見た目を自分のコードだけで再現するトレーニングです。
模写のメリット
- 現場の実践力がつく:本に載っている綺麗な例題とは違う、リアルなレイアウトの悩みに直面できます。「この微妙なズレはどうやったら直るんだ?」という格闘こそが成長の糧です。
- わからないことが明確になる:「ここの余白はどうやって作るんだ?」「この画像の上に文字を乗せるには?」と、具体的な疑問が生まれるので、検索の精度が上がります。
- 自信になる:「あの有名なサイトと同じものが作れた!」という経験は、何物にも代えがたい自信になります。
必須ツール:Google Chrome検証機能(DevTools)
模写をしていて「どうしてもここの余白のサイズがわからない」「色が合わない」という時、答え合わせに使うのがブラウザの検証機能です。
Chromeなら F12 キー(Macなら Command + Option + I)を押すと出てくるあのパネルです。
これを使うと、世の中のあらゆるWebサイトのHTMLとCSSを丸裸にできます。
適用されているCSSプロパティ、余白(マージン)の取り方、色のカラーコード。全てが見えます。
「プロはどうやってこのレイアウトを実現しているんだろう?」
そう思ったらすぐにF12。
「検証ツールを使いこなす者はWebを制す」と言っても過言ではありません。このツールは、エラーの原因を探すデバッグ作業でもメインの武器になります。私が仕事中に一番見ている画面は、エディタではなくこの検証ツールかもしれません。

よくあるトラブルと解決策(FAQ)
初心者が必ずぶつかる壁と、その解決策をまとめました。これを知っているだけで、悩む時間を数十時間は節約できます。
Q1. CSSが全く効きません!
A. 9割はスペルミスか、読み込み記述のミスです。
- HTML側でCSSファイルを読み込む
<link>タグのパスは合っていますか? - クラス名のスペルは合っていますか?(
contianerとかwrappeとか書いてませんか?) - 全角スペースが入っていませんか?(これが見つけにくくて厄介です)
- キャッシュが残っていませんか?(Chromeならスーパーリロード
Ctrl + Shift + Rを試してください)
Q2. margin と padding の使い分けがわかりません。
A. 「境界線の外」か「中」かの違いです。
段ボール箱でイメージしてください。
- margin(マージン):段ボール箱と段ボール箱の間の距離(箱の外側の余白)。隣の人と距離を取りたい時に使います。
- padding(パディング):段ボール箱のフチから、中身(ミカンなど)までの距離(箱の内側の余白)。中身を守る緩衝材のイメージです。
背景色をつけた時に、色が塗られる範囲が padding、塗られない隙間が margin と覚えると分かりやすいです。
Q3. 画像の下に謎の隙間ができます。
A. 画像は文字扱いだからです。<img> タグは、デフォルトでは「文字(インライン要素)」として扱われます。文字には、ベースライン(アルファベットのgやjの下の部分)のための隙間が確保されているため、画像の下にもその隙間ができてしまいます。
解決策:CSSで画像に vertical-align: bottom; または display: block; を指定してください。これで直ります。これは「CSSあるある」の四天王に入るトラブルです。
Q4. 副業で稼げるレベルになるにはどれくらいかかりますか?
A. 早ければ3ヶ月、通常は半年が目安です。
HTML/CSSの基礎に1ヶ月、模写コーディングで実践力をつけるのに2ヶ月。
その後、JavaScript(jQuery含む)を少し触れるようになれば、ランディングページ制作案件(単価3~5万円)に挑戦できます。
ただし、毎日コツコツ手を動かすことが前提です。週末だけ勉強するスタイルだと、1年かかっても習得できないことが多いです。なぜなら、先週やったことを忘れてしまうからです。
実践テクニック|メンテナンスしやすいコードを書く
自分一人で作っている時は適当なクラス名でも動きますが、案件となれば話は別です。
「半年後の自分」や「他のエンジニア」が見ても理解できるコードを書くのがプロの流儀です。
クラス名の命名規則
div class="box1" div class="aaa" といった名前はNGです。
中身が何なのかを表す名前をつけましょう。
.header-logo(ヘッダーのロゴ).btn-primary(主要なボタン).article-title(記事のタイトル)
有名な命名規則に「BEM(ベム)」というものがありますが、最初は難しく考えすぎず、「場所 - 役割 - 状態」がわかる英語名をつける癖をつけてください。ローマ字(midashi)はやめましょう。ダサいだけでなく、海外のツール等でバグる原因になります。
CSSのコメントアウト
複雑なCSSを書くときは、必ずコメントを残しましょう。
/* ====================================
ヘッダーエリア
==================================== */
.header { ... }
/* スマホ用メニューの調整 */
@media ...
これがあるだけで、修正時のスピードが段違いです。
コードは「動けばいい」のではなく、「人が読むもの」という意識を持つことが、脱初心者への第一歩です。

副業案件獲得へのロードマップ
HTML/CSSを学んだ先に、どうやって収益化するか。
具体的なステップは以下の通りです。
- 基礎学習(1ヶ月):Progateやドットインストールでタグとプロパティを知る。
- 模写コーディング(1~2ヶ月):簡単なLPを3つくらい完コピする。ここでFlexboxやレスポンシブをマスターする。
- ポートフォリオ制作(1ヶ月):自分の自己紹介サイトを作る。これが一番の営業ツールになります。
- クラウドソーシング登録:最初は「コーディングのみ」の案件や、単価が安めの案件に応募して実績を作る。
最初の1円を稼ぐまでが一番しんどいです。
「自分なんかが応募していいんだろうか」と怖くなる気持ち、よくわかります。私も最初の案件に応募するボタンを押すのに3日悩みました。手が震えました。
でも、クライアントが求めているのは「スーパーエンジニア」ではなく、「納期を守り、連絡が取れて、要望通りの表示を作ってくれる人」です。
基礎がしっかりしていれば、十分戦えます。
まとめ|コーディングは「世界を作る」魔法である
HTMLとCSSの学習は、最初は暗いトンネルを歩いているように感じるかもしれません。
書いても書いてもエラーが出る。思い通りにならない。才能がないんじゃないかと落ち込む。
私もそうでした。float が崩れるたびに、PCを窓から投げ捨てたい衝動に駆られました。
でも、ある瞬間、急に視界が開ける時が来ます。
「あ、これってこういう構造だったんだ!」
「Flexboxってこう動くのか!」
点と点が線につながる瞬間です。この瞬間の快感は、他の何にも代えがたいものがあります。
私がWeb制作を続けている理由は、稼げるからというのもありますが、何より「自分が書いたコードが、世界中のブラウザで形になる快感」が忘れられないからです。
真っ白な画面に、自分の指先一つで彩りを与え、情報を整理し、誰かに届けることができる。これって、現代における魔法みたいなものだと思いませんか?
HTMLとCSSは、その魔法を使うための最初の呪文です。
挫折しそうになったら、またこの記事に戻ってきてください。「なんだ、プロも最初は同じだったのか」と思い出してください。
あなたの書いたコードが、Webという広い海で誰かの目に留まる日を、心から楽しみにしています。
さあ、エディタを開いて、最初の一行を書き始めましょう。まずは <h1>Hello World</h1> から。そこから全ての物語は始まります。

あなたのWebクリエイターとしての旅路が、素晴らしいものになることを願っています。
