2013-11-07 5 views
1

Ниже приводится код, который я попыталсяне селектор в css не работает?

HTML

<div> 
    <span>Span1</span> 
    <span>Span12</span> 
    <span>Span13</span> 
</div> 

<div> 
    <span>Span1</span> 
    <span>Span12</span> 
    <span>Span13</span> 
</div> 

<span>Span2</span> 
<span>Span3</span> 

CSS

:not(div>span) 
    { 
     color : #ff0000; 
    } 

Я хочу пролеты с span2 и span3 быть красным, используя не селектору

Проверьте Js скрипку

http://jsfiddle.net/82KwV/

+0

Что относительно span12 и 13? – Moob

+0

Вы уверены, что [это] (http://jsfiddle.net/82KwV/2/) - это то, что вы хотите? – Moob

+0

@Moob Я знаю другие способы получить это решение, но я хотел бы знать, ho я могу использовать не селектор –

ответ

7

:not принимает simple selector в качестве аргумента. div > span - не простой селектор, поэтому он не может использоваться в этом контексте. В результате вы не можете сказать «Я хочу, чтобы в CSS было все, что не было, а родительский div был красным», и вам нужно идти на компромисс.

Одна из возможностей - нацелить определенные подмножества общего случая. Так, например, тонко разные «все пролеты, которые не имеют Див родителя» соответствует:

:not(div) > span { color: red } 

В более сложных случаях этот подход может оказаться невозможным (например, вы не можете использовать div, p вместо div выше), в котором случае вам придется обратиться к другим вариантам, таким как «делать/отменить» трюк:

span { color: red } 
div > span { color: inherit } 

Это устройство может быть легко расширено до p > span, div > span, но, конечно, есть компромисс: эти правила могут переопределить что-то другое ваши таблицы стилей.

+0

любой обходной путь? –

+0

@ ᴀʀᴜnBᴇrtiL: Я дал обходные пути выше. Нет никакого способа сделать то, что делает ваш гипотетический селектор. CSS не работает таким образом, и он не будет работать в обозримом будущем. – Jon

0

:not не разрешает этот тип селектора. Лучше использовать

body > span { color: red } 

Это чище, чем исправление его, используя несколько правил.

+0

Может быть, чище * сейчас *, но он не делает то же самое. Вы можете легко увидеть, что на более сложной странице или в более сложных случаях этого сценария вам нужно будет написать много селекторов, которые будут нацелены на все. Это также делает решение очень хрупким: немного измените структуру (например, положите 'p' вокруг пролетов), и это больше не работает. Это также факторы, которые следует учитывать. – Jon

+0

@Jon: Вы правы, но всегда выбирать более чистое, используя одно правило. Использование селекторов «отменить» также ломается, даже используя «color: inherit», поскольку это может переопределить другую настройку. Вы просто не можете отключить определенный параметр CSS (говоря о «строке кода») для определенных подмножеств в CSS. –

+0

Я хочу сказать, что оба подхода не делают то же самое. Если кто-то заботится о разнице так или иначе, то не имеет значения, какой из них чище, потому что только один будет работать. – Jon

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