:valid
работает, только если input
имеет атрибут required
.Другой способ добиться этого - использовать :placeholder-shown
Псевдокласс.
Этот псевдокласс выбирает все input
и textarea
, которые в настоящее время отображают заполнитель текста .Для работы элемент ввода должен иметь атрибут placeholder
.
Согласно MDN , MS Edge не будет поддерживать это.
В этом случае вы хотите, чтобы значение label
увеличивалось только тогда, когда вход сфокусирован или содержит какое-либо значение.Поэтому вам нужно использовать :not(:placeholder-shown)
вместо :placeholder-shown
.В противном случае это приведет к обратному эффекту.
div{
position: absolute;
width:100%;
top:50px;
}
.form-control-placeholder {
font-family: "Zuric Light";
color: black;
position: absolute;
top: 0;
padding: 7px 0 0 13px;
transition: all 200ms;
opacity: .5;
}
.form-control:focus+.form-control-placeholder,
.form-control:not(:placeholder-shown)+.form-control-placeholder {
padding: 0;
transform: translate3d(0, -100%, 0);
opacity: 1;
}
<div class="form-group">
<input type="text" id="address2" class="form-control" ngModel name="address2" placeholder="...">
<label class="form-control-placeholder" for="address2">Address line 2</label>
</div>