it-roy-ru.com

SASS - использовать переменные в нескольких файлах

Я хотел бы сохранить один центральный файл .scss, в котором хранятся все определения переменных SASS для проекта.

// _master.scss 

$accent: #6D87A7;           
$error: #811702;
$warning: #F9E055;
$valid: #038144;
// etc... 

Проект будет иметь большое количество CSS-файлов, что связано с его природой. Важно, чтобы я объявил все переменные стиля проекта в одном месте.

Есть ли способ сделать это в SCSS?

160
dthree

Вы можете сделать это так:

У меня есть папка с именем утилиты и внутри нее у меня есть файл с именем _variables.scss

в этом файле я объявляю переменные так:

$black: #000;
$white: #fff;

тогда у меня есть файл style.scss, в который я импортирую все мои другие файлы scss, как это:

// Utilities
@import "utilities/variables";

// Base Rules
@import "base/normalize";
@import "base/global";

затем в любом из импортированных мной файлов я смогу получить доступ к объявленным мной переменным.

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

263
Joel

Этот ответ показывает, как я в конечном итоге использовал это и дополнительные подводные камни, которые я ударил. 

Я сделал основной файл SCSS. Этот файл должен должен иметь подчеркивание в начале для его импорта:

// assets/_master.scss 
$accent: #6D87A7;           
$error: #811702;

Затем в заголовке всех других моих файлов .SCSS я импортирую мастер:

// When importing the master, you leave out the underscore, and it
// will look for a file with the underscore. This prevents the SCSS
// compiler from generating a CSS file from it.
@import "assets/master";

// Then do the rest of my CSS afterwards:
.text { color: $accent; }

ВАЖНЫЙ

Не включайте ничего, кроме переменных, объявлений функций и других функций SASS в ваш файл _master.scss. Если вы включите фактический CSS, он будет дублировать этот CSS во всех файлах, в которые вы импортируете мастер.

64
dthree

Как насчет записи некоторого цветового класса в глобальный файл sass, поэтому нам не нужно заботиться о том, где находятся переменные. Так же, как следующие:

// base.scss @import "./_variables.scss";

.background-color{ background: $bg-color; }

и затем мы можем использовать класс background-color в любом файле . Я хочу сказать, что мне не нужно импортировать variable.scss в любой файл, просто используйте его. 

0
gary gao

Создайте index.scss и там вы сможете импортировать всю имеющуюся у вас файловую структуру. Я вставлю вам свой индекс из корпоративного проекта, возможно, он поможет другим, как структурировать файлы в css:

@import 'base/_reset';

@import 'helpers/_variables';
@import 'helpers/_mixins';
@import 'helpers/_functions';
@import 'helpers/_helpers';
@import 'helpers/_placeholders';

@import 'base/_typography';

@import 'pages/_versions';
@import 'pages/_recording';
@import 'pages/_lists';
@import 'pages/_global';

@import 'forms/_buttons';
@import 'forms/_inputs';
@import 'forms/_validators';
@import 'forms/_fieldsets';

@import 'sections/_header';
@import 'sections/_navigation';
@import 'sections/_sidebar-a';
@import 'sections/_sidebar-b';
@import 'sections/_footer';

@import 'vendors/_ui-grid';

@import 'components/_modals';
@import 'components/_tooltip';
@import 'components/_tables';
@import 'components/_datepickers';

И вы можете смотреть их с помощью gulp/grunt/webpack и т.д., Например:

gulpfile.js

// SASS Task

var gulp = require('gulp');
var sass = require('gulp-sass');
//var concat = require('gulp-concat');
var uglifycss = require('gulp-uglifycss');
var sourcemaps = require('gulp-sourcemaps');

gulp.task('styles', function(){
    return gulp
            .src('sass/**/*.scss')
            .pipe(sourcemaps.init())
            .pipe(sass().on('error', sass.logError))
            .pipe(concat('styles.css'))
            .pipe(uglifycss({
                "maxLineLen": 80,
                "uglyComments": true
            }))
            .pipe(sourcemaps.write('.'))
            .pipe(gulp.dest('./build/css/'));
});

gulp.task('watch', function () {
    gulp.watch('sass/**/*.scss', ['styles']);
});

gulp.task('default', ['watch']);
0
Carnaru Valentin