Less学习笔记 --- 给 CSS 加点料

Less是一种CSS预处理器,引入了变量、混合、嵌套等高级特性,简化CSS维护并增强其可扩展性。本文深入讲解Less的基本概念,如变量定义与使用、混合与嵌套规则、算术运算及内置函数,帮助读者快速掌握Less语言。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

Less(Leaner Style Sheets 的缩写) 是一门向后兼容的 CSS扩展语言。
Less 增加了变量、Mixin、函数等特性,使 CSS 更易维护和扩展
Less 既可以在 客户端 上运行 ,也可以借助Node.js在服务端运行。

变量(Variables)

LESS 中的变量为完全的 ‘常量’ ,所以只能定义一次
使用 “@” 来申明一个变量:@color:red;

1、作为普通属性值只来使用:直接使用@color

//less
@nice-blue: #5B83AD;
@light-blue: @nice-blue + #111;
#header { color: @light-blue; }

编译为:

//css
#header { color: #6c94be; }

2、作为选择器和属性名:@{selector的值}的形式

//less
@selector:#wrap;
@w:width;
@{selector}{
    @{w}:100px;
    height: 300px;
    border: 1px solid;
}

编译为:

//css
#wrap{
    width:100px;
    height:300px;
    border:1px solid;
}

3、作为URL:@{url}

@images: "../img";

body {
  color: #444;
  background: url("@{images}/white-sand.png");
}

4、可变变量 (Variable Variables)
在less中,可以使用另一个变量定义变量的名称。

@primary:  green;
@secondary: blue;

.section {
  @color: primary;

  .element {
    color: @@color;
  }
}

编译后

.section .element {
  color: green;
}

5、变量延迟加载

@var: 0;
.class {
    @var: 1;
    .brass {
        @var: 2;
        three: @var;  //3
        @var: 3;
    }
    one: @var;  //1
}

编译后:

.class {
  one: 1;
}
.class .brass {
  three: 3;
}

6、属性作为变量

#test{
    color:red;
    .inner{
        background-color: $color;
    }
    color:yellow;
}

编译后:

#test {
  color: red;
  color: yellow;
}
#test .inner {
  background-color: yellow;
}

混合(Mixins)

1、混合使用类选择器和ID选择器

.a, #b {
  color: red;
}
.mixin-class {
  .a();
}
.mixin-id {
  #b();
}

编译后:

.a, #b {
  color: red;
}
.mixin-class {
  color: red;
}
.mixin-id {
  color: red;
}

2、如果您希望创建一个mixin,但不希望该mixin出现在CSS输出中,请在mixin定义后面加上括号。

.my-mixin {
  color: black;
}
.my-other-mixin() {
  background: white;
}
.class {
  .my-mixin();
  .my-other-mixin();
}

编译后:

.my-mixin {
  color: black;
}
.class {
  color: black;
  background: white;
}

Learn More About Mixins.

嵌套(Nesting)

less提供了使用嵌套代替层叠或与层叠结合使用的能力。

#header {
  color: black;
  .navigation {
    font-size: 12px;
  }
  .logo {
    width: 300px;
  }
}

结果代码更加简洁,并且模仿了HTML的结构。

也可以使用此方法将伪选择器与混合函数捆绑在一起。(&表示当前选择器父级):

.clearfix {
  display: block;
  zoom: 1;

  &:after {
    content: " ";
    display: block;
    font-size: 0;
    height: 0;
    clear: both;
    visibility: hidden;
  }
}

运算(Operations)

// numbers are converted into the same units
@conversion-1: 5cm + 10mm; // result is 6cm
@conversion-2: 2 - 3cm - 5mm; // result is -1.5cm

// conversion is impossible
@incompatible-units: 2 + 5px - 3cm; // result is 4px

// example with variables
@base: 5%;
@filler: @base * 2; // result is 10%
@other: @base + @filler; // result is 15%

乘法和除法不转换数字。它在大多数情况下都没有意义——一个长度乘以一个长度就得到一个区域,而CSS不支持指定区域。less将按数字的原样操作,并将显式指定的单位类型分配给结果。

@base: 2cm * 3mm; // result is 6cm

您还可以对颜色进行算术运算:

@color: #224488 / 2; //results in #112244
background-color: #112244 + #111; // result is #223355

函数(Functions)

Less 内置了多种函数用于转换颜色、处理字符串、算术运算等。这些函数在函数手册中有详细介绍。

函数的用法非常简单。下面这个例子将介绍如何利用 percentage 函数将 0.5 转换为 50%,将颜色饱和度增加 5%,以及颜色亮度降低 25% 并且色相值增加 8 等用法:

@base: #f04615;
@width: 0.5;

.class {
  width: percentage(@width); // returns `50%`
  color: saturate(@base, 5%);
  background-color: spin(lighten(@base, 25%), 8);
}

Maps

#colors() {
  primary: blue;
  secondary: green;
}

.button {
  color: #colors[primary];
  border: 1px solid #colors[secondary];
}

编译后:

.button {
  color: blue;
  border: 1px solid green;
}

作用域(Scope)

less中的作用域与css中的作用域非常相似。首先在本地查找变量和混合函数,如果找不到它们,则从“父”范围继承。

@var: red;

#page {
  @var: white;
  #header {
    color: @var; // white
  }
}

与CSS自定义属性一样,mixin和变量定义不必放在引用它们的行之前。因此下面的代码与前面的示例相同:

@var: red;

#page {
  #header {
    color: @var; // white
  }
  @var: white;
}

注释(Comments)

块注释和行注释都可以使用:

/* 一个块注释
 * style comment! */
@var: red;

// 这一行被注释掉了!
@var: white;

导入(Importing)

“导入”的工作方式和你预期的一样。你可以导入一个 .less 文件,此文件中的所有变量就可以全部使用了。如果导入的文件是 .less 扩展名,则可以将扩展名省略掉:

@import "library"; // library.less
@import "typo.css";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值