145 votes

Calculer un pourcentage avec SCSS/SASS

Je veux définir une largeur en pourcentage en scss via un calcul, mais cela me donne des erreurs...

CSS non valide après "...-width: (4/12)%": expression attendue (par exemple 1px, gras), était ";"

Je veux faire quelque chose comme

$ma_largeur: (4/12)%;

div{
largeur: $ma_largeur;
}

comment ajouter le signe % là-dedans?

Même question avec px et em

1 votes

Il n'y a rien à manipuler. Je veux simplement ajouter l'unité du nombre au calcul. Comme (400/20)px. Comment puis-je avoir un nombre et px/em/% en scss ? De cette façon, je pourrais avoir des "variables globales" que je peux changer une fois

0 votes

Essayez d'ajouter une parenthèse comme $my_width: ((4/12)%);

0 votes

Désolé, je n'ai pas eu l'occasion de vérifier et de donner une autre tentative pour le faire.. {$my_width: (4/12)%;}

253voto

Tomas Points 1235

Avez-vous essayé la fonction percentage ?

$my_width: percentage(4/12);
div{
    width: $my_width;
}

MISE À JOUR

Cette fonction a été mise à jour depuis la version 1.33.0 et maintenant c'est une méthode correcte pour le faire :

@use "sass:math";

div {
    width: math.percentage(math.div(4,12));
}

Source: https://sass-lang.com/documentation/modules/math#percentage

1 votes

Y a-t-il une fonction similaire pour les px et les em ?

1 votes

Je ne suis pas sûr, mais dans la section source de la documentation, vous pouvez voir la logique sous-jacente : Sass::Script::Number.new(value.value * 100, ['%']), donc je pense que si elles n'existent pas, vous pourriez le faire directement, ou créer vous-même des fonctions d'enveloppe.

4 votes

@NickGinanto pour px vous pouvez simplement ajouter +px à la fin de la ligne, par exemple width: ($foo + $bar) +px

34voto

rlejnieks Points 113

Une autre façon :

$my_width: 4/12 * 100%;

div {
    width: $my_width; // 33.33333%
}

Sass va produire la valeur en %.

13 votes

Notez que j'ai dû utiliser 100 / 6 * 1% pour que cela fonctionne pour moi, sinon j'obtenais 1666,67%.

0 votes

Où puis-je trouver une documentation sur ce que * 100% fait réellement?

6voto

J'ai pu le faire fonctionner de cette manière:

div{
   width: (4/12)* 1%;
   }

De cette façon, vous n'avez pas besoin d'utiliser de fonction spéciale.

3voto

Rashad Yusifov Points 11

Si vous voulez utiliser une boucle, peut-être que cette solution fonctionnera

@for $i from 1 through 12 {
    .col-#{$i} {
        width: #{calc(100 * $i / 12) + '%'};
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X