Приоритет объявления переменной Sass

Я объявляю переменную с одинаковым именем в двух файлах. Я импортирую их в следующем порядке и обнаружил конфликт.

Модальный.scss

$gray : #e1e1e1;    // Imported first

Переменная.scss

$gray : #999;       // imported later

Ожидаемое поведение состоит в том, что значение $gray будет перезаписано. Однако я получаю первое импортированное значение (#e1e1e1) вместо (#999) в CSS.

Я делаю неправильную вещь, объявляя переменную несколько раз?


person Alpesh Prajapati    schedule 26.09.2014    source источник
comment
Вы пробовали изменить порядок?   -  person Lukasz Muzyka    schedule 26.09.2014
comment
попробуй $gray : #999 !important;   -  person Fergoso    schedule 26.09.2014
comment
Я бы посоветовал вам использовать какой-нибудь сервис именования цветов, подобный этому, чтобы избегайте использования одного и того же имени для нескольких переменных.   -  person Vucko    schedule 26.09.2014
comment
@LukaszMuzyka да, он принимает первое значение, указанное при первом объявлении.   -  person Alpesh Prajapati    schedule 26.09.2014
comment
@Fergoso Я не прошу решения. Речь идет о том, как sass обрабатывает переменные.   -  person Alpesh Prajapati    schedule 26.09.2014
comment
эй, @Vucko, да, я могу использовать другое имя, но меня беспокоит объявление переменной sass...   -  person Alpesh Prajapati    schedule 26.09.2014


Ответы (4)


Судя по всему, Sass примет первое объявление переменной.

Например, когда вы используете Bootstrap в Sass, вы должны объявить все переменные, которые хотите переопределить, до импорта Bootstrap.

// This will override the default $brand-primary in Bootstrap
$brand-primary: #000;

// Importing Bootstrap
@import 'bootstrap';
person Lukasz Muzyka    schedule 26.09.2014
comment
Имейте в виду, что bootstrap использует ключевое слово !default при объявлении переменных. Так что ваш ответ может быть неверным - person Noname; 18.03.2021

Краткие заметки о переменных SCSS

При обработке Sass выведет текущее значение переменной.

$color: red;
.class-1 { color: $color; }  // red

$color: blue;
.class-2 { color: $color; }  // blue

Вы можете использовать флаг !default для определения переменных по умолчанию.

$color: red; 
$color: blue !default;       // only used if not defined earlier
.class-1 { color: $color; }  // red

Внутри функции переменные миксины и селекторы являются локальными.

$color: red; // global  

@mixin color { 
    $color: blue; // local
    color: $color
}

.class-1 { color: $color;  } // red  (global)
.class-2 { @include color; } // blue (local)


.class-3 { 
    $color: green;  // local
    color: $color;  // green (local)
}
.class-4 { 
    color: $color;  // red (global)
}

Вы можете использовать флаг !global для глобализации переменных.

$color: red; // global  
@mixin color { 
    $color: blue !global; // global
    color: $color
}

//  as we are including color after printing class-1 the color is still red
.class-1 { color: $color;  } // red   
.class-2 { @include color; } // blue

//  at this point the include in class-2 changed the color variable to blue  
.class-3 { color: $color;  } // blue  
person Jakob E    schedule 21.02.2017

я думаю, вам следует изменить название цвета, например light-gray: #e1e1e1; и dark-gray: #999;. это поможет решить вашу проблему.

person Darshak Shekhda    schedule 26.09.2014
comment
Я знаю, что это можно сделать, но вопрос в другом. Я не хочу решения. Мне интересно узнать, как sass обрабатывает переменные. - person Alpesh Prajapati; 26.09.2014
comment
Эй, эта ссылка в разделе обработки переменных помогает понять объявление переменных. В нем говорится, что Sass имеет переменный приоритет локальной области видимости над глобальной. Спасибо Даршак - person Alpesh Prajapati; 26.09.2014

Вы должны сохранять уникальные имена переменных, чтобы уменьшить количество конфликтов.

пытаться:

$gray : #999 !important;
person Fergoso    schedule 26.09.2014
comment
Использование !important всегда должно быть абсолютно ПОСЛЕДНИМ, а не первым средством. - person Lukasz Muzyka; 26.09.2014
comment
@Fergoso Я не прошу решения. Речь идет о том, как sass обрабатывает переменные. - person Alpesh Prajapati; 26.09.2014