默认输入类型为“文本”。我一直认为,input[type='text']
即使没有在控件上明确声明类型,CSS声明定位也会影响这些输入。但是,我只是注意到我的默认类型文本输入没有获得样式。为什么会这样呢?我该如何解决呢?
input[type='text'] {
background: red;
}
<input name='t1' type='text' /> /* Is Red */
<input name='t1' /> /* Is Not Red */
Answers:
CSS仅使用DOM树中的数据,这与渲染器决定如何处理缺少属性的元素无关。
因此,要么让CSS反映HTML
input:not([type]), input[type="text"]
{
background:red;
}
或使HTML明确。
<input name='t1' type='text'/> /* Is Not Red */
如果没有做到这一点,您将永远无法区分
element { ...properties... }
和
element[attr] { ...properties... }
因为所有属性将始终在所有元素上定义。(例如,table
始终具有一个border
属性,0
默认为。)
input:not([type]), input[type="text"]
涵盖这两种情况。
input:not([type])
selector-解决我的问题就在那里
<table><tr></tr><table>
隐式变为<table><tbody><tr></tr></tbody></table>
,因此在DOM<input>
中不隐式变为是很奇怪<input type="text">
的。
tbody
元素被明确定义为强制性的,但具有可选的开始标记。或换句话说,即使您不在<tbody>
HTML源代码中,tbody也在那里。另一方面,type
in中的属性input
不是必需的。而行为input
不type
恰好是一样input
用type='text
,但是这是巧合,这无关与DOM树。
根据CSS规范,浏览器可能会或可能不会使用有关默认属性的信息。大部分都不是。CSS 2.1规范中的相关子句是DTD中的5.8.2默认属性值。在CSS 3 Selectors中,使用相同名称的6.3.4子句。它建议:“选择器的设计应使其无论文档树中是否包含默认值都可以使用。”
通常最好是明确指定基本属性,例如type=text
而不是默认属性。原因是没有简单可靠的方法来引用input
具有默认type
属性的元素。
尝试这个
input[type='text']
{
background:red !important;
}