2013-04-19 13 views
12

Ok, supponiamo di avere la seguente tradizionale CSSAggiungere il selettore di genitore alla fine con Sass

.social-media { /* ... */ } 
.social-media .twitter { /* ... */ } 
.social-media .facebook { /* ... */ } 
ul.social-media { /* ... */ } 

Così, ho cercato di fare in questo modo con SCSS:

.social-media { 

    /* ... */ 

    .twitter { 
     /* ... */ 
    } 
    .facebook { 
     /* ... */ 
    } 

    // Here's the problem: 
    ul& { 
     /* ... */ 
    } 
} 

L'ultima parte non funziona, perché sembra che la e commerciale dovrebbe apparire solo all'inizio di un selettore. C'è una soluzione?

+0

è necessario considerare ripensare il modo in cui si sta nominare le cose. Perché hai un elemento con la classe 'social-media', e poi una lista non ordinata al suo interno con lo stesso nome di classe? – zakangelle

+0

@zakang non l'hai capito bene. Ho alcuni stili definiti per .social-media elements, in generale. E poi, voglio applicare alcuni particolari stili agli elementi UL con la classe '.social-media'. Non c'è niente come '.social-media ul.social-media' nel mio codice, come stai implicando. –

+0

Errore mio, troppa scansione del codice e lettura insufficiente :) – zakangelle

risposta

23

Sass 3.2 maggiorenni

L'unica cosa che puoi fare è invertire il nidificazione o no nido a tutti: .social-media {

/* ... */ 

    .twitter { 
     /* ... */ 
    } 
    .facebook { 
     /* ... */ 
    } 
} 

ul.social-media { 
    /* ... */ 
} 

Sass 3.3 e successivamente

È può farlo usando l'interpolazione e la direttiva @at-root:

.social-media { 
    /* ... */ 

    // Here's the solution: 
    @at-root ul#{&} { 
     /* ... */ 
    } 
} 

Tuttavia, se il selettore principale contiene più selettori, è necessario utilizzare selector-append invece:

.social-media, .doodads { 
    /* ... */ 

    // Here's the solution: 
    @at-root #{selector-append(ul, &)} { 
     /* ... */ 
    } 
} 

uscita:

.social-media, .doodads { 
    /* ... */ 
} 
ul.social-media, ul.doodads { 
    /* ... */ 
} 
+0

Questo è ciò di cui avevo paura ... Incredibilmente puoi oscurare e schiarire i colori dalla tua sass e non puoi fare qualcosa del genere. Grazie per la tua risposta! –

+0

Ha a che fare con il fatto che l'uso di '&' non è una semplice sostituzione di stringhe. Se il tuo selettore genitore fosse stato "ul.foo", avresti potuto finire con "ulul.foo" se fosse il caso. – cimmanon

+0

hm ... questa soluzione funziona bene su sassmeister, ma sul mio locale, con la stessa versione di sassme sassmeister, questo mi dà un errore :( –

Problemi correlati