Как применить стиль к пустому полю ввода? Если пользователь вводит что-то в поле ввода, стиль больше не применяется. Возможно ли это в CSS? Я пробовал это:
input[value=""]
css
input
css-selectors
Sjoerd
источник
источник
В современных браузерах вы можете использовать
: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/
источник
В CSS нет селектора, который бы это делал. Селекторы атрибутов соответствуют значениям атрибутов, а не вычисленным значениям.
Вам придется использовать JavaScript.
источник
:empty
селектор работает только с пустыми элементами, то есть только с элементами, имеющими открывающий и закрывающий теги, пустые между ними, и элементы с одним тегом, которые считаются всегда пустыми, например , поэтому его нельзя использовать для входных элементов, кромеtextarea
Обновление значения поля не приводит к обновлению его атрибута значения в DOM, поэтому ваш селектор всегда соответствует полю, даже если оно на самом деле не пусто.
Вместо этого используйте
invalid
псевдокласс для достижения желаемого, например:input:required { border: 1px solid green; } input:required:invalid { border: 1px solid red; }
<input required type="text" value=""> <input required type="text" value="Value">
источник
input[value=""], input:not([value])
работает с:
<input type="text" /> <input type="text" value="" />
Но стиль не изменится, как только кто-то начнет печатать (для этого нужен JS).
источник
input[value=""], input:not([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="john_doe@example.com" required /> <input type="url" name="website" placeholder="http://johndoe.com"/> <input type="text" name="name" placeholder="John Doe" required/>
Для справки, JSFiddle здесь: http://jsfiddle.net/0sf6m46j/
источник
$('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; }
источник
Это сработало для меня:
Для HTML добавьте
required
атрибут к элементу ввода<input class="my-input-element" type="text" placeholder="" required />
Для CSS используйте
:invalid
селектор, чтобы указать пустой вводinput.my-input-element:invalid { }
Примечания:
required
с w3Schools.com : «Когда присутствует, он указывает , что поле ввода необходимо заполнить перед отправкой формы»источник
Я понимаю, что это очень старый поток, но с тех пор все немного изменилось, и это помогло мне найти правильную комбинацию вещей, которые мне нужны для решения моей проблемы. Так что я подумал, что поделюсь тем, что сделал.
Проблема заключалась в том, что я должен был применить тот же CSS для необязательного ввода, если он был заполнен, как и для заполненного required. CSS использовал класс psuedo: valid, который применял CSS к необязательному вводу, даже если он не заполнен.
Вот как я это исправил;
HTML
<input type="text" required="required"> <input type="text" placeholder="">
CSS
input:required:valid { .... } input:optional::not(:placeholder-shown){ .... }
источник
Этот вопрос мог быть задан некоторое время назад, но поскольку я недавно затронул эту тему в поисках проверки формы на стороне клиента, и поскольку
:placeholder-shown
поддержка улучшается, я подумал, что следующее может помочь другим.Используя идею Беренда об использовании этого псевдокласса CSS4, я смог создать проверку формы, запускаемую только после того, как пользователь завершит ее заполнение.
Вот пример и объяснение по CodePen: https://codepen.io/johanmouchet/pen/PKNxKQ
источник
У меня сработало добавить имя класса к входу, а затем применить к нему правила CSS:
<input type="text" name="product" class="product" /> <style> input[value=""].product { display: none; } </style>
источник
Если вы счастливы, что не поддерживаете IE или pre-Chromium Edge (что может быть хорошо, если вы используете это для прогрессивного улучшения), вы можете использовать,
:placeholder-shown
как сказал Беренд. Обратите внимание, что для Chrome и Safari вам действительно нужен непустой заполнитель, чтобы это работало, хотя пробел работает.*, ::after, ::before { box-sizing: border-box; } label.floating-label { display: block; position: relative; height: 2.2em; margin-bottom: 1em; } label.floating-label input { font-size: 1em; height: 2.2em; padding-top: 0.7em; line-height: 1.5; color: #495057; background-color: #fff; background-clip: padding-box; border: 1px solid #ced4da; border-radius: 0.25rem; transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } label.floating-label input:focus { color: #495057; background-color: #fff; border-color: #80bdff; outline: 0; box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } label.floating-label input+span { position: absolute; top: 0em; left: 0; display: block; width: 100%; font-size: 0.66em; line-height: 1.5; color: #495057; border: 1px solid transparent; border-radius: 0.25rem; transition: font-size 0.1s ease-in-out, top 0.1s ease-in-out; } label.floating-label input:placeholder-shown { padding-top: 0; font-size: 1em; } label.floating-label input:placeholder-shown+span { top: 0.3em; font-size: 1em; }
<fieldset> <legend> Floating labels example (no-JS) </legend> <label class="floating-label"> <input type="text" placeholder=" "> <span>Username</span> </label> <label class="floating-label"> <input type="Password" placeholder=" "> <span>Password</span> </label> </fieldset> <p> Inspired by Bootstrap's <a href="https://getbootstrap.com/docs/4.0/examples/floating-labels/">floating labels</a>. </p>
источник
Меня интересуют ответы, у нас есть атрибут clear для получения пустых полей ввода, взгляните на этот код
/*empty input*/ input:empty{ border-color: red; } /*input with value*/ input:not(:empty){ border-color: black; }
ОБНОВИТЬ
input, select, textarea { border-color: @green; &:empty { border-color: @red; } }
Более того, чтобы отлично посмотреть на валидацию
input, select, textarea { &[aria-invalid="true"] { border-color: amber !important; } &[aria-invalid="false"], &.valid { border-color: green !important; } }
источник
:empty
применяется только к элементам, у которых нет дочерних элементов. У входов вообще не может быть дочерних узлов, поэтому ваш ввод всегда будет с красной рамкой. Также смотрите этот комментарийvalue
не меняет количество дочерних узлов.<parent><child></child></parent>
). У вас просто есть,<input></input>
и по мере того, как вы вводите, что меняется не<value>
узел внутри,<input>
а атрибут значения :<input value='stuff you type'></input>