【入門編】 :valid と :invalid 疑似クラス – CSS実践ガイド

CSSの魔法でフォームを「賢く」しよう!`:valid` と `:invalid` でエラー表示を自動化する話

こんにちは!Webの世界へようこそ。CSSを学び始めると、「デザインって楽しい!」と感じる反面、「JavaScriptを使わないと、入力フォームのエラー表示なんてできないんじゃないの?」と不安になることはありませんか?

実は、そんなことはありません。CSSには、入力された内容が「正しいか、間違いか」を瞬時に判断して、勝手に見た目を変えてくれる頼もしい魔法があるんです。それが、今回紹介する `:valid`(ヴァリッド)と `:invalid`(インヴァリッド)という疑似クラスです。

難しい言葉に聞こえますが、大丈夫。一緒に紐解いていきましょう!

—

1. そもそも `:valid` と `:invalid` って何者?

想像してみてください。あなたは今、スーパーのレジでお会計をしています。
店員さんがバーコードを「ピッ」と読み取ったとき、

  • 「ピッ!」と軽快な音が鳴る(=OK!)
  • 「ブーッ!」と警告音が鳴る(=NG!)

この瞬時の判断、実はWebサイトの入力フォームでも同じことが起きているんです。

  • :valid:入力された内容がルール通り(メールアドレスの形式など)で、「OK!」な状態。
  • :invalid:ルールから外れていて、「これじゃ困るよ!」というエラーの状態。

この状態をブラウザが自動的に判断してくれるので、私たちはCSSで「OKのときは緑っぽく」「NGのときは赤っぽく」と指示を出すだけで、親切なフォームが完成するのです。

—

2. さっそく書いてみよう!魔法のコード

まずは、一番わかりやすい「メールアドレス入力」を例に見てみましょう。HTMLで `type=”email”` と指定するだけで、ブラウザは「ああ、これはメールアドレスの形じゃないとダメだな」と理解してくれます。


そして、CSSで魔法をかけます。

/ 1. 基本の状態(ちょっと控えめに) /
input {
border: 2px solid #ccc; / 灰色の枠線 /
padding: 10px;
}

/ 2. 「OK!」な時のスタイル(緑色で安心感を) /
input:valid {
border-color: #2ecc71; / 鮮やかな緑色 /
background-color: #eafaf1; / 薄い緑の背景 /
}

/ 3. 「NG!」な時のスタイル(赤色で注意を促す) /
input:invalid {
border-color: #e74c3c; / 警告の赤色 /
background-color: #fdedec; / 薄い赤の背景 /
}

ここでちょっとした「つまずきポイント」をフォロー!

これ、実際に動かしてみると「あれ?最初から赤色になっちゃった!」と驚くかもしれません。

実は、ページを開いた瞬間の「空っぽ」の入力欄も、ルール(メールアドレス形式)を満たしていないので `:invalid` と判断されてしまうんです。

そんなときは、こう書き換えてみてください。

/ 「入力したことがある」かつ「間違っている」ときだけ赤くする /
input:invalid:not(:placeholder-shown) {
border-color: #e74c3c;
}

`:not(:placeholder-shown)` は、「まだ何も入力されていない状態(空っぽ)は除外してね」という意味です。これで、ユーザーが入力し始めた瞬間にだけ赤くなる、とてもスマートな動きになりますよ!

—

3. なぜCSSだけでやるのが良いの?

「JavaScriptでゴリゴリ書くのと何が違うの?」と思うかもしれません。もちろん、高度なバリデーションにはJavaScriptが不可欠ですが、CSSで制御することには素晴らしいメリットがあります。

1. とにかく軽い!:余計なプログラムを動かさないので、サイトがサクサク動きます。
2. 保守が楽!:CSSのファイルを1行直すだけで、サイト全体の入力欄のデザインを統一できます。
3. ユーザーに優しい!:画面を動かした瞬間に反応するので、ユーザーは「あ、ここ間違えてるのか」とすぐ気づくことができます。

—

最後に:完璧を目指さなくて大丈夫

Web制作を始めたばかりの頃は、「エラーメッセージを吹き出しで出したい」「送信ボタンを無効化したい」と、あれもこれもやりたくなってしまうものです。

でも、まずは今日紹介したこのCSSだけで十分です。「入力欄の色が変わるだけで、ユーザーは驚くほど迷わなくなる」。これこそが、ユーザー体験(UX)の第一歩です。

うまくいかない時があっても、それはあなたが新しい技術に挑戦している証拠です。少しずつ、自分のペースで「心地よいフォーム」を作っていきましょうね。

あなたのコードが、誰かの役に立つことを心から応援しています!

コメント

タイトルとURLをコピーしました