2012-04-15 2 views
5

Есть ли альтернатива SASS или LESS, которая реализует что-то вроде модулей и разумной глобальной области?Препроцессор CSS с модулями и разумной областью?

Например, когда я делаю это в SASS (или МЕНЬШЕ эквивалент):

@import "foo.scss" 

... это толкает все Примеси, переменные и т.д. из импортируемого файла в глобальном масштабе, возможно перекрывая или сталкиваясь с загруженными или определенными миксинами/переменными. Я думаю, что это беспорядок.

Я хотел бы иметь что-то более модульное. Представьте себе, что foo.scss имеет подмешать bar:

@mixin bar { 
    // ... 
} 

Чтобы использовать эту подмешать я бы назвал его по отношению к «Foo» пространства имен. Более или как это:

@import "foo.scss" 

.bar { 
    @include foo.bar; 
} 

Другими словами: вместо того, чтобы работать в качестве эквивалента from foo import * в Python, @import foo будет действительно работать, как import foo.

So. Есть ли препроцессор CSS, который интересуется такими пространствами имен?

+2

Я не знаю, если он поддерживает пространства имен, но посмотрите на Stylus http://learnboost.github.com/stylus/, другой, по-видимому отличный препроцессор css (никогда не использовал его), который можно легко расширить. –

+1

Вы можете обернуть свой файл меньше в mixin (например, вы бы использовали пространство имен в javascript) eg .namespaced() { // переменные не просачиваются !! } .namespaced(); –

+0

@LukePage Эта функция опрятная, но у вас могут быть два файла с тем же «.namespace». Для истинной модульности все имена из импортированных файлов не следует отбрасывать в глобальную область. – moraes

ответ

3

В LESS вы можете определить свое пространство имен в файле, который импортирует другой.

foo.less:

.bar() { 
    // … 
} 

main.less:

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

Не знаю, о SASS/SCSS.

3

Я пространство имена моих модулей в Sass незамедлительно исполняющий Mixins:

@mixin MyAwesomeModule() { 

    $fontColor: red; 
    $bgColor: green; 

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

} 
@include MyAwesomeModule();