J'utilise LESSCSS . J'essaie de créer une méthode d'opacité:
.opacity (@opacity)
{
opacity: @opacity;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(opacity=(@opacity * 100))";
filter: alpha(opacity = (@opacity * 100));
}
Donc, si je l’appelle en utilisant:
h1 {
.opacity(.5);
}
Je veux le sortir:
h1 {
opacity: .5;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(opacity=50)";
filter: alpha(opacity = 50);
}
Mais au lieu de cela, MOINS jette l'erreur:
Expected '}' on line 30 in file '/Content/styles/style.less.css':
[29]: -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(opacity=(@opacity * 100))";
[30]: filter: alpha(opacity = (@opacity * 100));
----^
[31]: }
Qu'est-ce que je fais mal?
Dans dotless, faites ceci. (Je ne recommanderais PAS les balises de script - elles sont laides, spécifiques à une langue et non prises en charge par dotless).
.opacity (@opacity) {
@opacityPercentage: @opacity * 100;
opacity: @opacity;
-ms-filter: ~"progid:DXImageTransform.Microsoft.Alpha(opacity=(@{opacityPercentage}))";
filter: ~"alpha(opacity = (@{opacityPercentage}))";
}
dans 1.2.3 dotless (quand il est publié dans quelques semaines, ou la tête de github, vous devriez pouvoir le faire ...
.opacity (@opacity) {
@opacityPercentage: @opacity * 100;
opacity: @opacity;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=(@opacityPercentage));
filter: alpha(opacity = (@opacityPercentage));
}
et re: le commentaire de Mathletics, dotless n’est pas "le pire compilateur" .. Il correspond à moins.js jusqu’à la 1.1.5, deviendra bientôt 1.2.2 et la plupart des 600 bogues contre less.js sont corrigés dans dotless. Vous avez peut-être utilisé dotless il y a plus de 8 mois, mais les choses changent et les bugs sont corrigés ... dotless prend également mieux en charge les commentaires et la portée des variables.
Vous devez préfixer la chaîne avec ~
, comme suit:
-ms-filter: ~"progid:DXImageTransform.Microsoft.Alpha(opacity=50)";
D'après les documents: Escaping
UPDATE: vous devez envelopper les noms de variables entre accolades.
.opacity (@opacity) {
opacity: @opacity;
-ms-filter: ~`"progid:DXImageTransform.Microsoft.Alpha(opacity=(" + "@{opacity}" * 100 + "))"`;
filter: ~`"alpha(opacity = (" + "@{opacity}" * 100 + "))"`;
}
Voici ce qui se passe: après le préfixe, encapsulez l'expression entière dans des backticks afin qu'elle soit évaluée en tant que JavaScript. Ensuite, vous pouvez ajouter le résultat de la multiplication au reste de la chaîne. vous devez également envelopper la variable LESS entre guillemets et accolades pour que le compilateur puisse l'évaluer avant la multiplication.
C'était une bonne question. Je ne savais pas que MOINS pourrait faire cela.
Cela pourrait aider quelqu'un :)
.opacity(@a : 0.8)
{
zoom:1;
opacity: @a;
-moz-opacity: @a;
-ms-filter: ~"progid:DXImageTransform.Microsoft.Alpha(opacity=(@{a} * 100))";
filter:~"alpha(opacity= @{a} * 100)";
}
Il y a une solution intéressante trouvée dans Internet - MOINS classe CSS pour l'opacité entre navigateurs :
.opacity(@opacity) {
@ieOpacity: @opacity * 100;
-ms-filter: ~"progid:DXImageTransform.Microsoft.Alpha(Opacity=@{ieOpacity})"; // IE 8
filter: ~"alpha(opacity=@{ieOpacity})"; // IE 5-7
opacity: @opacity;
}
naaa .. Celui-ci a fonctionné pour moi:
.opacity(@a:0.5){
zoom:1;
opacity: @a;
-moz-opacity: @a;
@iea : @a*100;
-ms-filter: ~"progid:DXImageTransform.Microsoft.Alpha(opacity=(@{iea}))";
filter:~"alpha(opacity= @{iea})";
}