Compilation moins agressive avec CSS3 calc


336

Les compilateurs Less que j'utilise ( OrangeBits et dotless 1.3.0.5 ) traduisent agressivement

body { width: calc(100% - 250px - 1.5em); }

dans

body { width: calc(-151.5%); }

Ce qui n'est évidemment pas souhaité. Je me demande s'il existe un moyen de signaler au compilateur Less d'ignorer essentiellement l'attribut pendant la compilation. J'ai parcouru la documentation de Less et la documentation des deux compilateurs, et je n'ai rien trouvé.

Est-ce que le compilateur Less ou Less prend en charge cela?

Sinon, existe-t-il un extenseur CSS qui le fait?


9
Êtes-vous sûr de ne pas vouloir un compilateur moins agressif?
fiatjaf

Je suis très sûr aussi de vouloir que le compilateur soit plus agressif! (la double négation dans le commentaire précédent m'a embrouillé;)) (donc mon vote aussi pour la fonctionnalité intéressante ci-dessous)
Andreas Dietrich

Réponses:


530

Less n'évalue plus l'expression à l'intérieur calcpar défaut depuis v3.00.


Réponse originale ( Less v1.x...2.x):

Faites ceci:

body { width: calc(~"100% - 250px - 1.5em"); }

Dans Less 1.4.0, nous aurons une strictMathsoption qui requiert que tous les calculs Less soient entre parenthèses, donc calccela fonctionnera "prêt à l'emploi". C'est une option car c'est un changement majeur. Les premières bêtas de 1.4.0 avaient cette option activée par défaut. La version finale le désactive par défaut.


2
Notez que si vous compilez moins avec la récréation de Twitter, il ignore cet échappement . Au moins au moment de la rédaction de ce commentaire.
Attila Fulop

1
J'ai juste essayé calc(100% - 50px)dans less.css 1.4.0 et le résultat était calc(50%). L' ~"..."astuce impressionnante continue de fonctionner, mais je suis confus par la déclaration " prête à l'emploi", ce qui me fait penser que ce qui précède fonctionnerait. Luke, comment le support du calcchangement dans Less 1.4.0? Merci!
Brian M. Hunt

2
La question est pourquoi less.js a-t-il essayé de calculer cela en premier lieu? Il devrait lancer une erreur pour "100% - 250px" car il ne peut pas calculer une réponse sensée.
mpen

72
Pour les futurs lecteurs, vous pouvez également échapper uniquement à l'opérateur, ce qui vous permet également d'utiliser des variables. Exemple:calc(@somePercent ~"-" @someLength)
0b10011

10
Au lieu de moins mal calculer cela ou de lancer une erreur, pourquoi ne peut-il pas réaliser ce que l'utilisateur essaie de faire et le laisser tranquille? De toute évidence, un pourcentage et une valeur de pixel ne peuvent pas être calculés ensemble en moins.
dfmiller

37

Un cas d'utilisation très courant de calc est de prendre une largeur de 100% et d'ajouter une marge autour de l'élément.

On peut le faire avec:

@someMarginVariable = 15px;

margin: @someMarginVariable;
width: calc(~"100% - "@someMarginVariable*2);
width: -moz-calc(~"100% - "@someMarginVariable*2);
width: -webkit-calc(~"100% - "@someMarginVariable*2);


28

Il existe plusieurs options d'échappement avec le même résultat:

body { width: ~"calc(100% - 250px - 1.5em)"; }
body { width: calc(~"100% - 250px - 1.5em"); }
body { width: calc(100% ~"-" 250px ~"-" 1.5em); }

9

Il y a une façon plus ordonnée d'inclure des variables à l'intérieur du calcul échappé, comme expliqué dans cet article: La fonction CSS3 calc () ne fonctionne pas avec Less # 974

@variable: 2em;

body{ width: calc(~"100% - @{variable} * 2");}

En utilisant les accolades, vous n'avez pas besoin de fermer et de rouvrir les guillemets qui s'échappent.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.