Sass valeur de variable négative?

107

J'ai quelques sélecteurs scss où j'utilise le même montant positif et négatif, comme dans:

padding: 0 15px 15px;
margin: 0 -15px 20px -15px;

Je préférerais utiliser une variable pour tous les montants de 15px, mais cela ne fonctionne pas:

$pad: 15px;
padding: 0 $pad $pad;
margin: 0 -$pad 20px -$pad;

Les montants de marge sont convertis en nombres positifs. Est-ce que je manque quelque chose?

Steve
la source

Réponses:

215

Essayez-le comme ça

margin: 0 (-$pad) 20px (-$pad);
Zoltan Toth
la source
1
Automatiquement essayé cette approche - semble ne pas fonctionner lors de l'utilisation de la fonction calc. Edit: On dirait que vous n'avez pas besoin d'utiliser de parenthèses lors de l'utilisation de calc, mais vous devez interpoler stackoverflow.com/questions/17982111/...
Kevin
2

J'ajoute mes deux centimes après avoir examiné les deux réponses précédentes, mais après avoir lu ceci (c'est moi qui souligne):

Vous devriez surtout éviter d'utiliser l'interpolation comme#{$number}px . Cela ne crée pas vraiment de nombre! Il crée une chaîne sans guillemets qui ressemble à un nombre, mais ne fonctionnera avec aucune opération ou fonction de nombre. Essayez de nettoyer votre unité mathématique pour qu'elle $numberait déjà l'unité px, ou écrivez $number * 1px.

La source

Par conséquent, je pense que la manière correcte serait la suivante, ce qui préserve les capacités mathématiques de SASS / SCSS:

$pad: 15px;
padding: 0 $pad $pad;
margin: 0 $pad*-1 20px $pad*-1;
EvilDr
la source
À première vue, cela semble être difficile (votre réponse), mais au deuxième coup d'œil, c'est vraiment la meilleure réponse. Après tout, si la variable devient une variable négative, la réponse devient positive! $ pad: -2rem; ... marge: 0 - # {$ pad}; // devient margin: 0 --2rem; marge: 0 $ pad * -1; // devient margin: 0 2rem;
Fnordius