是否有一种方法来检测输入是否有文本在它通过CSS?我尝试过使用:empty伪类,也尝试过使用[value=""],这两种方法都不起作用。我似乎找不到一个单一的解决方案。
我想这一定是可能的,考虑到我们有:checked和:indeterminate的伪类,两者都是类似的东西。
请注意:我这样做是为了“时尚”风格,它不能利用JavaScript。
还要注意,在客户端,在用户无法控制的页面上使用了Stylish。
是否有一种方法来检测输入是否有文本在它通过CSS?我尝试过使用:empty伪类,也尝试过使用[value=""],这两种方法都不起作用。我似乎找不到一个单一的解决方案。
我想这一定是可能的,考虑到我们有:checked和:indeterminate的伪类,两者都是类似的东西。
请注意:我这样做是为了“时尚”风格,它不能利用JavaScript。
还要注意,在客户端,在用户无法控制的页面上使用了Stylish。
当前回答
有效的选择器就可以做到这一点。
<input type="text" class="myText" required="required" />
.myText {
//default style of input
}
.myText:valid {
//style when input has text
}
其他回答
实际上有一种不需要JavaScript的方法。
如果你将<input>的required选择器设置为true,你可以用CSS:valid标签检查其中是否有文本。
引用:
MDN文档 CSS技巧
输入{ 背景:红色; } 输入:有效的{ 背景:lightgreen; } <input type="text" required>
jQuery和CSS的简单技巧如下:
JQuery:
$('input[value=""]').addClass('empty');
$('input').keyup(function(){
if( $(this).val() == ""){
$(this).addClass("empty");
}else{
$(this).removeClass("empty");
}
});
CSS:
input.empty:valid{
box-shadow: none;
background-image: none;
border: 1px solid #000;
}
input:invalid,
input:required {
box-shadow: 3px 1px 5px rgba(200, 0, 0, 0.85);
border: 1px solid rgb(200,0,0);
}
input:valid{
box-shadow: none;
border: 1px solid #0f0;
}
<input onkeyup="this.setAttribute('value', this.value);" />
and
input[value=""]
将工作:-)
编辑:http://jsfiddle.net/XwZR2/
使用JS和CSS:不是伪类
输入{ 字体大小:13 px; 填充:5 px; 宽度:100 px; } 输入(value = " ") { 边框:2px实体#fa0000; } 输入:没有((value = " ")) { 边框:2px实体#fafa00; } <input type="text" onkeyup="this. "setAttribute('value', this.value);" value="" /> . setAttribute('value', this.value);
你可以使用上面写的没有必填字段的占位符技巧。
required的问题是,当你写了一些东西,然后删除它——作为HTML5规范的一部分,输入现在总是红色的——然后你就需要一个上面写的CSS来修复/覆盖它。
你可以简单地做w/o要求的事情
<input type="text" placeholder="filter here" id="mytest" />
CSS
#mytest:placeholder-shown {
/* if placeholder is shown - meaning - no value in input */
border: black 1px solid;
color: black;
}
#mytest {
/* placeholder isn't shown - we have a value in input */
border: red 1px solid;
color: red;
}
代码笔:https://codepen.io/arlevi/pen/LBgXjZ