Result
:validを使って実装。:validと:invalidは過去記事(かなり昔の記事です)をご参照ください
:invalidや:valid擬似クラスを使ったフォームバリデーションエラーメッセージのスタイルサンプル
css
form {/*全体設定*/
width: 450px;
margin: 2em auto;
font-weight: 300;
font-size: 22px;
}
.float-label .control {/*各項目レイアウト*/
float: left;
position: relative;
width: 100%;
border-bottom: 1px solid #ddd;
padding-top: 23px;
padding-bottom: 10px;
}
.float-label .control.small {
width: 30%;
border-right: 1px solid #ddd;
}
.float-label .control.medium {
width: 70%;
padding-left: 10px;
}
.float-label .control:last-child {
border: 0;
}
.float-label input,
.float-label textarea {/*ブロック化*/
display: block;
width: 100%;
border: 0;
outline: 0;
resize: none;
}
.float-label input + label,
.float-label textarea + label {/*labelを設定しつつ、事前に opacity: 0;で非表示にしておく*/
position: absolute;
top: 10px;
transition: top 0.7s ease, opacity 0.7s ease;
opacity: 0;
font-size: 13px;
font-weight: 600;
color: #ccc;
}
.float-label input:valid + label,
.float-label textarea:valid + label {/*:validを使って入力されたら表示するように設定。フォーカスが外れても表示されたままとする*/
opacity: 1;
top: 3px;
}
.float-label input:focus + label,
.float-label textarea:focus + label {/*テキストカラーはフォーカス時のみハイライトする*/
color: #2c8efe;
}
html
<form class="float-label" spellcheck="false">
<div class="control">
<input type="text" name="title" placeholder="タイトル" required />
<label for="title">タイトル</label>
</div>
.
.
.
</form>
