2013-02-12 4 views
1

Это должно быть просто, но я не могу найти, что мне нужно. У меня есть родительский div с суб-родителями и детьми внутри.Как выбрать всех детей в субпартментах, кроме первых

<div class="parent"> 
    <div class="subparent1"> 
    <div class="foo">foo1 </div> 
    <div class="bar">bar1 </div> 
    </div> 
    <div class="subparent2"> 
    <div class="foo">foo2 </div> 
    </div> 
    <div class="subparent3"> 
    <div class="bar">bar2 </div> 
    <div class="foo">foo3 </div> 
    <div class="bar">bar3 </div> 
    </div> 
</div> 

Я хочу скрыть все классы .foo, кроме первого. Как использовать CSS3 для выбора всего остального «.foo», кроме первого?

PS - номер '.foo' является динамическим и будет меняться.

+0

'.parent .foo {display: none;}' и '.parent .foo: first {display: block;}'? – mshsayem

+0

@mshsayem: В CSS нет ': first'. – BoltClock

+0

о, я вижу; в этом случае: '.parent> .foo {display: none;}' и '.parent> .foo: first-of-type {display: block;}'? – mshsayem

ответ

3

Такая ситуация зависит от предварительного знания структуры HTML; нет никакого способа сделать это, используя только CSS без предсказуемого HTML, потому что CSS не имеет возможности выбрать первого внука определенного вида, только первый ребенок.

Например, если вы знаете, что первый .foo будет всегда происходит в первом subparent, вы можете быть в состоянии уйти с выбором любого .foo для отображения в качестве блока, а затем выбрать все последующие subparents и .foo с использованием general sibling combinator ~ и пряча их:

.parent > .subparent1 > .foo { 
    display: block; 
} 

.parent > .subparent1 > .foo ~ .foo, /* .foo after the first in .subparent1 */ 
.parent > .subparent1 ~ div > .foo { /* .foo in subparents after .subparent1 */ 
    display: none; 
} 

Если .subparent1 не может содержать .foo элементы на всех, и вы хотите, чтобы выбрать первый очень .foo независимо от его subparent, я не думаю, что это возможно с только CSS селекторов. Возможно, вам придется найти другой способ, например. путем присвоения дополнительного класса первому .foo, поскольку он динамически сгенерирован или использует JavaScript для применения стилей.

+0

Спасибо вам большое, и это работает, но теперь у меня другая проблема. Что делать, если класс «.parent» имеет субпартнеры, содержащие «.foo»? http://jsfiddle.net/kucF5/ – user1775598

+0

@ user1775598: Вы хотите скрыть все '.foo', кроме foo1? Возможно, вы должны отредактировать свой вопрос или опубликовать новый. – BoltClock

+0

Да, это правильно – user1775598

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