输入[类型=';文本';]CSS选择器不适用于默认类型文本输入?

输入[类型=';文本';]CSS选择器不适用于默认类型文本输入?,css,css-selectors,Css,Css Selectors,默认输入类型为“文本”。我一直认为,以input[type='text']为目标的CSS声明将影响这些输入,即使该类型没有在控件上显式声明。然而,我只是注意到我的默认类型文本输入没有得到样式。为什么会这样?我该如何解决这个问题 input[type='text']{ 背景:红色; } /*为红色*/ /*不是红色的*/,因为它不应该这样做 input[type=text]{}是一个属性选择器,只会选择那些具有匹配属性的元素。CSS只使用DOM树中的数据,这与渲染器如何决定如何处理缺少属性的元素

默认输入类型为“文本”。我一直认为,以
input[type='text']
为目标的CSS声明将影响这些输入,即使该类型没有在控件上显式声明。然而,我只是注意到我的默认类型文本输入没有得到样式。为什么会这样?我该如何解决这个问题

input[type='text']{
背景:红色;
}
/*为红色*/

/*不是红色的*/
,因为它不应该这样做


input[type=text]{}
是一个属性选择器,只会选择那些具有匹配属性的元素。

CSS只使用DOM树中的数据,这与渲染器如何决定如何处理缺少属性的元素没有多大关系

因此,要么让CSS反映HTML

input:not([type]), input[type="text"]
{
background:red;
}
或者使HTML显式

<input name='t1' type='text'/> /* Is Not Red */


因为所有属性总是在所有元素上定义的。(例如,
table
总是有一个
border
属性,默认值为
0

要与所有浏览器兼容,您应该始终声明输入类型


一些浏览器将默认类型设为“文本”,但这不是一个好的做法。

根据CSS规范,浏览器可能会使用也可能不会使用有关默认属性的信息;大多数情况下,他们不会。CSS 2.1规范中的相关条款如下所示。在CSS 3选择器中,它是子句,具有相同的名称。它建议:“选择器的设计应确保无论文档树中是否包含默认值,选择器都能正常工作。”

通常最好明确指定基本属性,例如
type=text
,而不是默认设置。原因是没有简单可靠的方法来引用具有默认
类型
属性的
输入
元素。

试试这个

 input[type='text']
 {
   background:red !important;
 }

CSS选择器以标记上的属性为目标,而不是其默认假设。
input:not([type]),input[type=“text”]
以涵盖这两种情况。@BoltClock-Yes;我没有想到这一点。我从来不知道
input:not([type])
selector-解决了我的问题。我认为这主要是一个HTML/DOM问题,而不是CSS问题。在HTML中,
隐式变为
,因此在DOM中,
没有隐式变为
非常奇怪。@Kal不奇怪;这些只是不同的情况。HTML的定义在这方面非常精确:
tbody
元素被明确定义为必须的,但是有一个可选的开始标记。或者换句话说,即使HTML源代码中没有
,tbody也在那里。另一方面,
input
中的
type
属性不是必需的。不带
type
input
的行为恰好与带
type='text
input
的行为相同,但这是巧合,与DOM树无关。这回答了一个问题:+1,注意“必须”一词在本节的任何地方都不使用(除了在一个例子中描述一个不同的级联问题外)。重要的是浏览器的实际行为。似乎没有浏览器能做到这一点。。。。。
element[attr] { ...properties... }
 input[type='text']
 {
   background:red !important;
 }