pattern属性
HTML5ではinputにpattern属性というのがあって、送信前に入力値を正規表現でチェックして制限できる。Operaなどは既にこの仕様に対応している。
<input type="text" name="postcode" value="" pattern="\d{3}-\d{4}" />
これは聞いたことがあったので、SoSiReMiでも使っているのだけれど、入力値の状態をCSSで感知できるというのを昨日知った。
以下で実際に試してみた。Opera, Safari, Google Chromeで入力値に応じて表示が変わる。Firefoxは3.6.11では対応していなかったので4に期待。
JavaScript無しでも色んなことができるようになって便利(その分覚えることが多いけど)。
CSSで簡易クイズ
quotes: Emily/Phase4.5
ソース
<style>
#quiz-test:focus:invalid + ul:after {
content: '間違えないでねー?';
}
#quiz-test:focus:valid + ul:after {
content: '正解!';
}
.quiz-surfaces li {
display: none;
}
#quiz-test:focus:invalid + .quiz-surfaces .quiz-invalid {
display: block;
}
#quiz-test:focus:valid + .quiz-surfaces .quiz-valid {
display: block;
}
#quiz-test:not(:focus) + .quiz-surfaces .quiz-not-focus {
display: block;
}
</style>
<div>
<label for="quiz-test">この娘の名前は?</label>
<input type="text" name="quiz-test" id="quiz-test" value="" maxlength="20" size="20" required="required" pattern="(E|e)mily|(エミリ|えみり)ー?" placeholder="名前を入力してね!" />
<ul class="quiz-surfaces">
<li class="quiz-not-focus"><img src="surface0000.png" alt="surface0" width="253" height="385" /></li>
<li class="quiz-invalid"><img src="surface0004.png" alt="surface4" width="253" height="385" /></li>
<li class="quiz-valid"><img src="surface0005.png" alt="surface5" width="253" height="385" /></li>
</ul>
</div>