Less常用语法

2024-08-03 09:29:46 浏览数 (2)

与Sass对比

Less 和 Sass 都是流行的 CSS 预处理器,它们各自有不同的优点。

相对于 Sass,Less 有以下几个优点:

  1. 更简单的语法:Less 的语法相对简单和直观,这使得学习曲线较平缓。对于新手开发者,Less 可能更容易上手。
  2. 动态变量:Less 允许在定义变量时使用动态计算,这意味着你可以进行基本的数学运算来生成变量值,而 Sass 在这方面有一些限制。
  3. 函数库:Less 提供了一些实用的函数,如颜色操作函数,这些函数在使用时比较简单直接,通常不需要额外的插件。
  4. 简单的继承机制:Less 提供了一个简化的继承机制,允许你通过 extend 来复用样式,相对比较直接。
  5. 内置的 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 中支持的主要运算符:

加法(

代码语言:javascript复制
@width: 100px;
@padding: 20px;
.box {
  width: @width   @padding; // 120px
}

减法(-

代码语言:javascript复制
@width: 100px;
@margin: 10px;
.box {
  width: @width - @margin; // 90px
}

乘法(*

代码语言:javascript复制
@width: 100px;
@scale: 2;
.box {
  width: @width * @scale; // 200px
}

除法(/

代码语言:javascript复制
@width: 200px;
@parts: 4;
.box {
  width: @width / @parts; // 50px
}

取余(%

代码语言:javascript复制
@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 中实现更复杂的样式计算和动态生成。

0 人点赞