HTML/CSS / LESSON 17 / HT17

HTML/CSS:装飾と動き

1学習の目的

2基礎解説

プロパティ効果よく使う値
box-shadow影を落とす0 2px 8px rgba(0,0,0,.15)
border-radius角を丸める8px / 50%
transition変化を滑らかに0.2s
transform移動・拡大・回転translateY(-4px)
✅ 覚えるべき重要ポイント
  1. box-shadow は「横 縦 ぼかし 色」の順0 2px 8px rgba(0,0,0,0.15) なら、真下に2pxずらして8pxぼかす。薄い影ほど自然に見える
  2. border-radius: 50% で正円になる(幅と高さが同じ場合)。アイコンやアバターの定番。
  3. transition は「変化前」の状態に書く:hover のほうに書くと、マウスを離したとき瞬時に戻ってしまう。
  4. transform はレイアウトに影響しない。移動しても元の場所を占め続けるので、周りの要素がずれない。アニメーションに適している
  5. 動きは 0.2〜0.3秒が目安。長すぎると操作が重く感じられ、短すぎると気づかれない。cursor: pointer も合わせて指定する。

現場使用例:カードの浮き上がり、ボタンのホバー効果、アバターの円形表示、モーダルの影、リンクの色変化。

/* 影:横 縦 ぼかし 色 */
.card {
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
  border-radius: 8px;
}

/* 円形にする */
.avatar {
  width: 60px;
  height: 60px;
  border-radius: 50%;
}

/* ⭐ transition は「変化前」に書く */
.btn {
  background-color: #0066cc;
  transition: background-color 0.2s;
  cursor: pointer;
}

.btn:hover {
  background-color: #004499;    /* 0.2秒かけて変わる */
}

/* カードを浮き上がらせる */
.card {
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
  transition: transform 0.2s, box-shadow 0.2s;
}

.card:hover {
  transform: translateY(-4px);              /* 4px上へ */
  box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2); /* 影を濃く */
}

/* transform の種類 */
.move   { transform: translateY(-4px); }   /* 移動 */
.big    { transform: scale(1.1); }         /* 1.1倍に拡大 */
.rotate { transform: rotate(45deg); }      /* 45度回転 */

/* 複数まとめて滑らかに */
.all {
  transition: all 0.3s ease-in-out;
}

/* 文字にも影を落とせる */
.title {
  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
}

3基本ドリル(10問)

HT17-D01 div に0 2px 8px rgba(0,0,0,0.15))と角丸8px)を付けよ(幅200px・高さ100px・背景白)。 コーディング★☆☆無料
期待される結果

box-shadowとborder-radiusが正しい

ヒント

box-shadow は「横 縦 ぼかし 色」の順に書く。

模範解答
<style>
  .card {
    width: 200px;
    height: 100px;
    background-color: #ffffff;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
    border-radius: 8px;
  }
</style>

<div class="card">カード</div>
解説

薄い影で十分な立体感が出る。濃すぎる影は古い印象になるので、透明度0.1〜0.2程度に抑えるのが現代的。

HT17-D02 border-radius: 50% を正方形の要素に指定するとどうなるか。
A. 少し丸くなる B. 正円になる C. 半分になる D. 変わらない
選択★☆☆無料
期待される結果

解答 == B

ヒント

角を「半径50%」で丸めると、どうなるか。

模範解答
B
解説

幅と高さが同じなら正円になる。アイコン・アバター・バッジなど、丸い要素はすべてこれで作れる。

HT17-D03 正円のアバターを作れ(60×60px、背景 #0066ccborder-radius: 50%)。 コーディング★☆☆無料
期待される結果

border-radiusが50%

ヒント

幅と高さを同じにして border-radius: 50% を指定する。

模範解答
<style>
  .avatar {
    width: 60px;
    height: 60px;
    background-color: #0066cc;
    border-radius: 50%;
  }
</style>

<div class="avatar"></div>
解説

画像を入れる場合は object-fit: cover も併用する。縦横比が違う写真でも、円形に切り抜いて表示できる。

HT17-D04 変化を滑らかにするプロパティを補ってコードを完成させよ。 穴埋め★☆☆無料
コード
<style>
  .btn {
    background-color: #0066cc;
    ____: background-color 0.3s;
  }

  .btn:hover {
    background-color: #004499;
  }
</style>

<button class="btn">ボタン</button>
期待される結果

transitionが0.3s

ヒント

「移り変わり」を意味する10文字のプロパティ。

模範解答
transition
解説

transition が無いと色が瞬時に切り替わる。0.2〜0.3秒かけて変化させると、動きが自然になる。

HT17-D05 transition はどこに書くべきか。
A. :hover のほう B. 変化前(通常の状態)のほう C. どちらでもよい D. body
選択★☆☆無料
期待される結果

解答 == B

ヒント

マウスを離したときも滑らかに戻したい。

模範解答
B
解説

:hover に書くと、マウスを離したとき瞬時に戻る。通常の状態に書けば、行きも帰りも滑らかになる。

HT17-D06 ホバーで色が変わるボタンを作れ(背景 #0066cc#004499、0.2秒、cursor: pointer、padding 12px 24px、角丸4px、文字白、枠線なし)。 コーディング★★☆広告解放
期待される結果

transitionとhoverが正しい

ヒント

transition は通常の状態に書く。

模範解答
<style>
  .btn {
    padding: 12px 24px;
    background-color: #0066cc;
    color: #ffffff;
    border: none;
    border-radius: 4px;
    cursor: pointer;
    transition: background-color 0.2s;
  }

  .btn:hover {
    background-color: #004499;
  }
</style>

<button class="btn">送信する</button>
解説

cursor: pointer も忘れない。マウスカーソルが指の形に変わることで、「押せる」と直感的に伝わる。

HT17-D07 要素を上に移動させるコードを完成させよ。 穴埋め★★☆広告解放
コード
<style>
  .box {
    ____: translateY(-4px);
  }
</style>

<div class="box">上に移動</div>
期待される結果

transformが適用される

ヒント

「変形」を意味する9文字のプロパティ。

模範解答
transform
解説

transform はレイアウトに影響しない。移動しても元の場所を占め続けるので、周りの要素がずれない。

HT17-D08 transform: translateY(-4px)margin-top: -4px の違いはどれか。
A. 同じ B. transform は周りの要素に影響しない C. margin のほうが滑らか D. transform は使えない
選択★★☆広告解放
期待される結果

解答 == B

ヒント

レイアウトの再計算が起きるかどうか。

模範解答
B
解説

margin だと下の要素も一緒に動く。transform なら見た目だけが動くので、アニメーションに適している。

HT17-D09 ホバーで浮き上がるカードを作れ(通常:影 0 2px 8px rgba(0,0,0,0.1)/ホバー:translateY(-4px) と濃い影 0 8px 20px rgba(0,0,0,0.2)、0.2秒)。 コーディング★★☆広告解放
期待される結果

transformとbox-shadowが変化

ヒント

transition に transform と box-shadow の両方を指定する。

模範解答
<style>
  .card {
    width: 240px;
    padding: 20px;
    background-color: #ffffff;
    border-radius: 8px;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
    transition: transform 0.2s, box-shadow 0.2s;
  }

  .card:hover {
    transform: translateY(-4px);
    box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
  }
</style>

<div class="card">ホバーしてみてください</div>
解説

影を濃くしながら少し持ち上げると、実際に浮き上がったように見える。カード型UIで最も使われる演出。

HT17-D10 文字にを付けよ(text-shadow: 1px 1px 2px rgba(0,0,0,0.3)、h1)。 コーディング★★☆広告解放
期待される結果

text-shadowが正しい

ヒント

box-shadow ではなく text-shadow を使う。

模範解答
<style>
  h1 {
    text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
  }
</style>

<h1>影付きの見出し</h1>
解説

写真の上に載せる文字に有効。背景が明るくても暗くても、影があることで文字が読みやすくなる。

4実践シナリオ(5問)

HT17-S01 【リンクの色変化】リンクにホバーで色が変わる効果を付けよ(#0066cc#cc0000、0.2秒、下線なし)。 コーディング★★☆広告解放
期待される結果

transitionが0.2s

ヒント

a に transition、a:hover に色を指定する。

模範解答
<style>
  a {
    color: #0066cc;
    text-decoration: none;
    transition: color 0.2s;
  }

  a:hover {
    color: #cc0000;
  }
</style>

<a href="#">詳しく見る</a>
解説

下線を消したなら、ホバー効果は必須。何の反応も無いと、リンクだと気づかれないまま素通りされる。

HT17-S02 【拡大するボタン】ホバーで1.05倍に拡大するボタンを作れ(scale(1.05)、0.2秒、背景 #0066cc・文字白・角丸4px・padding 12px 24px)。 コーディング★★☆広告解放
期待される結果

transform scaleが適用

ヒント

transform: scale(1.05); を :hover に指定する。

模範解答
<style>
  .btn {
    padding: 12px 24px;
    background-color: #0066cc;
    color: #ffffff;
    border: none;
    border-radius: 4px;
    cursor: pointer;
    transition: transform 0.2s;
  }

  .btn:hover {
    transform: scale(1.05);
  }
</style>

<button class="btn">クリック</button>
解説

1.05倍程度が上品。1.2倍などにすると動きが大げさになり、安っぽい印象を与えてしまう。

HT17-S03 【階層のある影】3種類の影を持つカードを作れ(.shallow0 1px 3px rgba(0,0,0,0.1).medium0 4px 12px rgba(0,0,0,0.15).deep0 12px 32px rgba(0,0,0,0.2))。 コーディング★★☆広告解放
期待される結果

3種類のbox-shadowが正しい

ヒント

ぼかしと透明度を大きくするほど、浮いて見える。

模範解答
<style>
  .card {
    width: 200px;
    padding: 20px;
    margin-bottom: 24px;
    background-color: #ffffff;
    border-radius: 8px;
  }

  .shallow { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); }
  .medium  { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); }
  .deep    { box-shadow: 0 12px 32px rgba(0, 0, 0, 0.2); }
</style>

<div class="card shallow">浅い影</div>
<div class="card medium">中くらいの影</div>
<div class="card deep">深い影</div>
解説

影の強さで階層を表現できる。通常のカードは浅く、モーダルやポップアップは深く——影の深さが「手前にある度合い」を伝える。

HT17-S04 【回転するアイコン】ホバーで45度回転する正方形を作れ(rotate(45deg)、0.3秒、60×60px、背景 #0066cc)。 コーディング★★★広告解放
期待される結果

transform rotateが適用

ヒント

transform: rotate(45deg); を使う。

模範解答
<style>
  .icon {
    width: 60px;
    height: 60px;
    background-color: #0066cc;
    transition: transform 0.3s;
    cursor: pointer;
  }

  .icon:hover {
    transform: rotate(45deg);
  }
</style>

<div class="icon"></div>
解説

回転は「開く・閉じる」の表現に使える。+マークを45度回転させると×マークになるので、メニューの開閉ボタンでよく使われる。

HT17-S05 【複数の変化をまとめる】ホバーで背景色・文字色・影が同時に変わるボタンを作れ(transition: all 0.3s ease-in-out を使うこと)。 コーディング★★★広告解放
期待される結果

transition allとease-in-out

ヒント

all を指定すると、変化するすべてのプロパティに適用される。

模範解答
<style>
  .btn {
    padding: 12px 24px;
    background-color: #ffffff;
    color: #0066cc;
    border: 2px solid #0066cc;
    border-radius: 4px;
    cursor: pointer;
    transition: all 0.3s ease-in-out;
  }

  .btn:hover {
    background-color: #0066cc;
    color: #ffffff;
    box-shadow: 0 4px 12px rgba(0, 102, 204, 0.3);
  }
</style>

<button class="btn">お問い合わせ</button>
解説

all は便利だが、性能面では個別指定が望ましい。変化しないプロパティまで監視するため、要素が多いページでは動きが重くなることがある。

5仕上げ課題

HT17-FINAL 【仕上げられた商品カード】装飾と動きを組み合わせ、完成度の高いカードを作れ。

CSSの指定
*:box-sizing、body:背景 #f5f5f5、padding 40px
.card
 ・幅 280px、padding 20px、背景白、角丸 12px
 ・影 0 2px 8px rgba(0,0,0,0.1)
 ・transition: transform 0.25s, box-shadow 0.25s
.card:hovertranslateY(-6px)、影 0 12px 28px rgba(0,0,0,0.18)
.avatar:56×56px、円形(50%)、背景 #0066cc
.badgedisplay: inline-block、padding 4px 10px、角丸 12px、背景 #fff0e6、文字色 #ff6600
.btn
 ・幅100%、padding 12px、背景 #0066cc、文字白、枠線なし、角丸 6px
 ・cursor: pointertransition: background-color 0.2s
.btn:hover:背景 #004499

HTML:div.card の中に div.avatar、h3、span.badge、p、button.btn
総合★★★広告解放
期待される結果

すべての装飾とtransitionが正しい

ヒント

transition は通常の状態(:hover ではないほう)に書く。border-radius: 50% で円形、12px で角丸。カードとボタンで別々の transition を持たせる。

模範解答
<style>
  * {
    box-sizing: border-box;
  }

  body {
    background-color: #f5f5f5;
    padding: 40px;
    margin: 0;
  }

  .card {
    width: 280px;
    padding: 20px;
    background-color: #ffffff;
    border-radius: 12px;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
    transition: transform 0.25s, box-shadow 0.25s;
  }

  .card:hover {
    transform: translateY(-6px);
    box-shadow: 0 12px 28px rgba(0, 0, 0, 0.18);
  }

  .avatar {
    width: 56px;
    height: 56px;
    background-color: #0066cc;
    border-radius: 50%;
    margin-bottom: 16px;
  }

  .badge {
    display: inline-block;
    padding: 4px 10px;
    background-color: #fff0e6;
    color: #ff6600;
    border-radius: 12px;
    font-size: 0.875rem;
  }

  .btn {
    width: 100%;
    padding: 12px;
    background-color: #0066cc;
    color: #ffffff;
    border: none;
    border-radius: 6px;
    cursor: pointer;
    transition: background-color 0.2s;
    margin-top: 16px;
  }

  .btn:hover {
    background-color: #004499;
  }
</style>

<div class="card">
  <div class="avatar"></div>

  <h3>ノートPC</h3>
  <span class="badge">在庫わずか</span>

  <p>軽量で持ち運びに便利なモデルです。</p>

  <button class="btn">カートに入れる</button>
</div>
解説

同じ内容のカードでも、装飾の有無で印象がまったく変わる。角丸・影・ホバー効果——それぞれは小さな指定だが、積み重なると「作り込まれたUI」に見える。

最も重要なのは transition を書く位置だ。.card(通常の状態)に書いているので、マウスを乗せたときも離したときも0.25秒かけて滑らかに変化する。もし .card:hover のほうに書いていたら、離した瞬間にパッと元に戻る——この不自然さは、意外と目につく。

transform: translateY(-6px)margin-top: -6px の違いも実務的だ。transform はレイアウトを再計算しないので、カードが動いても周囲の要素は微動だにしない。margin で同じことをすると、下のカードまで一緒にずれてしまう。

影の使い分けにも意図がある。通常は 0 2px 8px と控えめ、ホバー時は 0 12px 28px と大きく——影が濃く広がるほど「浮いている」と知覚されるという、人間の視覚の性質を利用している。

いよいよ次章が最終回だ。HT01からここまでの17章すべてを統合し、1枚の完成したWebサイトを作り上げる。