HTML & CSS

最終更新日:
公開日:

基礎

CSS

フォーム要素の擬似クラス

フォームの各項目で使用できる擬似クラスについて解説します。

この記事のポイント

  • フォームで使用できる擬似クラスの種類が分かる
  • コードと表示例から具体的な使い方をイメージできる

目次

フォームの状態にあわせてCSSを適用する

CSSにはフォーム関連の要素にスタイルを適用するための擬似クラスが用意されています。
この擬似クラスはフォームを入力する項目の各状態に対応します。

  • :focus – フォームが入力状態
  • :checked – ラジオボタン、チェックボックス、セレクトで選択状態にある状態
  • :disabled – 入力が無効なフォーム項目
  • :enabled – 入力が有効なフォーム項目
  • :default – checked属性やselected属性で最初から選択されている状態
  • :required – 入力必須項目
  • :optional – 任意の入力項目(required属性がない入力項目)
  • :read-only – readonly属性がある入力できない項目
  • :read-write – readonly属性がない入力項目
  • :in-range – 入力に最小値や最大値が設定されていて、値が制限範囲内の状態
  • :out-of-range – 入力に最小値や最大値が設定されていて、値が制限範囲外の状態
  • :invalid – 入力された値が形式的に正しくない状態
  • :valid – 入力された値が形式的に正しい状態

たくさんありますが、ブラウザの対応状況にもバラつきがあるため注意が必要です。
それぞれの擬似クラスについて、対応しているブラウザと使用例を解説していきます。

:focus

:focus」は入力状態の時に適用される擬似クラスです。
入力している場所を明確に示すことができます。

対応ブラウザ

ブラウザ対応状況
Edge
Internet Explorer○ (IE8以降)
Chrome
Safari
Firefox

コード例

<style>
input:focus,
select:focus {
	background-color: #dcfbff;
}
</style>
<label>お名前</label><input type="text" name="your_name" value="" placeholder="山田 太郎" required>
<label>フリガナ</label><input type="text" name="furigana" value="" placeholder="ヤマダ タロウ" required>
<label>年齢</label><input type="number" name="age" value="" min="16" max="25">
<label>性別</label>
<label for="gender_male" class="for_check">男性<input id="gender_male" type="radio" name="gender" value="男性" checked></label>
<label for="gender_female" class="for_check">女性<input id="gender_female" type="radio" name="gender" value="女性"></label>
<label>職業</label>
<select name="job">
	<option value="">選択してください</option>
	<option value="会社員">会社員</option>
	<option value="自営業" selected>自営業</option>
	<option value="学生">学生</option>
	<option value="その他">その他</option>
</select>

このスタイルが適用されると、次のように入力状態の項目のみ背景色が変わります。

擬似クラス「:focus」の適用例
擬似クラス「:focus」の適用例

:checked

:checked」はラジオボタン、チェックボックス、セレクト(プルダウン)の項目を選択した時に適用されます。

対応ブラウザ

ブラウザ対応状況
Edge
Internet Explorer○ (IE9以降)
Chrome
Safari
Firefox

コード例

<style>
input[type=radio]:checked {
	-moz-appearance: none;
	-webkit-appearance: none;
	width: 14px;
	height: 14px;
	border-radius: 7px;
	border: none;
	background:  #ff1c92;
	vertical-align: middle;
}
</style>
<label>性別</label>
<label for="gender_male" class="for_check">男性<input id="gender_male" type="radio" name="gender" value="男性" checked></label>
<label for="gender_female" class="for_check">女性<input id="gender_female" type="radio" name="gender" value="女性"></label>

上記コード例は、「性別」で選択された項目に対してスタイルを適用しています。

擬似クラス「:checked」の適用例
擬似クラス「:checked」の適用例

:disabled と :enabled

:disabled」は、入力を無効状態にするdisabled属性が設定された入力項目に適用されます。
対をなす「:enabled」は入力ができる項目に適用されます。

対応ブラウザ

ブラウザ対応状況
Edge
Internet Explorer○ (IE9以降)
Chrome
Safari
Firefox

コード例

<style>
input:disabled {
	background: #f7f7f7;
}
input:enabled,
select:enabled {
	background-color: #dcfbff;
}
</style>
<label>お名前</label><input type="text" name="your_name" value="" placeholder="山田 太郎" required>
<label>フリガナ</label><input type="text" name="furigana" value="" placeholder="ヤマダ タロウ" disabled>
<label>年齢</label><input type="number" name="age" value="" min="16" max="25">
<label>性別</label>
<label for="gender_male" class="for_check">男性<input id="gender_male" type="radio" name="gender" value="男性" checked></label>
<label for="gender_female" class="for_check">女性<input id="gender_female" type="radio" name="gender" value="女性"></label>
<label>職業</label>
<select name="job">
	<option value="">選択してください</option>
	<option value="会社員">会社員</option>
	<option value="自営業" selected>自営業</option>
	<option value="学生">学生</option>
	<option value="その他">その他</option>
</select>

このスタイルが適用されると、入力ができる項目は背景が水色になり、入力できない項目との区別をハッキリさせることができます。

「:disabled」と「:enabled」適用例
「:disabled」と「:enabled」適用例

:required と :optional

:required」はrequired属性が指定された入力必須の項目に対して適用されます。
もう1つの:optionalrequired属性が指定されていない任意の入力項目(通常の入力項目)に適用されます。

対応ブラウザ

ブラウザ対応状況
Edge
Internet Explorer○ (IE10以降)
Chrome
Safari
Firefox

コード例

<style>
input:required,
select:required {
	border-color: #c00;
}
input:optional,
select:optional {
	border-color: #00b8ce;
}
</style>
<label>お名前</label><input type="text" name="your_name" value="" placeholder="山田 太郎" required>
<label>フリガナ</label><input type="text" name="furigana" value="" placeholder="ヤマダ タロウ">
<label>年齢</label><input type="number" name="age" value="" min="16" max="25">
<label>性別</label>
<label for="gender_male" class="for_check">男性<input id="gender_male" type="radio" name="gender" value="男性" checked></label>
<label for="gender_female" class="for_check">女性<input id="gender_female" type="radio" name="gender" value="女性"></label>
<label>職業</label>
<select name="job">
	<option value="">選択してください</option>
	<option value="会社員">会社員</option>
	<option value="自営業" selected>自営業</option>
	<option value="学生">学生</option>
	<option value="その他">その他</option>
</select>

上記のコード例の場合、「お名前」のみrequired属性が指定されているため、この項目のみ擬似クラス「:required」のスタイルが適用されます。
それ以外は任意の入力項目として「:optional」のスタイルが適用されます。

「:required」と「:optional」適用例
「:required」と「:optional」適用例

:valid と :invalid

:valid」はメールアドレスやURLなどの入力項目に正しい形式で入力された場合に適用されます。
逆に不正な形式で入力された場合には「:invalid」が適用されます。

対応ブラウザ

ブラウザ対応状況
Edge
Internet Explorer○ (IE10以降)
Chrome
Safari
Firefox

コード例

<style>
input[type=email]:invalid {
	border-color: #c00;
}
input[type=email]:valid {
	border-color: #328c13;
}
</style>
<label>メールアドレス</label><input type="email" name="email" value="">

上記のコード例はメールアドレスの入力項目に対し、入力された値がメールアドレスとして形式が正しい場合は「:valid」のスタイルを適用し、正しくない場合は「invalid」のスタイルを適用します。

このように入力値によってスタイルを切り替えることで、入力した値が形式的に正しいかを分かりやすく伝えることができます。

入力値の形式が正常な場合(:valid)の表示例
入力値の形式が正常な場合(:valid)の表示例
入力値が正しくない場合(:invalid)の表示例
入力値が正しくない場合(:invalid)の表示例

:in-range と :out-of-range

数値入力で最小値や最大値が決められている場合、入力値がその範囲内に収まっているかで適用される擬似クラスです。
範囲内に収まっていたら「:in-range」、範囲外の値が入力されていたら「:out-of-range」が適用されます。

上記の「:valid」はメールアドレスやURLなどの入力項目に正しい形式で入力された場合に適用されます。
逆に不正な形式で入力された場合には「:invalid」が適用されます。

対応ブラウザ

ブラウザ対応状況
Edge
Internet Explorer×
Chrome
Safari
Firefox

コード例

<style>
input:in-range {
	border-color: #328c13;
}
input:out-of-range {
	border-color: #c00;
}
</style>
<div><label>年齢</label><input type="number" name="age" value="" min="16" max="25"></div>

上記のスタイルは入力値が制限範囲内のときは「#328c13(緑)」にし、範囲外のときは「#c00(赤)」にします。

すぐ下のinput要素min属性(最小値)とmax属性(最大値)を使って「16〜25」の値を受け付けるように制限を指定しています。
ここで年齢が15才以下、または26才以上が入力された場合は「:out-of-range」が適用され、16才以上〜25才以下であれば「:in-range」が適用されます。

入力値が制限範囲内のときの表示例
入力値が制限範囲内のとき(:in-range)の表示例
入力値が制限範囲外のとき(:out-of-range)の表示例
入力値が制限範囲外のとき(:out-of-range)の表示例

:read-only と :read-write

フォームに入力値を編集できないreadonly属性をもつ項目がある場合は、擬似クラス「:read-only」を使ってスタイルを適用することができます。
通常の入力ができる項目にも「:read-write」という擬似クラスが用意されています。

対応ブラウザ

ブラウザ対応状況
Edge
Internet Explorer×
Chrome
Safari
Firefox×

コード例

<style>
input:read-only {
	border-color: #ddd;
	background-color: #f7f7f7;
}
input:read-write {
	border: 2px solid #666;
	background-color: #fff;
}
</style>
<label>お名前</label><input type="text" name="your_name" value="" placeholder="山田 太郎" required>
<label>フリガナ</label><input type="text" name="furigana" value="" placeholder="ヤマダ タロウ" required>
<label>参加セミナー</label><input type="email" name="seminar" value="第4回 川越セミナー" readonly>
<label>年齢</label><input type="number" name="age" value="" min="16" max="25">

「お名前」「フリガナ」「年齢」は通常の入力ができるため「:read-write」のスタイルが適用されます。
「参加セミナー」のみはreadonly属性が指定されていて入力や編集ができないため、「:read-only」のスタイルが適用されます。

入力できる項目/できない項目の表示例
入力できる項目/できない項目の表示例

:default

ラジオボタン、チェックボックス、プルダウンメニューの項目に、初期値(既定値)が設定されているときに適用する擬似クラスです。
2018年7月現在、EdgeとIEシリーズには対応していません。

対応ブラウザ

ブラウザ対応状況
Edge×
Internet Explorer×
Chrome
Safari
Firefox

コード例

<style>
select option:default {
	-moz-appearance: none;
	-webkit-appearance: none;
	width: 14px;
	height: 14px;
	border-radius: 7px;
	border: none;
	background:  #ff1c92;
	vertical-align: middle;
}
</style>
<label>職業</label>
<select name="job">
	<option value="">選択してください</option>
	<option value="会社員">会社員</option>
	<option value="自営業" selected>自営業</option>
	<option value="学生">学生</option>
	<option value="その他">その他</option>
</select>

「職業」の選択欄に「自営業」をselected属性で規定値として設定し、「:default」を適用している例です。

既定値が設定されている項目にスタイルを適用している例
既定値が設定されている項目にスタイルを適用している例

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

コメントありがとうございます!
運営の参考にさせていただきます。