「hoverが効かない?」ではなかった話|学習初期で起きやすいCSSのズレ

はじめに

学習初期の方からの質問対応は、
「何が分からないのか」を一緒に整理する時間になることが多いです。

今回は、HTML / CSS 学習のかなり初期段階でよく出てくる、
aタグ・padding・リンク範囲に関する質問がありました。

どんな質問だったのか、どこでつまずきやすいのか、
そしてどのように回答したかを、備忘録としてまとめておきます。

今回あった質問の内容

質問は、Progate 道場レッスン(HTML & CSS 中級編)の
ヘッダーを作る課題に関するものでした。

内容を要約すると、

  • ログインボタンの「文字」にカーソルを乗せるとポインターが変わる
  • しかし、背景部分にカーソルを乗せてもポインターが変わらない
  • 見本では、背景部分でもポインターが変わる
  • aタグに display:block を指定しているが、期待通りにならない

というものでした。

学習者がどこでつまずいていたか

この質問でつまずいていたポイントは、
「高さ」と「幅」の認識のズレでした。

学習者は、
「aタグを block にすれば高さが出る」
と考えていましたが、実際には

  • line-height: 65px が指定されており
  • 上下方向(高さ)はすでにリンクとして成立している

状態でした。

問題だったのは上下ではなく、
左右方向(横幅)でした。

学習者がつまずいていたポイント

この質問でつまずいていたポイントは、
「高さ」と「幅」の認識のズレでした。

学習者は、
「aタグを block にすれば高さが出る」
と考えていましたが、実際には

  • line-height: 65px が指定されており
  • 上下方向(高さ)はすでにリンクとして成立している

状態でした。

問題だったのは上下ではなく、
左右方向(横幅)でした。

なぜ起きやすい勘違いなのか

学習初期では、

  • 見た目(背景の広さ)
  • 実際にクリックできる範囲

この2つが「同じもの」だと思いがちです。

今回のコードでは、

  • 背景色や padding は div(.login)に付いている
  • 実際のリンクは a タグだけ

という構造になっていました。

そのため、
「見た目はボタン全体なのに、リンクとして反応するのは文字だけ」
というズレが起きていました。

これはとてもよくある初期つまずきポイントです。

実際にどう説明・回答したか

回答では、いきなり「ここをこう直しましょう」とは伝えず、

  • 観察自体は正しいこと
  • 考え方の方向性も間違っていないこと
  • ただし注目するポイントが少し違っていること

を順番に伝えるようにしました。

特に意識したのは、

「ボタン全体をリンクとして反応させたいとき、
その大きさをどの要素が持っているか?」

という視点です。

padding をどの要素に持たせるかによって、
リンクとして反応する範囲が変わることを
言葉で整理して伝えました。

教える側として意識したこと

今回の対応で意識したのは、次の点です。

  • 質問者の言葉を勝手に言い換えない
  • 「hoverが効いていない」など余計な表現を足さない
  • 学習初期なので、開発者ツール前提の説明はしない
  • 考え方の軸だけを少しずらす

学習初期では、
「考え方は合っているけど、注目点が違う」
というケースがとても多いです。

そこを否定せず、
視点だけをそっと修正することを意識しました。

まとめ

今回の質問は、

  • aタグ
  • padding
  • display:block
  • リンクとして反応する範囲

といった、HTML / CSS の基礎が一気に絡む、
とても良い質問でした。

学習初期では、
「高さ」と「幅」
「見た目」と「挙動」
が混ざりやすいので、同じような質問は今後も出てきそうです。