如何将样式应用于空输入框?如果用户在输入字段中键入内容,则不应再应用该样式。这在CSS中可行吗?我试过这个:
input[value=""]
答案 0 :(得分:140)
如果只有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)
答案 1 :(得分:111)
在现代浏览器中,您可以使用: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/
答案 2 :(得分:43)
CSS中没有选择器可以执行此操作。属性选择器匹配属性值,而不是计算值。
您必须使用JavaScript。
答案 3 :(得分:16)
更新字段的值不会更新DOM中的value属性,这就是为什么您的选择器始终与字段匹配的原因,即使它实际上并不是空的。
而是使用invalid
pseudo-class来达到你想要的效果,如下所示:
input:required {
border: 1px solid green;
}
input:required:invalid {
border: 1px solid red;
}
&#13;
<input required type="text" value="">
<input required type="text" value="Value">
&#13;
答案 4 :(得分:15)
input[value=""], input:not([value])
适用于:
<input type="text" />
<input type="text" value="" />
但是一旦有人开始打字,风格就不会改变(你需要JS)。
答案 5 :(得分:9)
如果不需要支持旧版浏览器,则可以使用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;
}
&#13;
<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/>
&#13;
供参考,JSFiddle在这里:http://jsfiddle.net/0sf6m46j/
答案 6 :(得分:5)
$('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; }
答案 7 :(得分:3)
这对我有用:
html: - 将所需属性添加到输入元素
<input class="my-input-element" type="text" placeholder="" required />
css: - 使用:无效选择器
input.my-input-element:invalid {
}
注意:
答案 8 :(得分:3)
对我来说,在输入中添加一个类名,然后对其应用CSS规则,对我来说很有效:
<input type="text" name="product" class="product" />
<style>
input[value=""].product {
display: none;
}
</style>
答案 9 :(得分:2)
这个问题可能是前一段时间被问过的,但是当我最近找到这个主题寻找客户端表单验证时,随着:placeholder-shown
support 越来越好,我想到了以下几点可能会帮助别人。
使用Berend使用此CSS4伪类的想法,我能够创建仅在用户填写完成后触发的表单验证。
以下是CodePen的解释和说明: https://codepen.io/johanmouchet/pen/PKNxKQ
答案 10 :(得分:2)
如果您很高兴不支持IE或Chromium Edge之前的版本(如果将其用于渐进式增强可能会很好),则可以使用:placeholder-shown
,如Berend所说。请注意,对于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>
答案 11 :(得分:0)
我想知道答案我们有明确的属性来获取空输入框,看看这段代码
/*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;
}
}
答案 12 :(得分:0)
我意识到这是一个非常老的线程,但是此后发生了一些变化,它确实帮助我找到了解决问题所需的正确组合。所以我想我会分享我所做的。
问题是,我想在可选输入中将相同的CSS应用于可选输入,就像我对必需的填充一样。 css使用了psuedo类:valid,该类在未填充时也将css应用于可选输入。
这就是我修复它的方式;
HTML
<input type="text" required="required">
<input type="text" placeholder="">
CSS
input:required:valid {
....
}
input:optional::not(:placeholder-shown){
....
}