使用CSS匹配空输入框

Sjo*_*erd 126 css input css-selectors

如何将样式应用于空输入框?如果用户在输入字段中键入内容,则不应再应用该样式.这在CSS中可行吗?我试过这个:

input[value=""]
Run Code Online (Sandbox Code Playgroud)

luk*_*mdo 148

如果只有required你可以去的领域input:valid

#foo-thing:valid + .msg { visibility: visible!important; }      
Run Code Online (Sandbox Code Playgroud)
 <input type="text" id="foo-thing" required="required">
 <span class="msg" style="visibility: hidden;">Yay not empty</span>
Run Code Online (Sandbox Code Playgroud)

现场直播的jsfiddle

或否定使用#foo-thing:invalid(信用@SamGoody)

  • ..或否定使用:invalid {} https://developer.mozilla.org/en-US/docs/Web/CSS/:invalid?redirectlocale=en-US&redirectslug=CSS%2F%3Ainvalid (12认同)
  • 我想要同样的东西,但是我的领域不是必需的。有什么办法吗? (3认同)

Ber*_*end 123

在现代浏览器中,您可以使用:placeholder-shown目标空输入(不要混淆::placeholder).

input:placeholder-shown {
    border: 1px solid red; /* Red border only if the input is empty */
}
Run Code Online (Sandbox Code Playgroud)

更多信息和浏览器支持:https://css-tricks.com/almanac/selectors/p/placeholder-shown/

  • 在IE中不起作用(直到11),但仍然是一个很好的答案 (6认同)
  • 太棒了!非常有帮助 :) (5认同)
  • 必须设置占位符属性.无论如何,我们可以将占位符属性设置为空格. (5认同)
  • 即使没有占位符,这还能工作吗? (3认同)
  • Microsoft浏览器根本不支持:https://caniuse.com/#feat=css-placeholder-shown (3认同)
  • @TricksfortheWeb 似乎确实需要在输入标记中存在占位符属性(带有值)。在 Chrome 中测试 - 不确定这是否适用于所有浏览器。 (2认同)
  • 甚至没有在最新版本的EDGE中工作 (2认同)
  • @Amanpreet根据https://caniuse.com/#search=placeholder,这在IE 11中也不起作用(或Edge). (2认同)

Que*_*tin 44

CSS中没有选择器可以做到这一点.属性选择器匹配属性值,而不是计算值.

你必须使用JavaScript.

  • `:empty`选择器只适用于空元素,这意味着只有在中间有空的开始和结束标记的元素,以及被认为总是空的单个标记元素,[例如](http://jsfiddle.net/SE7Bq/ ),因此除了`textarea`之外,它不能用于输入元素 (30认同)
  • 不对.请参阅下面的lukmo的答案.结合所需的sttribute和:valid或:无效的伪选择器就可以实现这一点. (7认同)
  • 对于后来找到这个答案的人:昆汀对于计算值是正确的,但是有:空选择器可以在这里使用并且有合理的支持(所有浏览器除了IE8和更旧的根据:http://www.w3schools.com/ cssref/sel_empty.asp (3认同)
  • 这是提出问题时的正确答案。required 属性仅在 2011 年在 Chrome 和 Firefox 中可用,这个答案是从 2010 年开始的。但是时代已经改变,这不再是“最佳”答案,所以我将其取消标记为已接受。 (3认同)

Sha*_*ggy 18

更新字段的值不会更新DOM中的value属性,这就是为什么你的选择器总是匹配一个字段,即使它实际上不是空的.

而是使用invalid伪类来实现您想要的,如下所示:

input:required {
  border: 1px solid green;
}
input:required:invalid {
  border: 1px solid red;
}
Run Code Online (Sandbox Code Playgroud)
<input required type="text" value="">

<input required type="text" value="Value">
Run Code Online (Sandbox Code Playgroud)


Dra*_*ter 15

input[value=""], input:not([value])

适用于:

<input type="text" />
<input type="text" value="" />
Run Code Online (Sandbox Code Playgroud)

但是一旦有人开始打字,风格就不会改变(你需要JS).

  • 要匹配前者,可以使用`input [value =""],输入:not([value])`. (9认同)
  • 不可靠,因为字段编辑后 DOM 中的值属性不会更改。然而,如果你不关心这个,这是一个不错的技巧 - 并且适用于最新的 Safari、Chrome、FF 和 IE... (4认同)

My *_*eth 10

如果不需要支持旧版浏览器,可以使用的组合required,validinvalid.

使用它的好处是validinvalid伪元素可以很好地与输入字段的类型属性配合使用.例如:

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;
}
Run Code Online (Sandbox Code Playgroud)
<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/>
Run Code Online (Sandbox Code Playgroud)

供参考,JSFiddle:http://jsfiddle.net/0sf6m46j/


Ari*_*lla 9

这对我有用:

对于 HTML,将required属性添加到 input 元素

<input class="my-input-element" type="text" placeholder="" required />
Run Code Online (Sandbox Code Playgroud)

对于 CSS,使用:invalid选择器定位空输入

input.my-input-element:invalid {

}
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 关于required来自w3Schools.com:“当存在时,它指定必须在提交表单之前填写输入字段。”


jes*_*ica 8

我意识到这是一个非常古老的线程,但是从那以后事情发生了一些变化,它确实帮助我找到了解决问题所需的正确组合。所以我想我会分享我所做的。

问题是,如果填充了可选输入,我需要将相同的 css 应用于它,就像我对填充的必需输入一样。css 使用了伪类 :valid ,它在未填充时也将 css 应用于可选输入。

这就是我修复它的方式;

HTML

<input type="text" required="required">
<input type="text" placeholder="">
Run Code Online (Sandbox Code Playgroud)

CSS

input:required:valid {
    ....
}
input:optional::not(:placeholder-shown){
    ....
}
Run Code Online (Sandbox Code Playgroud)


DeF*_*dog 7

将类名添加到输入中,然后对其应用 CSS 规则对我来说很有用:

<input type="text" name="product" class="product" />

<style>
input[value=""].product {
    display: none;
}
</style>
Run Code Online (Sandbox Code Playgroud)


Isr*_*les 6

$('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');
    }
});
Run Code Online (Sandbox Code Playgroud)

在jQuery中.我添加了一个类并用css设计.

.empty { background:none; }
Run Code Online (Sandbox Code Playgroud)


小智 5

这个问题可能已经被问过一段时间了,但是当我最近开始寻找客户端表单验证这个主题时,并且随着支持:placeholder-shown 越来越好,我认为以下内容可能会对其他人有所帮助。

通过使用这个 CSS4 伪类的Berend想法,我能够创建一个仅在用户完成填写后触发的表单验证。

以下是 CodePen 上的演示和说明: https: //codepen.io/johanmouchet/pen/PKNxKQ