2010-09-01 4 views

ответ

43

В CSS нет селектора, который делает это. Селекторы атрибутов соответствуют значениям атрибутов, а не вычисленным значениям.

Вам необходимо использовать JavaScript.

+3

Для тех, кто найти этот ответ позже: Квентин права в отношении вычисленных значений, однако есть: пустой селектор, который может быть использован здесь и имеет разумную поддержку (все браузеры кроме IE8 и старше в соответствии с: http://www.w3schools.com/cssref/sel_empty.asp – Cohen

+27

': empty' selector работает только на пустых элементах, что означает только элементы, которые имеют открывающий и закрывающий теги, который пуст между ними, и отдельные элементы тега, которые считаются всегда пустыми, [example] (http://jsfiddle.net/SE7Bq/), поэтому его нельзя использовать для элементов ввода, кроме 'textarea' – am05mhz

+5

Не верно. См. ответ lukmo ниже. Объединение требуемого sttribute и: действительный или: недопустимые псевдоселекторы достигают именно этого. – voidstate

11

input[value=""] не будет работать с

<input type="text" /> 

но работал для меня в хроме с

<input type="text" value="" /> 

Но стиль не изменится, как только кто-то начнет печатать. Поэтому вы должны использовать js для этого.

+1

Неверно, поскольку атрибут value не изменяется в DOM после редактирования поля. Однако, хороший трюк, если вам это неинтересно, и работает в последних версиях Safari, Chrome, FF и IE ... – Dunc

+7

Чтобы соответствовать первому, вы можете использовать 'input [value =" "], input: not ([ значение]) '. – Schism

122

Если только поле 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>

live on jsFiddle См

или нивелировать с помощью #foo-thing:invalid (кредита до @SamGoody)

+11

..или отрицать с помощью: invalid {} https://developer.mozilla.org/en-US/docs/Web/CSS/:invalid?redirectlocale=en-US&redirectslug=CSS%2F%3Ainvalid – SamGoody

+0

потрясающий, аккуратный трюк – TecHunter

+0

Я хочу то же самое, но мое поле не требуется.есть ли способ сделать это? –

3
$('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; } 
0

Я задавался ответами у нас есть четкий признак, чтобы получить пустые поля ввода, посмотрите на этот код

/*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; 
    } 
} 

Более для хорошего взгляда в валидации

+7

': empty' применяется только к элементам, у которых нет детей. Входы не могут иметь дочерние узлы, поэтому ваш вход всегда будет с красной рамкой. Также см. [Этот комментарий] (http://stackoverflow.com/questions/3617020/matching-an-empty-input-box-using-css#comment23212939_3617050) – Zhegan

+0

@Zhegan проверить мой обновленный ответ, –

+2

@NasserHadjloo вы протестировали это ? Изменение значения 'value' не изменяет количество дочерних узлов. – jcuenod

12

Обновление значения поля не обновляет свой атрибут значения в 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">

8

Если поддерживать устаревшие версии браузеров не требуется, вы можете использовать комбинацию 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/

66

В современных браузерах вы можете использовать :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/

+5

Не работает в IE (до 11), но хороший ответ, тем не менее – Amanpreet

+1

Это здорово! Очень полезно :) – unbreak

+2

Будет ли это работать, даже если нет набора заполнителей? – TricksfortheWeb

3

Это работает для меня:

HTML: - добавить необходимый атрибут для элемента ввода

<input class="my-input-element" type="text" placeholder="" required /> 

CSS: - использование: недействительный селектор

input.my-input-element:invalid { 

} 

Примечания:

  • значение входного элемента не требуется.
  • О необходимости от w3Schools.com, «При наличии, оно указывает, что поле ввода должно быть заполнено перед отправкой формы».
1

Этот вопрос, возможно, был предложен некоторое время назад, но, как я недавно приземлился на эту тему в поисках проверки формы на стороне клиента, а также :placeholder-shownsupport становятся лучше, я думал, что следующее может помочь другим.

Использование Berend идеи использования этого псевдо-класса CSS4, я смог создать проверку формы, только после того, как пользователь закончил ее заполнение.

Вот ademo и объяснение CodePen: https://codepen.io/johanmouchet/pen/PKNxKQ

Смежные вопросы