HTML 5では、入力にとしてマークを付けてから、CSSの疑似セレクターをrequired
使用して入力を選択できます。[required]
ただし、必要な要素を入力せずにフォームを送信しようとした場合にのみ、スタイルを設定したいと思います。このためのセレクターはありますか?ポップアップする小さなメッセージボックスはどうですか?
7 に答える
:validおよび:invalidセレクターを使用できます。このようなもの
.field:valid {
border-color:#0f0;
}
.field:invalid {
border-color:#f00;
}
ただし、これはネイティブ検証をサポートするブラウザーでのみ機能し、意味のあるフィールドでのみ機能します。私の知る限り、今のところそれはChromeを意味するだけです(おそらくSafariですが、チェックしていません)。
つまり、ネイティブ検証とは、Chromeでは<input type="email">
、フィールドの値が電子メールタイプの文字列(追加のJavaScriptなし)で検証されるため、上記のスタイルが機能することを意味します。ただし、フィールドまたは2番目のパスワードフィールド(最初のフィールドと一致すると想定される)にそれらを添付する場合type="text"
、すべてが有効であるため、緑色になります。パスワードの場合、「タイプ」はありません。 「とにかくそのために。
これは基本的に、すべてのブラウザーをサポートすることを意味し、さらに重要なことに、より幅広い検証をjavascriptに頼る必要があります。その場合、.valid/.invalidクラスの割り当ては問題になりません。:)
私はJavaScriptを使用して送信時にフォームにクラスを適用し、そのクラスを使用してフィールドの.validated
スタイルを設定しました。例::invalid
.validated input:invalid {
...
}
このように、フォームが送信された後でのみ、フィールドがページの読み込み時に無効として表示されることはありません。
理想的には、送信時にフォームに疑似クラスが適用されます。
ええ、SLaksが言ったように、これを行うためのCSSセレクターはありません。CSSは入力の内容をチェックする必要があるため、これがCSSの範囲に含まれることはないと思います。
それでも、実際にフォームを送信するのではなく、ボタンをクリックしたときにjavascript検証関数を呼び出すのが最善のオプションです。次に、[必須]フィールドで適切なコンテンツを確認し、フォームを送信するか、入力されていない必須フィールドを強調表示します。
JQueryには、これを処理する優れたプラグインがいくつかあります http://docs.jquery.com/Plugins/validation
CSS Selectors 4:user-error
の作業ドラフトには、これを正確に実行する疑似クラスがあり、入力ブラーとフォーム送信の両方で起動します。
その間、私は個人的に:user-errorをカバーする素晴らしいwebshims polyfillライブラリを使用しています。または、Tobyの答えに沿った何かでそれを自分でハックすることもできます。
input:required {
/* Style your required field */
/* Be sure to style it as an individual field rather than just add your desired styles
for a required field. */
}
クロムで試してテストしました。他のブラウザではテストしていません。
このソリューションは、空白のときに属性を介して必要な入力フィールドのスタイルを設定します。キーダウン時に必須フィールドに入力すると、ブラウザは:invalid疑似クラスを削除します。Firefoxの最近のバージョンは、このスタイルに似たものを自動的に適用しますが、ChromeとIEは適用しません。
input[required]:invalid { box-shadow: 0 0 3px 1px red }
試してみてください:http://jsfiddle.net/2Ph2X/
非常に簡単です。要素にフォーカスがあるときにクラスを追加するだけで、送信中に正しくない要素にフォーカスが移り、クライアントが1つずつ入力して検証します。JavaScriptを使用しない場合の最善の解決策だと思います。
input:required:focus {
border-color: palegreen;
}
input:invalid:focus {
border-color: salmon;
}