2012-04-15 14 views
5

Czy istnieje alternatywa dla SASS lub LESS, która implementuje coś takiego jak moduły i globalny zasięg?Preprocesor CSS z modułami i rozsądnym zakresem?

Na przykład, kiedy to zrobić w SASS (lub równoważny) Im mniej:

@import "foo.scss" 

... to popycha wszystkie wstawek, zmienne itp z importowanego pliku do zasięgu globalnym, ewentualnie nadrzędne lub kolizja z załadowanymi lub zdefiniowanymi mixinami/zmiennymi. Myślę, że to bałagan.

Chciałbym mieć coś bardziej modularnego. Wyobraźmy sobie, że foo.scss ma wstawek bar:

@mixin bar { 
    // ... 
} 

Aby skorzystać z tej mixin bym to nazwać relatywnie do przestrzeni nazw "foo". Bardziej lub tak:

@import "foo.scss" 

.bar { 
    @include foo.bar; 
} 

Innymi słowy: zamiast pracować jako ekwiwalent from foo import * w Pythonie, A @import foo naprawdę działa jak import foo.

So. Czy istnieje preprocesor CSS, który dba o takie przestrzenie nazw?

+2

Nie wiem, czy obsługuje nazw, ale spojrzeć na Stylus http://learnboost.github.com/stylus/ kolejna pozornie świetny preprocesor css (nigdy go nie używał), który można łatwo rozszerzyć –

+1

Można zawinąć mniej pliku w mixin (jak w przestrzeni nazw w javascript) np. .namespaced() { // zmienne nie wyciekają !! } .namespaced(); –

+0

@LukePage Ta funkcja jest niezła, ale możesz mieć dwa pliki z tym samym '.namespace'. Dla prawdziwej modułowości, wszystkie nazwy z zaimportowanych plików nie powinny być upuszczane do zasięgu globalnego. – moraes

Odpowiedz

3

W LESS możesz zdefiniować swój obszar nazw w pliku, który importuje drugi.

foo.less:

.bar() { 
    // … 
} 

main.less:

.namespace { 
    @import "foo"; 
} 
// To use .bar-Mixin prefix namespace: 
body { 
    .namespace .bar(); 
    // .bar(); would throw an error 
} 

nie wiem o Sass/SCSS.

3

I moje przestrzeni nazw modułów Sass z bezpośrednio realizujących wstawek:

@mixin MyAwesomeModule() { 

    $fontColor: red; 
    $bgColor: green; 

    .someDiv { 
     color: $fontColor; 
     background: $bgColor; 
    } 

} 
@include MyAwesomeModule(); 
Powiązane problemy