文章は「かたまり」に分けると読みやすくなります。HTML では見出しと段落で構造を表します。
<h1>〜<h6> の 6 段階<p><span>使い方のコツ <h1> はページに 1 つ / 大きさを飛ばさない(h2 の下に h3)/ 多用は 3 段階まで。
各見出しの大きさと、段落・span の違いを ▶ 実行して見比べましょう。
<h1>見出し1(ページの題)</h1>
<h2>見出し2</h2>
<h3>見出し3</h3>
<p>これは段落(p)。まとまった文章に使います。</p>
<span>span はただの文字。見た目は変わりません。</span>
項目を並べるときはリストを使います。
<ul> … 順序が関係ない箇条書き(行頭に点)<ol> … 順序が大事な箇条書き(行頭に番号)<li>。リストの中にリストを入れる入れ子もできます記述 中身を自分の情報に書き換えて ▶ 実行。ul(点)と ol(番号)の違いを確かめましょう。
<h2>自己紹介</h2>
<ul>
<li>名前: <strong>じぐ太郎</strong></li>
<li>好きな食べ物ランキング:
<ol>
<li>うどん</li>
<li>そば</li>
</ol>
</li>
</ul>
見た目ではなく「意味」で選ぶのがポイントです。
<em> … 強調(標準では斜体で表示される)<strong> … 重要(標準では太字で表示される)「斜体にしたいだけ」「太字にしたいだけ」なら <span> + CSS を使います(意味づけタグの誤用を避ける)。
▶ 実行して、em(斜体)と strong(太字)の表示を確かめましょう。
<p>日本で <em>一番</em> 高い山は富士山です。</p>
<p><strong>締め切りは今日です。</strong></p>
画像は <img>、リンクは <a>。img は閉じタグの要らない空要素です。タグの後ろに 名前="値" の形で書く追加設定を属性と呼びます。
<img src="./icon.png" alt="アイコン" />
<img src="https://example.com/user.png" alt="ユーザー" />
<a href="https://jig.jp">株式会社 jig.jp</a>
<a href="https://jig.jp" target="_blank">新しいタブで開く</a>
src … 画像ファイルの場所(./=サイト内の相対パス/https://=外部 URL の絶対パス)alt … 画像の代替テキスト(表示できない時や読み上げ時に読まれる説明文)href … リンク先の URL(hypertext reference)/ target="_blank" … 新しいタブで開くよく見る Web ページのレイアウト(聖杯レイアウト)は、意味を表す要素で組み立てられます。
<header> ヘッダー / <nav> ナビゲーション<main> メインコンテンツ / <aside> サイドバー<footer> フッター<div> … 意味を持たない万能の「箱」(要素をまとめて装飾)<span> … 文字用の箱
意味の合う要素を使うと、ブラウザや読み上げ機能に構造が正しく伝わります(アクセシビリティ向上)。
チェックポイント
head(見せない情報)と body(表示される中身)の役割を説明できる次は、この骨組みに CSS で見た目をつけていきます。
CSS の書き方 ・ ボックスモデル ・ 優先度 ・ セレクタ ・ 疑似クラス ・ 変数 ・ 文字 ・ 背景と枠 ・ 図形
HTML の骨組みに CSS で色・大きさ・余白・枠をつけ、見た目を仕上げます。
CSS は どの要素を・どう飾るかを指定します。基本の形は セレクタ { プロパティ: 値; }。
この章で扱うスタイル
color / font-size / font-weight / line-height / text-decoration / font-familybackground(-color / -image) / border / border-radiuswidth / height / padding / margin / box-sizingdisplay / cursor一覧の中の color から始めましょう。1 つのタグに 1 つのスタイルを当てるのが基本です。
h1 { color: red; } … すべての <h1> 要素の文字色を赤にする、という意味。
セレクタ(h1)・プロパティ(color)・値(red)が 1 つずつ対応します。
次のページで、実際に色を変えて動かしてみましょう。
<style> の中の色を変えて ▶ 実行してみましょう。
<style>
h1 { color: red; }
</style>
<h1>Hello, World !</h1>
すべての要素は「額に入った絵」のように、内側から content → padding → border → margin の四角で囲まれています。
content … 中身(文字や画像)padding … 中身と枠の間の内側の余白border … 枠線margin … 要素どうしの外側の余白
要素の幅は content + padding + border の合計です。既定の content-box では width が
content だけを指すため、下の例では 160 + 16×2 + 4×2 = 200px に膨らみます。
box-sizing: border-box にすると width が 枠込みになり、実寸は 160px のまま(content 側が縮む)。
現代の Web 開発では最初に * { box-sizing: border-box; } と書くのが定番です。
同じ width: 160px でも border-box の方が枠込みで収まります。▶ 実行して見比べましょう。
<style>
.box {
width: 160px;
padding: 16px;
border: 4px solid #333;
background: #cfd8dc;
margin: 6px 0;
}
.border {
box-sizing: border-box;
}
</style>
<div class="box">content-box(既定・実寸は width より大きい)</div>
<div class="box border">border-box(width=160px に収まる)</div>
スタイルシートは 3 種類あり、後のものほど優先されます。
<h1> が大きいのはこれ)私たちアプリ開発者が実際に編集するのは、オーサースタイルシートだけ。 他の 2 つは「こういう仕組みがある」と知っておけば十分です。
デフォルトのスタイルをまとめて整える「CSS リセット」という仕組みもあります(付録)。
「どの要素に効かせるか」を細かく指定できます。
| 書き方 | 意味 (対応するHTMLの要素) |
|---|---|
h1 |
すべての h1 要素(要素型) |
.box |
class="box" の要素(クラス) |
#main |
id="main" の要素(ID・重複禁止) |
a, p |
a と p の両方(グループ化) |
p span |
p の子孫の span(子孫結合子・スペース) |
p > span |
p の直接の子の span(子結合子) |
.card > strong(直接の子)だけ色が変わることを、▶ 実行して確かめましょう。
<style>
.card {
border: 2px solid #3f51b5;
padding: 8px;
}
.card > strong {
color: #e91e63;
}
</style>
<div class="card">通常の文字 <strong>強調された子</strong></div>
HTML に書かれていない「状態」や、要素にもスタイリングを当てられます。
:hover などが疑似クラス(: ひとつ)… ホバー中などの状態::first-letter などが疑似要素(:: ふたつ)… 要素の一部下のボタンにカーソルを乗せて、:hover で色が変わるのを確かめましょう。
<style>
.btn {
display: inline-block;
padding: 8px 16px;
border-radius: 6px;
background: #3f51b5;
color: #fff;
cursor: pointer;
}
.btn:hover {
background: #e91e63;
}
p::first-letter {
font-size: 2em;
color: #e91e63;
}
</style>
<div class="btn">ホバーしてね</div>
<p>最初の一文字が大きく色づきます。</p>
色などを :root に変数として定義し、var() で使い回せます。1 か所直すと使っている全部に反映されます。
変数名は必ず -- で始めます。色の意味を名前で伝えられ、可読性も上がります。
--brand の色を変えると、使っている箇所すべてに反映されます。▶ 実行して試しましょう。
<style>
:root {
--brand: #3f51b5;
}
h2 {
color: var(--brand);
}
.tag {
background: var(--brand);
color: #fff;
padding: 2px 10px;
border-radius: 4px;
}
</style>
<h2>ブランドカラー</h2>
<span class="tag">同じ色を使い回す</span>
文字の見た目を変える代表的なプロパティです。
color … 文字色font-size … 文字の大きさfont-weight … 太さ(normal / bold)line-height … 行の高さ(行間)text-decoration … 下線・打ち消し線などfont-family … フォントの種類<style> の値をいじって、文字の変化を ▶ 実行して確かめましょう。
<style>
p {
color: #3f51b5;
font-size: 20px;
font-weight: bold;
line-height: 1.8;
text-decoration: underline;
font-family: sans-serif;
}
</style>
<p>文字の見た目は CSS で自由に変えられます。<br>
色・大きさ・太さ・行間・下線・フォントを試してみましょう。</p>
背景色・枠・角丸を組み合わせると「カード」のような見た目が作れます。
background-color / background-image / border / border-radius など。ほかにも多数あるので、使うときに調べましょう。
背景・枠・角丸の値を変えて ▶ 実行。自分好みのカードにしてみましょう。
<style>
.card {
width: 220px;
padding: 16px;
background: #e8f0fe;
border: 2px solid #3f51b5;
border-radius: 12px;
}
</style>
<div class="card">角丸のカード</div>
border-radius を大きくすると、四角形が円や丸帯型になります。
border-radius: 50% … 円border-radius: 100vh … 丸帯型もっと凝った形(吹き出しなど)も CSS で作れます(付録参照)。
▶ 実行して円と丸帯型を確かめましょう。数値を変えると形が変わります。
<style>
.circle {
width: 120px;
height: 120px;
background: #4dd0e1;
border-radius: 50%;
}
.band {
width: 220px;
height: 56px;
margin-top: 10px;
background: #aed581;
border-radius: 100vh;
}
</style>
<div class="circle"></div>
<div class="band"></div>
チェックポイント
セレクタ { プロパティ: 値 } の形で書けるbox-sizing を説明できるフレックスボックス ・ グリッド ・ 使い分け
要素を思いどおりの位置に並べます。実務で最もよく使う 2 大レイアウトです。
display: flex を付けた要素(親)の中では、子要素が主軸に沿って一列に並びます。既定は横(行)方向です。
display: flex … 子が横並びになるgap … 子どうしのすき間記述 gap の値を変えたり、flex-direction: column を足して縦並びも試しましょう。
<style>
.row {
display: flex;
gap: 8px;
}
.box {
width: 80px;
height: 60px;
background: #90caf9;
display: flex;
align-items: center;
justify-content: center;
}
</style>
<div class="row">
<div class="box">A</div>
<div class="box">B</div>
<div class="box">C</div>
</div>
justify-content と align-items で、子要素を主軸・交差軸それぞれの方向に揃えます。
justify-content … 主軸(既定は横)方向
flex-start / center / flex-endspace-between / space-around / space-evenlyalign-items … 交差軸(既定は縦)方向
stretch(既定)/ center / flex-start / flex-end記述 justify-content を space-between や flex-end に変えて、並びの変化を見ましょう。
<style>
.row {
display: flex;
/* ↓ ここを space-between / flex-end などに変えてみよう */
justify-content: center;
align-items: center;
gap: 8px;
height: 120px;
background: #eceff1;
}
.box {
width: 70px;
height: 50px;
background: #90caf9;
display: flex;
align-items: center;
justify-content: center;
}
</style>
<div class="row">
<div class="box">A</div>
<div class="box">B</div>
<div class="box">C</div>
</div>
余ったスペースの扱いをコントロールします。
flex: 1(子に付ける)… その子が余白を埋めて伸びる。複数に付ければ比率で分け合うナビバーの「ロゴを左・メニューを右」は、間の要素に flex: 1 を入れると作れます。
記述 中央の flex: 1 を消すと、伸びずに縮みます。値を変えて挙動を見ましょう。
<style>
.bar {
display: flex;
gap: 8px;
background: #eceff1;
padding: 8px;
}
.item {
padding: 12px;
background: #90caf9;
text-align: center;
}
/* ↓ flex: 1 を消すと「伸びない」。数値を増やすと取り分が増える */
.grow {
flex: 1;
background: #a5d6a7;
}
</style>
<div class="bar">
<div class="item">ロゴ</div>
<div class="item grow">中央(伸びる)</div>
<div class="item">メニュー</div>
</div>
display: grid は行と列の 2 次元で配置します。まず「何列にするか」を grid-template-columns で決めます。
grid-template-columns: 1fr 1fr 1fr … 3 等分の 3 列fr … 余ったスペースを分け合う比率(2fr 1fr は 2 : 1)repeat(3, 1fr) … 1fr 1fr 1fr の短い書き方gap … マス目のすき間記述 grid-template-columns を 2fr 1fr や repeat(4, 1fr) に変えて、列の割り方を試しましょう。
<style>
.grid {
display: grid;
/* ↓ 列の数や比率を変えてみよう */
grid-template-columns: repeat(3, 1fr);
gap: 8px;
}
.cell {
height: 56px;
background: #90caf9;
display: flex;
align-items: center;
justify-content: center;
}
</style>
<div class="grid">
<div class="cell">1</div>
<div class="cell">2</div>
<div class="cell">3</div>
<div class="cell">4</div>
<div class="cell">5</div>
<div class="cell">6</div>
</div>
grid-template-areas を使うと、エリアに名前を付けて絵のように配置できます。ヘッダー・左右カラム・メイン・フッターからなる「よくあるレイアウト(聖杯レイアウト)」も一気に組めます。
grid-template で行・列と各エリアの並びを、grid-area で「どの要素をどのエリアに置くか」を指定します。
記述 左右カラムの幅(120px)や main の色を変えて ▶ 実行 してみましょう。
<style>
* {
box-sizing: border-box;
margin: 0;
}
body {
display: grid;
gap: 4px;
grid-template:
'header header header' 40px
'left main right' 150px
'footer footer footer' 40px / 120px auto 120px;
}
header { grid-area: header; background: #90caf9; }
.left { grid-area: left; background: #ffab91; }
main { grid-area: main; background: #a5d6a7; }
.right { grid-area: right; background: #ffab91; }
footer { grid-area: footer; background: #90caf9; }
body > * { display: grid; place-content: center; }
</style>
<header>ヘッダー</header>
<div class="left">左</div>
<main>メイン</main>
<div class="right">右</div>
<footer>フッター</footer>
迷ったら「一列に並べる? → Flex」「縦横きっちり? → Grid」。2 つを組み合わせるのも普通です。
チェックポイント
display: flex で横並び、justify-content / align-items で位置を揃えられるflex: 1 で伸ばす、flex-wrap で折り返せるgrid-template-columns と fr で列を作れるgrid-template-areas で聖杯レイアウトを組めるもっと遊びたい人へ: Flexbox Froggy / Grid Garden
Claude Code を相棒に、今日学んだ HTML と CSS で。
HTML の構造化から、CSS の装飾・レイアウト(Grid / Flexbox)まで、ひととおり体験しました。
この HTML と CSS が、あらゆる Web ページの土台です。
続けて JavaScript を学ぶと、クリックで動くページも作れます。
今日触れられなかった要素・プロパティはたくさんあります。作るときに調べながら足していきましょう。
ページ上で右クリック → 検証、またはショートカット(Win/ChromeOS: Ctrl+Shift+I / Mac: Cmd+Option+I)で開きます。

「意図しない大きさ」を見つけるのに Computed タブが便利です。
Chrome 拡張 VisBug を入れると、Alt+Shift+D で起動。

リファレンス(困ったら引く)
デザインシステム / ガイドライン
MDN は「これどう書くんだっけ?」を引く辞書。
デザインシステムは「どう並べ・配色すると使いやすいか」の指針集です。
============================================================================ HTML/CSS を始めよう(勉強会スライド) ビルド: npx marp slide.md --html -o slide.html --allow-local-files --theme-set themes/jig.css ============================================================================
↓ 演習タイマーの実装。題材を問わずそのまま使う。触らないでください。 各スライドに <div class="timer-box" data-seconds="秒数">…</div> を置くと右上にタイマーが出ます。 クリックで開始/停止、右クリックでリセット、± ボタンで 60 秒単位の増減。
↓ コードブロックにコピーボタンを付ける。題材を問わずそのまま使う。触らないでください。 各 <pre> の右上に「コピー」が出て、コード全文をクリップボードにコピーします(@@ ハイライトの記号は含まれません)。
↓ インライン playground(その場で試せるミニ実行環境)。題材を問わずそのまま使う。触らないでください。 スライド本文に次のように書くと、編集→実行できる小さな実行環境になります(詳細は TEMPLATE_GUIDE.md): <div class="playground" data-mode="console"> ```js console.log("hello"); ``` </div> data-mode="console"(既定)は console.log の出力を、data-mode="dom" は HTML の描画結果+console を表示。 data-height="200" で出力領域の高さ(px)を調整できます。コードは sandbox iframe(allow-scripts のみ)内で実行され、 さらに CSP で外部通信を遮断しているため、スライド本体にも外部にも影響しません。