2013-07-17 2 views
11

Скажите у вас есть следующий HTML:Как настроить поле ввода текста с помощью CSS?

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

Конечно, в моем HTML я иметь другой тип поля ввода, а также (флажки, и т.д.). Теперь я хочу только стиль ввода текста.

Что я нахожу при поиске, чтобы сделать следующее в CSS:

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

Для второго входа, где атрибут является явно присутствует, это работает. Для первого, однако, он работает в IE8, но не в IE10. Также не в Chrome.

Итак, как я могу настроить таргетинг на все поля ввода текста и только поле ввода текста, не имея при этом места type=text?

Вы можете увидеть это в jsFiddle. Для IE8, проверьте these instructions о том, как получить jsFiddle работать, но это выглядит следующим образом:

enter image description here

ответ

16

Если вы хотите, чтобы упустить type="text" и по-прежнему иметь селекторный ответ , вам придется использовать not psuedoselector доступны в CSS3:

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

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

Это не будет работать в более низких версиях IE, так как CSS3 не очень хорошо поддерживается в этих браузерах.

Лучшим решением было бы пройти и добавить type="text" к вашим текстовым вводам и просто использовать оригинальный селектор.

+1

О, но: не так не получилось бы работать в Netscape или IE 6 и раньше ... :-) –

+0

@ rodrigo-silveira http://lifehacker.com/5925287/dear-web-user-please-upgrade-your -browser: P – jbabey

+1

Отличная статья, @jbabey Я отправлю ее моей бабушке, которая все еще использует IE ... –

1

Один болезненный, но верный способ может сделать, это установить стиль на просто

input { 
    /* ... */ 
} 

Какой бы предназначаться для ввода текста в любом браузере, то вы могли бы сделать то, что вы делали, и целевой каждый тип входа, который не является ввод текста:

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

Таким образом, даже если оператор: not, доступный в CSS3, не поддерживается браузером, вы все равно можете заставить его работать ...

+0

Это будет работать, но это своего рода противоположный подход. В моем случае, я думаю, для этого потребуется довольно много работы, потому что для каждого типа ввода я должен был бы делать исключения. Хотя все, что я хочу сделать, это стиль элементов ввода текста. – Peter

0

Стиль входной, используя класс и CSS:

.redBG 
{ 
    background: red; 
} 

Тогда ваш HTML является:

<input class="redBG" /> 

Прикрепленный jsFiddle.

+1

Ну, если вы можете добавить класс, вы можете добавить тип ... – Brewal

+0

@Brewal мое мышление, может быть, может быть более одного стиля ... Возможно, я выбрал это неправильно! –

+0

Недостатком этого подхода является то, что если вам нужен определенный взгляд на весь ваш сайт, вы должны добавить класс ко всем входным элементам. Поэтому для моего сценария это не очень подходит. – Peter

1

Мое предложение будет иметь стиль по умолчанию для ввода быть

input { 
    background-color: red; 
} 

затем перезаписать стиль что-то другое, если это необходимо, например, синяя кнопка

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

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

+0

Как вы упомянули, это будет очень много работы. В то время как я хочу стилизовать только входные текстовые элементы, здесь мне придется делать исключения для всех других типов элементов. – Peter

+0

Да ответ jbabey намного лучше моего. Мне действительно нужно постоянно обновлять свой CSS XD – pandavenger

Смежные вопросы