是否有一种方法来检测输入是否有文本在它通过CSS?我尝试过使用:empty伪类,也尝试过使用[value=""],这两种方法都不起作用。我似乎找不到一个单一的解决方案。

我想这一定是可能的,考虑到我们有:checked和:indeterminate的伪类,两者都是类似的东西。

请注意:我这样做是为了“时尚”风格,它不能利用JavaScript。

还要注意,在客户端,在用户无法控制的页面上使用了Stylish。


当前回答

简单的css:

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

如果输入被填满,这段代码将在页面加载上应用给定的css。

其他回答

您可以利用占位符并使用:

input:not(:placeholder-shown) {
  border: 1px solid red;
}

你可以使用上面写的没有必填字段的占位符技巧。

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

这是有可能的,只要有通常的CSS注意事项,并且HTML代码可以修改。如果向元素添加所需的属性,则该元素将根据控件的值是否为空匹配:invalid或:valid。如果元素没有value属性(或者它有value=""),控件的值最初为空,当输入任何字符(甚至空格)时变成非空。

例子:

<style>
#foo { background: yellow; }
#foo:valid { outline: solid blue 2px; }
#foo:invalid { outline: solid red 2px; }
</style>
<input id=foo required>

伪分类:valid和:invalid只在工作草案级别的CSS文档中定义,但在浏览器中支持相当广泛,除了在IE中,它随IE 10而来。

如果你想让“空”包含的值只由空格组成,你可以添加属性pattern=.*\S.*。

(目前)没有CSS选择器可以直接检测输入控件是否有非空值,所以我们需要像上面描述的那样间接地做这件事。

通常,CSS选择器指的是标记,或者在某些情况下,指的是通过脚本(客户端JavaScript)设置的元素属性,而不是用户操作。例如:empty在标记中匹配元素中的空内容;在这个意义上,所有输入元素都不可避免地为空。选择器[value=""]测试元素在标记中是否具有value属性,并将空字符串作为其值。和:checked和:indeterminate是类似的东西。它们不受实际用户输入的影响。

<input onkeyup="this.setAttribute('value', this.value);" />

and

input[value=""]

将工作:-)

编辑:http://jsfiddle.net/XwZR2/

使用属性占位符和伪类占位符-显示是检测输入是否有文本的正确方法。

例子:

<input type="email" placeholder=" " required>
<label>Email</label>
input:focus ~ label,
input:not(:placeholder-shown) ~ label
{
  top : -4em
  left : -0.2em
  font-size : 0.9em
}