与Sass对比
Less 和 Sass 都是流行的 CSS 预处理器,它们各自有不同的优点。
相对于 Sass,Less 有以下几个优点:
- 更简单的语法:Less 的语法相对简单和直观,这使得学习曲线较平缓。对于新手开发者,Less 可能更容易上手。
- 动态变量:Less 允许在定义变量时使用动态计算,这意味着你可以进行基本的数学运算来生成变量值,而 Sass 在这方面有一些限制。
- 函数库:Less 提供了一些实用的函数,如颜色操作函数,这些函数在使用时比较简单直接,通常不需要额外的插件。
- 简单的继承机制:Less 提供了一个简化的继承机制,允许你通过
extend 来复用样式,相对比较直接。
- 内置的 Mixins:Less 的 Mixins 使用较为简单,不需要使用
@include 或 @extend 等复杂语法。直接使用 . 前缀的 Mixins 可以让代码更简洁。
当然,选择 Less 或 Sass 最终还是取决于你的具体需求和个人喜好。
Sass 也有它独特的优势,比如更多的功能、更强大的模块化系统和更广泛的社区支持。
对于我来说
两者都满足开发需求,Less使用起来更便捷,我选择Less。
另外iView和Ant Design Vue也都是使用的Less。
Element Plus使用的是Sass。
uni-app使用的是Sass。
测试的时候可以使用VSCode安装一个Easy LESS插件
只要我们的Less文件保存就会在同一目录生成对应的css文件,不用的时候禁用就行。
导入
导入
1
| @import "blue-theme.less";
|
变量
基本
1 2 3 4 5 6 7
| @nav-color: #F90;
nav { @width: 100px; width: @width; color: @nav-color; }
|
编译后
1 2 3 4
| nav { width: 100px; color: #F90; }
|
字符串中变量
示例1
1 2 3 4 5
| // Variables @themes: "../../src/themes";
// Usage @import "@{themes}/tidal-wave.less";
|
示例2
1 2 3 4 5 6 7 8
| // Variables @images: "../img";
// Usage body { color: #444; background: url("@{images}/white-sand.png"); }
|
嵌套
1 2 3 4 5 6 7
| #content { article { h1 { color: #333 } p { margin-bottom: 1.4em } } aside { background-color: #EEE } }
|
编译后
1 2 3 4 5 6 7 8 9
| #content article h1 { color: #333; } #content article p { margin-bottom: 1.4em; } #content aside { background-color: #EEE; }
|
选择器
父选择器的标识符&
1 2 3 4
| article a { color: blue; &:hover { color: red } }
|
编译后
1 2 3 4 5 6
| article a { color: blue; } article a:hover { color: red; }
|
混合器
无参mixin
示例1
1 2 3 4 5 6 7 8 9
| .base { color: red; font-size: 14px; }
.button { .base(); padding: 10px; }
|
编译后
1 2 3 4 5 6 7 8 9
| .base { color: red; font-size: 14px; } .button { color: red; font-size: 14px; padding: 10px; }
|
无参 mixin 的样式括号可以省略。
1 2 3 4 5 6 7 8 9
| .base { color: red; font-size: 14px; }
.button { .base; // 无需使用圆括号 padding: 10px; }
|
如果混合器不输出到CSS中
1 2 3 4 5 6 7 8 9
| .base() { color: red; font-size: 14px; }
.button { .base; // 无需使用圆括号 padding: 10px; }
|
混合器传参
基本
1 2 3 4 5 6 7 8 9
| .border-radius(@radius) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius; }
.button { .border-radius(6px); }
|
默认值
1 2 3 4 5 6 7 8 9
| .border-radius(@radius: 5px) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius; }
.button { .border-radius(); }
|
当然也可以省去括号
1 2 3 4 5 6 7 8 9
| .border-radius(@radius: 5px) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius; }
.button { .border-radius; }
|
多态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| .mixin(@color) { color: @color; }
.mixin(@color, @padding: 2) { background-color: @color; padding: @padding; }
.mixin(@color, @padding, @margin: 2) { color: @color; padding: @padding; margin: @margin @margin @margin @margin; }
.some .selector div { .mixin(#008000); }
|
结果
1 2 3 4 5
| .some .selector div { color: #008000; background-color: #008000; padding: 2; }
|
多个满足条件会取后者。
继承
使用&:extend(选择器)进行样式继承。
相比于混合器,继承生成的CSS会更小。
基本示例
1 2 3 4 5 6 7 8 9
| .z_base { color: red; font-size: 14px; }
.z_button { &:extend(.z_base); padding: 10px; }
|
生成的样式
1 2 3 4 5 6 7 8
| .z_base, .z_button { color: red; font-size: 14px; } .z_button { padding: 10px; }
|
继承范围
只继承指定样式
less
1 2 3 4 5 6 7 8 9 10 11
| .a { font-size: 18px;
.son { background-color: aqua; } }
.c { &:extend(.a); }
|
生成
1 2 3 4 5 6 7
| .a, .c { font-size: 18px; } .a .son { background-color: aqua; }
|
继承指定及其子样式
less
1 2 3 4 5 6 7 8 9 10 11
| .a { font-size: 18px;
.son { background-color: aqua; } }
.c { &:extend(.a all); }
|
生成
1 2 3 4 5 6 7 8
| .a, .c { font-size: 18px; } .a .son, .c .son { background-color: aqua; }
|
内置函数
https://less.bootcss.com/functions/#less-%E5%87%BD%E6%95%B0
颜色加深
1 2 3 4 5 6 7 8 9 10 11 12
| // Variables @link-color: #FA7E31; // sea blue @link-color-hover: darken(@link-color, 10%);
// Usage a { color: @link-color; }
a:hover { color: @link-color-hover; }
|
生成的样式
1 2 3 4 5 6
| a { color: #FA7E31; } a:hover { color: #f26006; }
|
颜色变浅
1 2 3 4 5 6 7 8 9 10 11 12
| // Variables @link-color: #FA7E31; // sea blue @link-color-hover: lighten(@link-color, 10%);
// Usage a { color: @link-color; }
a:hover { color: @link-color-hover; }
|
生成的样式
1 2 3 4 5 6
| a { color: #FA7E31; } a:hover { color: #fb9d63; }
|
运算符
基本示例
1 2 3 4 5 6 7
| a { font-size: 16px + 2; }
a:hover { font-size: 16px * 1.2; }
|
生成后的
1 2 3 4 5 6
| a { font-size: 18px; } a:hover { font-size: 19.2px; }
|
主要运算符
LESS 支持多种运算符,用于在样式表中进行计算和动态生成值。
以下是 LESS 中支持的主要运算符:
加法(+):
1 2 3 4 5
| @width: 100px; @padding: 20px; .box { width: @width + @padding; }
|
减法(-):
1 2 3 4 5
| @width: 100px; @margin: 10px; .box { width: @width - @margin; }
|
乘法(*):
1 2 3 4 5
| @width: 100px; @scale: 2; .box { width: @width * @scale; }
|
除法(/):
1 2 3 4 5
| @width: 200px; @parts: 4; .box { width: @width / @parts; }
|
取余(%):
1 2 3 4 5
| @width: 100px; @modulus: 3; .box { width: @width % @modulus; }
|
比较运算符:
- 等于(
=):@a = @b
- 不等于(
!=):@a != @b
- 大于(
>):@a > @b
- 小于(
<):@a < @b
- 大于等于(
>=):@a >= @b
- 小于等于(
<=):@a <= @b
这些比较运算符可以在条件语句中使用,例如:
1 2 3 4
| @color: red; .box { color: if(@color = red, blue, green); }
|
逻辑运算符:
- 与(
and):@a and @b
- 或(
or):@a or @b
- 非(
not):not @a
示例:
1 2 3 4 5
| @isActive: true; @isVisible: false; .box { display: if(@isActive and not @isVisible, block, none); }
|
字符串连接:
1 2 3 4 5
| @prefix: "prefix-"; @suffix: "-suffix"; .box { content: @prefix + "content" + @suffix; }
|
这些运算符可以帮助你在 LESS 中实现更复杂的样式计算和动态生成。