33 votes

Existe-t-il un moyen d'avoir pi dans un calcul CSS ?

J'ai une animation de cercle SVG pour une barre de progression où la stroke-dashoffset est animé à partir de 0,radius à radius,0 (de 0% à 100%).

L'équation de la longueur de la circonférence d'un cercle est la suivante pi * d . Existe-t-il un moyen d'utiliser un fichier CSS calc où il peut utiliser une valeur de pi, plutôt qu'une simple valeur arrondie (comme 3,14) ?

1 votes

Comme Ouroborus l'a mentionné, les navigateurs arrondissent la plupart du temps les nombres à seulement 2 chiffres après la virgule. Il n'y a donc pas beaucoup d'intérêt à utiliser une valeur autre que 3.14 mais si vous n'êtes pas à l'aise avec cela, pourquoi ne pas utiliser simplement 22/7 et laisser le navigateur décider de la façon dont il veut traiter ?

0 votes

Peut-être serait-il préférable d'utiliser JavaScript pour cette tâche d'animation : var intRadius = Math.floor(objCircle.offsetWidth / 2)

0 votes

"L'équation pour la longueur du rayon d'un cercle est pi * d." - Je suppose que vous voulez dire circonférence

31voto

Roberrrt Points 5527

Les variables PI n'existent pas en CSS, malheureusement.

Cependant ..

Vous peut faire utilisation des variables CSS pour lui attribuer un numéro, L'inconvénient, c'est qu'il a un un support de navigateur vraiment, vraiment mauvais. Eh bien, plus maintenant.

Cela fonctionnerait comme suit :

:root {
  --PI: 3.14159265358979; // enter the amount of digits you wish to use
}

.circle {
    width: calc(100 * var(--PI));
}

La meilleure solution serait d'utiliser un préprocesseur tel que SASS ou Less pour assigner la variable PI, cela ressemblerait à l'exemple suivant dans SASS :

$pi: 3.14159265358979 // amount of digits you wish to use

.circle {
    width: calc(100 * ${pi});
}

EDIT : Comme mentionné dans les commentaires, certains navigateurs (Safari + IE) arrondissent à 2 décimales, alors que Chrome et Firefox peuvent arrondir à (au moins) 4 décimales.

7 votes

C'est ce que j'ai mentionné, et la raison principale pour laquelle j'ai ajouté l'option SASS ou Less.

1 votes

Une autre option est un transpilateur CSS (qui convertit les CSS les plus récents en CSS plus anciens) comme cssnext . Assurez-vous simplement que le "CSS plus récent" est fondé sur des normes, ou du moins que les navigateurs plus récents l'adopteront, à moins que vous ne soyez prêt à le modifier tous les deux mois.

10voto

Ouroborus Points 6000

Non.

Considérez que la valeur sera de toute façon arrondie car les ordinateurs ne peuvent pas réaliser tous les nombres. Utilisez simplement une longue approximation pour pi :

3.141592653589793

10 votes

Une fois que l'on est allé aussi loin, on peut tout aussi bien ajouter un chiffre de plus : il s'agit de l'hypothèse raisonnable de la représentation IEEE 754 pour les flottants, 3.141592653589793 est aussi bonne que possible, en ce sens qu'elle arrondit à la valeur binaire64 IEEE 754 la plus proche de la valeur réelle de . La valeur que vous donnez sera décalée d'environ 7,3 ulps (unités en dernière position).

0 votes

Comme le commentaire est très populaire, j'ai pris la liberté de modifier la réponse en ajoutant la 15ème décimale, comme suggéré par @MarkDickinson.

3voto

AlecTMH Points 1522

Vous pouvez utiliser quelque chose d'approximatif, selon la précision dont vous avez besoin :

22/7 = 3.14

377/120 = 3,142

355/113 = 3,141592

1voto

Patryk Wlaź Points 125

Vous avez un accès à la variable PI dans sass aujourd'hui. source

@use 'sass:math';

$d: 10;
$yourStuff: math.$pi * $d;

Cependant, comme d'autres l'ont mentionné, il s'agirait toujours d'une valeur d'IP approximative, et non d'un IP réel. Mais c'est une bonne approximation :

@debug math.$pi; // 3.1415926536

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