パーツ番号 04-02-07 ・ JavaScript使用
バリデーションシェイク
空のまま送信すると入力欄が震えてエラーを表示、入力済みなら成功メッセージを表示。Contact Form 7のエラー表示をよりわかりやすく演出できます。
プレビュー
ソースコード
HTML
<form class="d04-02-07-form" novalidate>
<div class="d04-02-07-row">
<input type="text" placeholder="お名前" aria-label="お名前">
<p class="d04-02-07-err">お名前を入力してください</p>
</div>
<button type="submit" class="d04-02-07-btn">送信する</button>
<p class="d04-02-07-ok">送信ありがとうございました!</p>
</form>CSS
.d04-02-07-form{width:min(260px,100%);display:flex;flex-direction:column;gap:12px}
.d04-02-07-row input{
width:100%;padding:12px 14px;font-size:14px;background:#fff;
border:2px solid #d5d9e0;border-radius:8px;outline:none;
transition:border-color .25s;
}
.d04-02-07-row input:focus{border-color:#4a6cf7}
.d04-02-07-form.is-error .d04-02-07-row input{
border-color:#e5484d;
animation:d04-02-07-shake .45s ease;
}
.d04-02-07-err{
display:none;margin:6px 0 0;font-size:12px;color:#e5484d;
}
.d04-02-07-form.is-error .d04-02-07-err{display:block}
.d04-02-07-btn{
padding:12px;font-size:14px;font-weight:700;color:#fff;
background:#4a6cf7;border:none;border-radius:8px;cursor:pointer;
transition:background .25s;
}
.d04-02-07-btn:hover{background:#3a58d6}
.d04-02-07-ok{
display:none;margin:0;padding:10px;text-align:center;
font-size:13px;font-weight:700;color:#1c7c4e;
background:#e2f6ec;border-radius:8px;
}
.d04-02-07-form.is-success .d04-02-07-ok{display:block}
@keyframes d04-02-07-shake{
0%,100%{transform:translateX(0)}
20%{transform:translateX(-8px)}
40%{transform:translateX(8px)}
60%{transform:translateX(-5px)}
80%{transform:translateX(5px)}
}JavaScript
(function(){
var form=document.querySelector('.d04-02-07-form');
if(!form)return;
var input=form.querySelector('input');
form.addEventListener('submit',function(e){
e.preventDefault();
form.classList.remove('is-error','is-success');
if(input.value.trim()===''){
void form.offsetWidth; /* アニメ再発火 */
form.classList.add('is-error');
}else{
form.classList.add('is-success');
}
});
input.addEventListener('input',function(){
form.classList.remove('is-error','is-success');
});
})();クラス名 .d04-02-07 は本ライブラリ内での識別用です。複数のパーツを同じページで使う場合は、重複しないよう名前を変更してください。