2015-05-17 5 views
6

Diciamo che ho il seguente codice HTML:Selezionare solo i bambini diretti da elemento con 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> 

E ho la seguente 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 { 
     } 
    } 
} 

Ora il problema che ho è che div options e search sono il 33% percento di account che è logico come ho div {width: 33%}. So di poter selezionare elementi figli diretti con:

header { 
    > div { 
    } 
} 

Ma questo non aiuta, anche se ho messo il > Infront di tutte le altre classi. So anche che posso dire che la larghezza dovrebbe essere 0 o che mai più in .account ma vorrei impedirlo.

+1

Che cosa ha a che fare questo con Sass? Se hai un puro problema CSS, inserisci solo il CSS compilato. – cimmanon

+0

@JosefEngelfrost Questo rende la larghezza di '.options' e' .search' al 100%. Speravo di ottenerlo 0 larghezza – SuperDJ

+0

Spiacente, ho parlato a breve –

risposta

14

Prova questo:

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

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

Estrarre larghezza div e applicarlo solo su figli diretti. Lascia riposare così com'è. Qui è veloce fiddle (rimuovi gli stili .option e .search in seguito, è solo per la visualizzazione).

Si prega di modificare la domanda e spiegare meglio cosa esattamente si vuole raggiungere.

+0

Ty mi ha riparato ed è ancora pulito – SuperDJ

2

Non sono sicuro di averti capito. Ma penso che si vuole una combinazione di bambini diretti e bambino pseudo selettori, in puro CSS:

header > div:first-child { 
} 

O, per il secondo div:

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

si potrebbe anche utilizzare il selettore not:

header > div:not(.account) { 
} 

per escludere eventuali div indesiderate.

+0

Questi non funzionano davvero per me. L'opzione 1 funzionerebbe solo con '.title'. Opzione 2 Non si applica per il secondo div. Opzione 3 questo non si applica certo stile sotto div – SuperDJ

+0

Hai provato 'header> div {}'? – ryanpcmcquen

+0

Sì, ho. Ma non funziona – SuperDJ