下記のサンプルでは、先頭の2つの要素に required 属性を指定し、そのフィールドの入力が必須であることを Web ブラウザに知らせています。
required 属性が指定された入力要素の振る舞いがどうなるかは、Web ブラウザの実装によって異なりますが、例えば、マウスカーソルを重ねたときにポップアップメッセージを表示する、必須フィールドの入力を行わずに Submit ボタンを押したときにエラーメッセージを表示する、といった実装が一般的のようです。
<form>
<label>お名前: <input type="text" required></label>(必須)<br>
<label>メール: <input type="email" required></label>(必須)<br>
<label>電話番号: <input type="tel"></label><br>
<input type="submit" value="送信する">
<input type="reset" value="リセット">
</form>
下記のデモで、入力フィールドにマウスカーソルを置いたり、何も入力せずに送信ボタンを押したりしてみてください。
required 属性が付加された要素は、CSS の疑似クラス :required で選択することができます。
逆に、required 属性が付加されていない要素は、疑似クラス :optional で選択することができます。
下記のサンプルでは、required 属性のついた input 要素の背景色を変更しています。
input:required {
background: pink;
}
::before や ::after といった疑似要素と組み合わせて使用することで、自動的に required な入力フィールドに「必須」というテキストを付加をしたくなるところですが、置換要素 (replaced elements) である input 要素は、::before や ::after などの疑似要素と組み合わせて使用することができません。
素直に label 要素内のテキストに「必須」という文字列を含めてしまうのがよいでしょう。