2013-06-17 15 views
5

Sto provando a creare una funzione che converta una dimensione in pixel in ems o rems. La funzione è la seguente:Sass @if true function not working function

@function px2em($pixels, $fontSize: 16, $rem: false) { 
    @if $rem == true { 
     $unit: 0rem; 
    } @else { 
     $unit: 0em; 
    } 
    $ratio: 1/$fontSize; 
    @return ($pixels * $ratio) + $unit; 
} 

Quando compilo questo ottengo il seguente errore:

error style.scss (Line 36 of _functions.scss: Undefined variable: "$unit".) 

Che cosa sto facendo male qui?

risposta

8

SASS dispone di block scope, le variabili definite in un blocco saranno disponibili solo in tale ambito. Così si desidera utilizzare $ unità al di fuori del blocco if-else, così si dovrebbe dichiarare in questo modo:

@function px2em($pixels, $fontSize: 16, $rem: false) { 
    $unit: 0em; 

    @if $rem == true { 
     $unit: 0rem; 
    } 
    ... 
} 
+0

quindi potete dichiarare una variabile all'interno di una dichiarazione @If? – McShaman

+0

@ McChaman Ho aggiornato la mia risposta, dai un'occhiata. Puoi effettivamente dichiarare le variabili in se block, ma quella variabile sarà disponibile solo in quel blocco. C'è un'altra domanda SO su questo argomento: http://stackoverflow.com/questions/15371332/sass-ignores-variables-defined-in-if-statement –