less是一种css的扩展,可以编译成css。将它定位为”工具”即可,最终 浏览器/app 识别的还是css
参考网站:
css3中calc在less编译时被计算的解决办法
目标:
1 2 3
| width: -moz-calc(100% - 10px); width: -webkit-calc(100% - 10px); width: calc(100% - 10px);
|
错误less
:
1 2 3 4 5 6 7 8 9 10
| .calcWidth(@width){ width:-moz-calc(@width); width:-webkit-calc(@width); width:calc(@width); }
div{ .calcWidth(100% - 10px); }
|
错误结果:
1 2 3
| width: -moz-calc(90%); width: -webkit-calc(90%); width: calc(90%);
|
原因:less
把这个当成运算式去执行了
正确less
:
1 2 3 4 5 6 7 8 9 10 11
| .calcWidth(@width){ width:-moz-calc(@width); width:-webkit-calc(@width); width:calc(@width); }
div{ .calcWidth(~"100% - 10px"); }
|
结果就是目标,验证通过
less写一个可复用的帧动画类型的 函数
目标:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| div { animation: blink 1.8s infinite; -webkit-animation: blink 1.8s infinite; -moz-animation: blink 1.8s infinite; -o-animation: blink 1.8s infinite; } //定义的动画还有-webkit-、-moz-、-o-、-ms-,此处为了省篇幅没有加 @keyframes blink { 0% { opacity: 0; } 10% { opacity: 0.1; } 20% { opacity: 0.2; } 30% { opacity: 0.3; } 40% { opacity: 0.4; } 50% { opacity: 0.5; } 60% { opacity: 0.6; } 70% { opacity: 0.7; } 80% { opacity: 0.8; } 90% { opacity: 0.9; } 100% { opacity: 1; } }
|
方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| .animation(...){ animation: @arguments; -webkit-animation: @arguments; -moz-animation: @arguments; -o-animation: @arguments; } .opacityLoop(@count) when (@count<=1){ @keysname:percentage(@count); @{keysname} { opacity: @count; } .opacityLoop((@count+0.1)); }
div { .animation(blink 1.8s infinite); } @-webkit-keyframes blink {.opacityLoop(0);} @-moz-keyframes blink {.opacityLoop(0);} @-o-keyframes blink {.opacityLoop(0);} @keyframes blink {.opacityLoop(0);}
|
经过验证,结果正确。
其实,上述的代码是否看起来还有点累赘,@keyframes
的定义没有用mixin
,但是less
没办法做到,而sass
可以像下面这样写:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| //支持多属性的0%和100% @mixin keyframes($name,$props,$starts,$ends){ @-webkit-keyframes #{$name} {@include frames($props,$starts,$ends);} @-moz-keyframes #{$name} {@include frames($props,$starts,$ends);} @-o-keyframes #{$name} {@include frames($props,$starts,$ends);} @keyframes #{$name} {@include frames($props,$starts,$ends);} } @mixin frames($props,$starts,$ends){ $length:length($props); 0% { @for $i from 1 through $length{ $prop:nth($props,$i); #{$prop}:nth($starts,$i); } } 100%{ @for $j from 1 through $length{ $prop:nth($props,$j); #{$prop}:nth($ends,$j); } } } //外部直接调用 @include keyframes(blink,background-color border-width,#f00 1px,#0f0 5px);
|
import导入的路径问题
我们通常会将公共的颜色和mixin提取出来,放在一个文件里。那么如何引入此文件呢?
默认:当前路径
1
| @import (keyword) "filename";
|
现在,我有一个demo1.less
需要引用base.less
,他们的路径如图:
使用相对路径:
1
| @import (keyword) "../../../furnace/less/base.less";
|
使用绝对路径:
1
| @import (keyword) "WebRoot\furnace\less\base.less";
|
ps:还可以直接从你的 node_modules 文件夹中加载 LESS 文件。
结语:不论是less
还是sass
,都只是个工具,不应该在这上面花费大量的精力来玩花它。附一张百度找的less
的思维导图,如下:
话说这思维导图不全,以后有时间自己做个。所谓的有时间,大概又是了了无期…