Предимство на декларацията на променлива 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