与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文件,不用的时候禁用就行。
导入
导入
代码语言:javascript复制@import "blue-theme.less";
变量
基本
代码语言:javascript复制@nav-color: #F90;
nav {
@width: 100px;
width: @width;
color: @nav-color;
}
编译后
代码语言:javascript复制nav {
width: 100px;
color: #F90;
}
字符串中变量
示例1
代码语言:javascript复制// Variables
@themes: "../../src/themes";
// Usage
@import "@{themes}/tidal-wave.less";
示例2
代码语言:javascript复制// Variables
@images: "../img";
// Usage
body {
color: #444;
background: url("@{images}/white-sand.png");
}
嵌套
代码语言:javascript复制#content {
article {
h1 { color: #333 }
p { margin-bottom: 1.4em }
}
aside { background-color: #EEE }
}
编译后
代码语言:javascript复制#content article h1 {
color: #333;
}
#content article p {
margin-bottom: 1.4em;
}
#content aside {
background-color: #EEE;
}
选择器
父选择器的标识符&
代码语言:javascript复制article a {
color: blue;
&:hover { color: red }
}
编译后
代码语言:javascript复制article a {
color: blue;
}
article a:hover {
color: red;
}
混合器
无参mixin
示例1
代码语言:javascript复制.base {
color: red;
font-size: 14px;
}
.button {
.base();
padding: 10px;
}
编译后
代码语言:javascript复制.base {
color: red;
font-size: 14px;
}
.button {
color: red;
font-size: 14px;
padding: 10px;
}
无参 mixin 的样式括号可以省略。
代码语言:javascript复制.base {
color: red;
font-size: 14px;
}
.button {
.base; // 无需使用圆括号
padding: 10px;
}
如果混合器不输出到CSS中
代码语言:javascript复制.base() {
color: red;
font-size: 14px;
}
.button {
.base; // 无需使用圆括号
padding: 10px;
}
混合器传参
基本
代码语言:javascript复制.border-radius(@radius) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}
.button {
.border-radius(6px);
}
默认值
代码语言:javascript复制.border-radius(@radius: 5px) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}
.button {
.border-radius();
}
当然也可以省去括号
代码语言:javascript复制.border-radius(@radius: 5px) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}
.button {
.border-radius;
}
多态
代码语言:javascript复制.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);
}
结果
代码语言:javascript复制.some .selector div {
color: #008000;
background-color: #008000;
padding: 2;
}
多个满足条件会取后者。
继承
使用&:extend(选择器)
进行样式继承。
相比于混合器,继承生成的CSS会更小。
基本示例
代码语言:javascript复制.z_base {
color: red;
font-size: 14px;
}
.z_button {
&:extend(.z_base);
padding: 10px;
}
生成的样式
代码语言:javascript复制.z_base,
.z_button {
color: red;
font-size: 14px;
}
.z_button {
padding: 10px;
}
继承范围
只继承指定样式
less
代码语言:javascript复制.a {
font-size: 18px;
.son {
background-color: aqua;
}
}
.c {
&:extend(.a);
}
生成
代码语言:javascript复制.a,
.c {
font-size: 18px;
}
.a .son {
background-color: aqua;
}
继承指定及其子样式
less
代码语言:javascript复制.a {
font-size: 18px;
.son {
background-color: aqua;
}
}
.c {
&:extend(.a all);
}
生成
代码语言:javascript复制.a,
.c {
font-size: 18px;
}
.a .son,
.c .son {
background-color: aqua;
}
内置函数
https://less.bootcss.com/functions/#less-函数
颜色加深
代码语言:javascript复制// Variables
@link-color: #FA7E31; // sea blue
@link-color-hover: darken(@link-color, 10%);
// Usage
a {
color: @link-color;
}
a:hover {
color: @link-color-hover;
}
生成的样式
代码语言:javascript复制a {
color: #FA7E31;
}
a:hover {
color: #f26006;
}
颜色变浅
代码语言:javascript复制// Variables
@link-color: #FA7E31; // sea blue
@link-color-hover: lighten(@link-color, 10%);
// Usage
a {
color: @link-color;
}
a:hover {
color: @link-color-hover;
}
生成的样式
代码语言:javascript复制a {
color: #FA7E31;
}
a:hover {
color: #fb9d63;
}
运算符
基本示例
代码语言:javascript复制a {
font-size: 16px 2;
}
a:hover {
font-size: 16px * 1.2;
}
生成后的
代码语言:javascript复制a {
font-size: 18px;
}
a:hover {
font-size: 19.2px;
}
主要运算符
LESS 支持多种运算符,用于在样式表中进行计算和动态生成值。
以下是 LESS 中支持的主要运算符:
加法(
):
@width: 100px;
@padding: 20px;
.box {
width: @width @padding; // 120px
}
减法(-
):
@width: 100px;
@margin: 10px;
.box {
width: @width - @margin; // 90px
}
乘法(*
):
@width: 100px;
@scale: 2;
.box {
width: @width * @scale; // 200px
}
除法(/
):
@width: 200px;
@parts: 4;
.box {
width: @width / @parts; // 50px
}
取余(%
):
@width: 100px;
@modulus: 3;
.box {
width: @width % @modulus; // 1px
}
比较运算符:
- 等于(
=
):@a = @b
- 不等于(
!=
):@a != @b
- 大于(
>
):@a > @b
- 小于(
<
):@a < @b
- 大于等于(
>=
):@a >= @b
- 小于等于(
<=
):@a <= @b
这些比较运算符可以在条件语句中使用,例如:
代码语言:javascript复制@color: red;
.box {
color: if(@color = red, blue, green);
}
逻辑运算符:
- 与(
and
):@a and @b
- 或(
or
):@a or @b
- 非(
not
):not @a
示例:
代码语言:javascript复制@isActive: true;
@isVisible: false;
.box {
display: if(@isActive and not @isVisible, block, none);
}
字符串连接:
代码语言:javascript复制@prefix: "prefix-";
@suffix: "-suffix";
.box {
content: @prefix "content" @suffix; // "prefix-content-suffix"
}
这些运算符可以帮助你在 LESS 中实现更复杂的样式计算和动态生成。