2015-05-17 12 views
6

Powiedzmy mam następujące HTML:Wybierz tylko bezpośrednie dzieci z elementu z Sass

<header class="header"> 
    <div class="title"> 
     <h1>Home</h1> 
    </div> 

    <div class="logo"> 
     <img src="#" alt="Logo"> 
    </div> 

    <div class="account"> 
     <div class="options"> 
     </div> 

     <div class="search"> 
     </div> 
    </div> 
</header> 

I mam następujący SCSS:

header { 
    height: 4.1rem; 

    div { 
     width: 33%; 
     float: left; 
     height: 4.1rem; 
     line-height: 4.1rem; 
     color: #fff; 

     &.title { 
      h1 { 
       font-weight: normal; 
       font-size: 3rem; 
       padding: 0; 
       margin: 0; 
      } 
     } 

     &.logo { 
      text-align: center; 
     } 

     &.account { 
     } 
    } 
} 

Teraz problem, że mam to, że div options i search są 33% procentami z account, co jest logiczne, ponieważ mam div {width: 33%}. Wiem, że mogę wybrać bezpośrednie elementy podrzędne z:

header { 
    > div { 
    } 
} 

Ale to nie pomoże, nawet jeśli kładę > Infront wszystkich innych klas. Wiem też, że mogę powiedzieć, że szerokość powinna wynosić 0 lub co jeszcze raz w .account, ale chciałbym temu zapobiec.

+1

Co to ma wspólnego z Sass? Jeśli masz czysty problem CSS, opublikuj skompilowany CSS. – cimmanon

+0

@JosefEngelfrost To sprawia, że ​​szerokość '.options' i' .search' wynosi 100%. Miałem nadzieję, że uda mi się ją uzyskać 0 szerokość – SuperDJ

+0

Przepraszam, rozmawiałem wkrótce –

Odpowiedz

14

Spróbuj tego:

... 
    & > div {width: 33%;} 

    div { 
     float: left; 
     height: 4.1rem; 
     line-height: 4.1rem; 
     color: #fff; 
     ... 

Wyjąć szerokość div i zastosować go tylko na bezpośrednich dzieci. Zostaw resztę tak, jak jest. Oto szybkie fiddle (usuń style .option i .search później, tylko w celu wizualizacji).

Edytuj pytanie i lepiej wyjaśnij, co dokładnie chcesz osiągnąć.

+0

Ty, który naprawił to dla mnie i wciąż jest czysty – SuperDJ

2

Nie jestem pewien, że Cię rozumiem. Ale myślę, że chcesz kombinacji bezpośrednich dzieci i selektorów pseudo dziecka, w czystym CSS:

header > div:first-child { 
} 

Albo, drugi div:

header > div:nth-child(2) { 
} 

Można też użyć selektora not:

header > div:not(.account) { 
} 

w celu wykluczenia niechcianych elementów div.

+0

To naprawdę nie działa dla mnie. Opcja 1 działałaby tylko dla '.title'. Opcja 2 Nie dotyczy drugiego elementu div. Opcja 3 nie zastosowałaby określonego stylu pod div – SuperDJ

+0

Czy próbowałeś 'header> div {}'? – ryanpcmcquen

+0

Tak, mam. Ale nie działa – SuperDJ