Как применить стиль к пустому ящику ввода? Если пользователь вводит что-то в поле ввода, стиль больше не должен применяться. Возможно ли это в CSS? Я пробовал:Соответствие пустого поля ввода с помощью CSS
input[value=""]
Как применить стиль к пустому ящику ввода? Если пользователь вводит что-то в поле ввода, стиль больше не должен применяться. Возможно ли это в CSS? Я пробовал:Соответствие пустого поля ввода с помощью CSS
input[value=""]
В CSS нет селектора, который делает это. Селекторы атрибутов соответствуют значениям атрибутов, а не вычисленным значениям.
Вам необходимо использовать JavaScript.
input[value=""]
не будет работать с
<input type="text" />
но работал для меня в хроме с
<input type="text" value="" />
Но стиль не изменится, как только кто-то начнет печатать. Поэтому вы должны использовать js для этого.
Неверно, поскольку атрибут value не изменяется в DOM после редактирования поля. Однако, хороший трюк, если вам это неинтересно, и работает в последних версиях Safari, Chrome, FF и IE ... – Dunc
Чтобы соответствовать первому, вы можете использовать 'input [value =" "], input: not ([ значение]) '. – Schism
Если только поле required
вы могли бы пойти с input:valid
#foo-thing:valid + .msg { visibility: visible!important; }
<input type="text" id="foo-thing" required="required">
<span class="msg" style="visibility: hidden;">Yay not empty</span>
или нивелировать с помощью #foo-thing:invalid
(кредита до @SamGoody)
$('input#edit-keys-1').blur(function(){
tmpval = $(this).val();
if(tmpval == '') {
$(this).addClass('empty');
$(this).removeClass('not-empty');
} else {
$(this).addClass('not-empty');
$(this).removeClass('empty');
}
});
в jQuery. Я добавил класс и создал css.
.empty { background:none; }
Я задавался ответами у нас есть четкий признак, чтобы получить пустые поля ввода, посмотрите на этот код
/*empty input*/
input:empty{
border-color: red;
}
/*input with value*/
input:not(:empty){
border-color: black;
}
UPDATE
input, select, textarea {
border-color: @green;
&:empty {
border-color: @red;
}
}
Более для хорошего взгляда в валидации
': empty' применяется только к элементам, у которых нет детей. Входы не могут иметь дочерние узлы, поэтому ваш вход всегда будет с красной рамкой. Также см. [Этот комментарий] (http://stackoverflow.com/questions/3617020/matching-an-empty-input-box-using-css#comment23212939_3617050) – Zhegan
@Zhegan проверить мой обновленный ответ, –
@NasserHadjloo вы протестировали это ? Изменение значения 'value' не изменяет количество дочерних узлов. – jcuenod
Обновление значения поля не обновляет свой атрибут значения в DOM, поэтому ваш селектор всегда соответствует полю, даже если он фактически не пуст.
Вместо этого используйте invalid
pseudo-class, чтобы достичь того, чего вы хотите, например, так:
input:required {
border: 1px solid green;
}
input:required:invalid {
border: 1px solid red;
}
<input required type="text" value="">
<input required type="text" value="Value">
Если поддерживать устаревшие версии браузеров не требуется, вы можете использовать комбинацию required
, valid
и invalid
,
Хорошая вещь об использовании это valid
и invalid
Псевдоэлементы хорошо работают с атрибутами типа полей ввода.Например:
input:invalid, textarea:invalid {
box-shadow: 0 0 5px #d45252;
border-color: #b03535
}
input:valid, textarea:valid {
box-shadow: 0 0 5px #5cd053;
border-color: #28921f;
}
<input type="email" name="email" placeholder="[email protected]" required />
<input type="url" name="website" placeholder="http://johndoe.com"/>
<input type="text" name="name" placeholder="John Doe" required/>
Для справки, JSFiddle здесь: http://jsfiddle.net/0sf6m46j/
В современных браузерах вы можете использовать :placeholder-shown
целевой пустой ввод (не следует путать с ::placeholder
).
input:placeholder-shown {
border: 1px solid red; /* Red border only if the input is empty */
}
Больше информации и Поддержка браузера: https://css-tricks.com/almanac/selectors/p/placeholder-shown/
Не работает в IE (до 11), но хороший ответ, тем не менее – Amanpreet
Это здорово! Очень полезно :) – unbreak
Будет ли это работать, даже если нет набора заполнителей? – TricksfortheWeb
Это работает для меня:
HTML: - добавить необходимый атрибут для элемента ввода
<input class="my-input-element" type="text" placeholder="" required />
CSS: - использование: недействительный селектор
input.my-input-element:invalid {
}
Примечания:
Этот вопрос, возможно, был предложен некоторое время назад, но, как я недавно приземлился на эту тему в поисках проверки формы на стороне клиента, а также :placeholder-shown
support становятся лучше, я думал, что следующее может помочь другим.
Использование Berend идеи использования этого псевдо-класса CSS4, я смог создать проверку формы, только после того, как пользователь закончил ее заполнение.
Вот ademo и объяснение CodePen: https://codepen.io/johanmouchet/pen/PKNxKQ
Для тех, кто найти этот ответ позже: Квентин права в отношении вычисленных значений, однако есть: пустой селектор, который может быть использован здесь и имеет разумную поддержку (все браузеры кроме IE8 и старше в соответствии с: http://www.w3schools.com/cssref/sel_empty.asp – Cohen
': empty' selector работает только на пустых элементах, что означает только элементы, которые имеют открывающий и закрывающий теги, который пуст между ними, и отдельные элементы тега, которые считаются всегда пустыми, [example] (http://jsfiddle.net/SE7Bq/), поэтому его нельзя использовать для элементов ввода, кроме 'textarea' – am05mhz
Не верно. См. ответ lukmo ниже. Объединение требуемого sttribute и: действительный или: недопустимые псевдоселекторы достигают именно этого. – voidstate