2013-04-19 8 views
12

Ok, załóżmy, że mam następujący tradycyjne CSSDołącz selektor nadrzędnego do końca z Sass

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

Tak, starałem się zrobić to tak z SCSS:

.social-media { 

    /* ... */ 

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

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

ostatnia część nie działa, ponieważ wydaje się, że ampersand powinien pojawić się tylko na początku selektora. Czy jest w pobliżu praca?

+0

Trzeba rozważyć ponowną drogę jesteś nazywania rzeczy. Dlaczego masz element z klasą "social-media", a następnie z nieuporządkowaną listą z tą samą nazwą klasy? – zakangelle

+0

@zakang, którego nie zrozumiałeś poprawnie. Mam pewne style zdefiniowane dla elementów .social-media, ogólnie. A potem, chcę zastosować pewne szczególne style do elementów UL z klasą ".social-media". W moim kodzie nie ma nic takiego jak '.social-media ul.social-media', jak sugerujesz. –

+0

Moja wina, za dużo skanowania kodu i niedostateczna lektura :) – zakangelle

Odpowiedz

23

Sass 3.2 i starszych

Jedyną rzeczą, jaką możesz zrobić, to odwrócić zagnieżdżania czy też nie gniazdo w ogóle: .social-Media {

/* ... */ 

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

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

Sass 3.3 i później

You można to zrobić za pomocą interpolacji i dyrektywy @at-root:

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

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

Jeśli jednak rodzic selektor zawiera wiele selektorów, trzeba użyć selector-append zamiast:

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

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

wyjściowa:

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

Tego właśnie się obawiałem ... Niewiarygodnie można przyciemnić i rozjaśnić kolory z twojego sassy i nie możesz zrobić czegoś takiego. Dzięki za odpowiedź! –

+0

Ma to związek z tym, że używanie '&' nie jest prostym zastępowaniem ciągu znaków. Jeśli twój selektor nadrzędny był "ul.foo", mógłbyś skończyć z 'ulul.foo' gdyby tak było. – cimmanon

+0

hm ... to rozwiązanie działa dobrze na sassmeisterze, ale na moim lokalnym, z tą samą wersją sass co sassmeister, daje mi to błąd :( –