2013-06-29 3 views
2

Для следующего HTML + CSS (http://jsfiddle.net/Gb3dh/1/):CSS Selector не Matching

<input class="a" placeholder="here"/> 
<input class="b" role="x" placeholder="there"/> 

...

.a, .b { 
    font-style: italic; 
} 

[placeholder] input[role="x"] { 
    font-style=normal; 
} 

Почему "стиль шрифта" в "класс = Ъ" входной курсивное ? Я бы предпочел второй селектор CSS (получить любой элемент с заголовком-заполнителем и где вход имеет атрибут «title», равный «x»).

ответ

5

Две ошибки:

  • Там в в font-style=normal;= там, где должна быть :
  • [placeholder] не должно быть перед input[role="x"], как вы сделали это соответствует элемент с атрибутом placeholder, который содержит a input элемент с атрибутом role="x"

Просмотреть обновленный JSFiddle (или код ниже): http://jsfiddle.net/Gb3dh/5/

.a, .b { 
    font-style: italic; 
} 

input[role="x"][placeholder] { 
    font-style:normal; 
} 
+3

Спасибо за помощь по моим ошибкам. Разве это не '! Important' нахмурился, хотя, поскольку он нарушает правила селектора CSS? –

+0

@Kevin У вас есть точка там, вы, вероятно, можете ее оставить. Код, кажется, отлично работает в JSFiddle без него, независимо от порядка инструкций CSS ... Это всего лишь одна из первых вещей, которые приходили в голову. –

+2

! Важно здесь не нужно. Вход [attr] [attr] более конкретный (0,0,2,1), чем одно имя класса (0,0,1,0). http://css-tricks.com/specifics-on-css-specificity/ – Gus

1

Вы должны изменить селектор

input[placeholder][role="x"] { 
    font-style=normal; 
} 

Ваш селектор означает ввод с атрибутом role="x" который находится внутри элемента с атрибутом placeholder

3

Это должно быть input[role="x"][placeholder], текущий селектор будет соответствовать элемент input[role="x"] внутри элемента с атрибутом [placeholder].

Надеюсь, это поможет.