Я не думаю, что с текущей разметкой это возможно только с помощью CSS, но:
Это возможно, если можно добавить элемент label
после ввода, например так:
<div>
<input type="password" name="password" id="password" placeholder=" " />
<label for="password">Password</label>
</div>
Уловка здесь заключается в использовании псевдокласса:
Из спецификации:
В элементах ввода иногда может отображаться текст-заполнитель в качестве подсказки пользователю о том, что вводить. См., Например, атрибут placeholder в [HTML5]. Псевдокласс : placeholder-shown соответствует элементу ввода, который показывает такой текст-заполнитель.
Идея состоит в том, чтобы текст «Пароль *» имитировал текст-заполнитель.
Заполнители всегда отображаются на input
элементах - даже если они сфокусированы - если для них не установлено значение.
Используя псевдокласс :placeholder-shown
на input
, мы можем определить, когда отображать текст метки.
Это ключевой селектор:
input:placeholder-shown + label {
display: block;
}
Это означает: когда отображается заполнитель ввода - показывать метку "заполнитель". (иначе мы это скрываем)
По этой причине нам все еще нужно установить непустой атрибут заполнителя на входе (достаточно простого пробела)
div {
position: relative;
}
label {
position: absolute;
height: 20px;
left: 5px;
top: 0;
bottom: 0;
margin: auto;
display: none;
pointer-events: none;
color: #757575;
font-size: 16px;
font-family: system-ui;
}
label:after {
content: " *";
color: red;
}
input:placeholder-shown + label {
display: block;
}
input {
width: 200px;
border: none;
border-bottom: solid 1px #8d97a0;
padding: 5px;
border-radius: 0;
background: #fff;
box-shadow: none;
height: 20px;
font-size: 16px;
margin: 5px 0;
}
<div>
<input type="password" name="name" id="name" placeholder=" " />
<label for="name">Name</label>
</div>
<div>
<input type="password" name="name" id="name" placeholder="Email" />
</div>
<div>
<input type="password" name="name" id="name" placeholder="Phone" />
</div>
<div>
<input type="password" name="password" id="password" placeholder=" " />
<label for="name">Password</label>
</div>
person
Danield
schedule
31.10.2017