Я пытаюсь, чтобы вопросы формы опроса имели плавающие метки, которые все еще видны, когда пользователь вводит данные, и после добавления проверки электронной почты с сообщением об ошибке второй вопрос не выполняется. Он отображается как всегда недействительный, даже без ввода.
Я пытался изменить селектор CSS на соседний братский комбинатор, но, хотя изначально это приводит к тому, что мой ярлык находится в правильном месте, он нарушает конкретный стиль input[type="email"]:invalid ~.question-label
.
Вот HTML:
<div class="form-option">
<input type="email" id="email" class="question-answer" placeholder=" " required>
<span class="bar"></span>
<label class="question-label" id="email-label">Email<span class="asterisk"> *</span></label>
<div class="requirements">
Must be a valid email address
</div>
</div>
Вот соответствующий CSS:
.question-answer:focus ~.question-label, .question-answer:valid ~.question-label {
top: -16px;
font-size: 14px;
color: #4285f4;
}
input[type="email"]:valid + label {
opacity: 0;
}
.requirements {
padding-top: 5px;
font-style: italic;
color: red;
opacity: 0;
display: none;
}
input[type="email"]:invalid {
background-color: pink;
transition: ease .25s;
}
input[type="email"]:invalid ~.question-label {
top: -16px;
font-size: 14px;
color: red;
}
input[type="email"]:invalid:focus ~.requirements {
opacity: 100;
display: block;
}
Здесь есть полный кодовый указатель: https://codepen.io/Pixel123/pen/NzByep, если проблема требует уточнения.
Я хочу, чтобы метки находились в одной исходной позиции, чтобы затем переместиться вверх и изменить размер, как только сфокусировались на них, и стать синим, когда введено действительное электронное письмо (эта часть работает). Если введенные данные не являются действительным адресом электронной почты, div
, в котором указано Должен быть действительным адресом электронной почты , становится видимым.
В таком виде подсветка ввода, которая должна отображаться только на недействительных электронных письмах, всегда включена, а подсветка поля - при отсутствии ввода.