如何使用 CSS 定位文本输入字段?

Posted

技术标签:

【中文标题】如何使用 CSS 定位文本输入字段?【英文标题】:How can I target text input fields with CSS? 【发布时间】:2013-07-15 23:43:37 【问题描述】:

假设您有以下 html

<input />
<br />
<input type=text />

当然,在我的 HTML 中,我也会有其他类型的输入字段(复选框等)。现在我只想设置文本输入的样式。

我在搜索时发现,在 CSS 中执行以下操作:

input[type=text]  background: red; 

对于第二个输入,该属性显式存在,这是有效的。然而,对于第一个,它适用于 IE8,但不适用于 IE10。也不在 Chrome 中。

那么我怎样才能定位所有文本输入字段,并且只定位文本输入字段,而不必将type=text 放在任何地方?

您可以在jsFiddle 中看到这一点。对于 IE8,请查看 these instructions 了解如何让 jsFiddle 工作,但它看起来像这样:

【问题讨论】:

【参考方案1】:

如果您希望能够省略 type="text" 并且仍然有选择器匹配,则必须使用 CSS3 中提供的 not psuedoselector:

input[type="text"], input:not([type]) 
    ...

http://jsfiddle.net/dByqP/5/

这在较低版本的 IE 中不起作用,因为这些浏览器不支持 CSS3。

最好的解决方案是检查并将type="text" 添加到您的文本输入中,然后使用您原来的选择器。

【讨论】:

哦,但是 :not so 不能在 Netscape 或 IE 6 及更早版本上运行... :-) @rodrigo-silveira lifehacker.com/5925287/…:P 一个关于让 css3 选择器在 IE 下工作的有趣线程>=7:***.com/questions/3077146/… 太好了,不知道/记得not。这允许我只为文本输入元素指定样式,而不必为所有其他输入元素设置例外。【参考方案2】:

一种痛苦但确实可行的方法是简单地设置样式

input 
    /* ... */

这将针对每个浏览器中的文本输入,然后您可以做您正在做的事情,并针对不是文本输入的每一种输入类型:

input[type=range] 
input [type=phone] 
// etc.

这样,即使浏览器不支持 CSS3 中可用的 :not 运算符,您仍然可以让它工作...

【讨论】:

这可行,但有点相反。就我而言,我认为这需要大量的工作,因为对于每种类型的输入,我都必须做出例外。虽然我想做的只是设置文本输入元素的样式。【参考方案3】:

我的建议是输入的默认样式是

input 
    background-color: red;

然后根据需要覆盖其他样式的样式,例如蓝色按钮

input[type='button'] 
    background-color: blue;

当然,您需要为特定的输入类型指定特定的样式,但这并不意味着您无论如何都不会这样做,例如,如果您想要一个独特的按钮。

【讨论】:

正如您所提到的,这将是很多工作。虽然我只想设置输入文本元素的样式,但在这里我必须为所有其他元素类型设置例外。 是的,jbabey 的回答比我的要好得多。我真的需要及时了解我的 CSS XD【参考方案4】:

使用类和 CSS 设置输入样式:

.redBG

    background: red;

那么你的 HTML 是:

<input class="redBG" />

附jsFiddle。

【讨论】:

@Brewal 我的想法是可能需要不止一种风格......我可能选错了! 这种方法的缺点是,如果您想在整个网站上获得某种外观,您必须将类添加到所有输入元素中。所以对于我的场景,不是很合适。 @Peter 我不确定 - 但确定这是其他人将来可能需要的替代方案 :)

以上是关于如何使用 CSS 定位文本输入字段?的主要内容,如果未能解决你的问题,请参考以下文章

机器人框架:如何定位输入文本字段以及如何在其中输入值

JQuery - 如何只定位文本输入元素的标题标签?

如何阻止占位符转换回来? (CSS)

如何在里面定位我的 UIScrollView 和文本字段?

如何在 HTML/CSS 中的输入类型文本字段中添加图标? [复制]

(CSS)如何在 <img> 标签上定位文本(带背景颜色)而不使用绝对定位