Подтвердить что ты не робот

Input [type = 'text'] Селектор CSS не применяется к текстовым вводам по умолчанию.

Тип ввода по умолчанию - "текст". Я всегда предполагал, что объявления CSS, ориентированные на input[type='text'], повлияют на эти входы, даже если тип не был явно объявлен в элементе управления. Тем не менее, я только заметил, что мои текстовые вложения по умолчанию не получают стили. Почему это так? И как я могу это решить?

CSS

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

HTML

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

http://jsfiddle.net/LhnNM/

4b9b3361

Ответ 1

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 - по умолчанию.)

Ответ 2

По спецификациям CSS браузеры могут использовать или не использовать информацию об атрибутах по умолчанию; в основном не. Соответствующее предложение в спецификации CSS 2.1 5.8.2 Значения атрибутов по умолчанию в DTD. В CSS 3 Selectors его предложение 6.3.4 с тем же именем. Он рекомендует: "Селекторы должны быть сконструированы так, чтобы они работали независимо от того, включены ли значения по умолчанию в дерево документов".

Как правило, лучше явно указывать основные атрибуты, такие как type=text вместо их дефолта. Причина в том, что нет простого надежного способа ссылки на элементы input с дефолтным атрибутом type.

Ответ 3

Потому что это не предполагается.

input[type=text] { } - это селектор атрибутов и будет выбирать только этот элемент с соответствующим атрибутом.

Ответ 4

Чтобы быть совместимым со всеми браузерами, вы всегда должны указывать тип ввода.

Некоторые браузеры будут использовать тип по умолчанию как "текст", но это не очень хорошая практика.

Ответ 5

попробуйте это

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