レスポンシブなプロフィールページを作ろう

💻 この課題はPCで実際にコードを書いて取り組みましょう
1

HTMLの構造を作ろう

index.htmlstyle.css を作成し、ページの骨組みを作りましょう。

  • <header> — ページタイトル
  • <main class="content"> — プロフィールとスキル一覧
  • <footer> — コピーライト

viewport メタタグ:

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

を必ず書きましょう。これがないとスマホで正しく表示されません。

このタグは「画面幅に合わせて表示する」という指示をブラウザに伝えます。

ブラウザで開いて、ヘッダー・メインエリア・フッターの3つが表示されることを確認しましょう。

💡 ヒント
,
,
で大きく分け、main の中に .profile(アイコン+名前+自己紹介)と .skills(スキルリスト)を横並びにする想定で配置します。

参考: CSS レッスン1: CSSの基本

📝 模範解答を見る

⚠️ まず自分で考えてから見よう!

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>My Profile</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <header><h1>🚀 My Profile</h1></header>
  <main class="content">
    <section class="profile">...</section>
    <section class="skills">...</section>
  </main>
  <footer><p>&copy; 2026 My Profile</p></footer>
</body>
</html>
2

基本スタイルを設定しよう

body のフォント・背景色、ヘッダーとフッターの色を設定しましょう。

ダークカラーのヘッダー/フッターに白い文字を使うと、プロっぽいデザインになります。

* { box-sizing: border-box; margin: 0; } でブラウザのデフォルト余白をリセットします。

min-height: 100vh でページが画面の高さいっぱいになります。

display: flex; flex-direction: column; を body に設定すると、フッターが常に画面下部に配置されます。

flex: 1 を main に設定すると、ヘッダーとフッターの間のスペースを全て使います。

確認: ヘッダーとフッターがダーク背景で表示されていればOKです。

💡 ヒント
body { font-family: sans-serif; background: #f5f5f5; }、ヘッダーに background: #2d3748; color: #fff; padding: 16px 24px; を設定。

参考: CSS レッスン2: 文字のスタイル

📝 模範解答を見る

⚠️ まず自分で考えてから見よう!

* { box-sizing: border-box; margin: 0; }
body {
  font-family: sans-serif;
  background: #f5f5f5;
  color: #333;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}
header {
  background: #2d3748;
  color: #fff;
  padding: 16px 24px;
  text-align: center;
}
header h1 { font-size: 1.3rem; }
footer {
  background: #2d3748;
  color: #fff;
  text-align: center;
  padding: 16px;
  font-size: 0.85rem;
}
3

プロフィールセクションをデザインしよう

アイコン(丸い枠)、名前、肩書き、自己紹介文にスタイルを当てましょう。

border-radius: 50% で正円を作れます。絵文字をアイコンとして使うと簡単です。

display: flex; justify-content: center; align-items: center; で絵文字を丸の中央に配置します。

💡 ポイント: width と height を同じ値にしないと正円になりません。

色は background: #4299e1 で青にしていますが、好きな色に変えてOKです。

margin: 0 auto 16px で丸を中央寄せし、下に16pxの余白を入れています。

確認: 丸いアイコンの中に絵文字が中央に表示されていればOKです。

💡 ヒント
アイコンに width: 120px; height: 120px; border-radius: 50%; background: #4299e1; を設定。名前は font-size: 1.5rem; font-weight: bold;。

参考: CSS レッスン3: 背景と枠線

📝 模範解答を見る

⚠️ まず自分で考えてから見よう!

.profile { text-align: center; min-width: 250px; }
.avatar {
  width: 120px;
  height: 120px;
  border-radius: 50%;
  background: #4299e1;
  color: #fff;
  font-size: 3rem;
  display: flex;
  justify-content: center;
  align-items: center;
  margin: 0 auto 16px;
}
.profile h2 { font-size: 1.5rem; margin-bottom: 4px; }
.role { color: #888; font-size: 0.9rem; margin-bottom: 12px; }
.bio { color: #555; line-height: 1.6; font-size: 0.95rem; }
4

Flexboxで横並びレイアウトにしよう

.content に Flexbox を設定して、プロフィール(左)とスキル一覧(右)を横並びにしましょう。

max-widthmargin: 0 auto で中央寄せにすると見やすくなります。

padding: 32px 24px で上下32px、左右24pxの余白を設定します。

中間確認: ブラウザで開いて、プロフィールとスキルが横並びになっていることを確認しましょう。

flex: 1 を .skills に設定すると、残りのスペースを全て使って広がります。

gap: 32px でプロフィールとスキルの間に余白ができます。

💡 ポイント: max-width: 900px で広い画面でも横に広がりすぎないようにしています。

💡 ヒント
.content に display: flex; gap: 32px; max-width: 900px; margin: 0 auto; padding: 32px; を設定。

参考: CSS レッスン5: Flexbox

📝 模範解答を見る

⚠️ まず自分で考えてから見よう!

.content { display: flex; gap: 32px; max-width: 900px; margin: 0 auto; padding: 32px 24px; flex: 1; }
5

スキルカードをデザインしよう

スキル一覧をカード風にデザインし、レベルバーをCSSで表現しましょう。

スキルバーの仕組み:

外側のバー(.skill-bar、灰色)の中に内側のバー(.skill-fill、グラデーション)を入れます。

内側バーの width をインラインスタイルで指定してレベルを表現します。

例: width: 80% = 80%習得、width: 30% = 30%習得

HTML側: <div class="skill-fill" style="width:80%"></div>

overflow: hidden で内側バーが外側からはみ出さないようにします。

border-radius: 8px でバーの端を丸くすると見た目が良くなります。

linear-gradient(90deg, #4299e1, #667eea) で左から右へのグラデーションを作っています。

確認: 各スキルのバーが異なる長さで表示されていればOKです。

💡 ヒント
各スキルに背景色付きのバーを作ります。
のように幅で表現。

参考: CSS レッスン4: ボックスモデル

📝 模範解答を見る

⚠️ まず自分で考えてから見よう!

.skills {
  flex: 1;
  background: #fff;
  border-radius: 12px;
  padding: 24px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.08);
}
.skills h2 { font-size: 1.2rem; margin-bottom: 20px; }
.skill { margin-bottom: 16px; }
.skill-name { font-size: 0.9rem; font-weight: bold; display: block; margin-bottom: 6px; }
.skill-bar { background: #e2e8f0; border-radius: 8px; height: 12px; overflow: hidden; }
.skill-fill {
  background: linear-gradient(90deg, #4299e1, #667eea);
  height: 100%;
  border-radius: 8px;
}
6

メディアクエリでスマホ対応しよう

768px以下の画面幅で、横並びを縦並びに切り替えましょう。

@media の構文:

@media (条件) { CSSルール } の形で書きます。

条件を満たすときだけ中のCSSが適用されます。

max-width: 768px は「画面幅が768px以下のとき」という意味です。

flex-direction: column で横並びを縦並びに切り替えます。

.profile { min-width: auto } で幅の制限を解除します。

アバターも width: 80px; height: 80px に小さくして、スマホ画面に合わせます。

開発者ツールのスマホ表示モード(F12 → スマホアイコン)で確認できます。

アイコンサイズや余白も調整して完成です!🎉

発展課題:

・ダークモード対応(prefers-color-scheme: dark

・スキルを増やす

・SNSリンクを追加する

・バーにアニメーションをつける

💡 ヒント
@media (max-width: 768px) { .content { flex-direction: column; } } で縦並びに。アイコンを小さくし、padding を減らします。

参考: CSS レッスン6: レスポンシブ

📝 模範解答を見る

⚠️ まず自分で考えてから見よう!

@media (max-width: 768px) {
  .content { flex-direction: column; padding: 24px 16px; }
  .profile { min-width: auto; }
  .avatar { width: 80px; height: 80px; font-size: 2rem; }
}
🎯

📚 使う技術を学ぶ

⚠️ つまずいたら