前端知识——css 之预处理器 less 语法

本文介绍了LESS的语法,包括变量、嵌套、运算、混合和映射等特性,以及如何编译LESS代码。同时,文章对比了Sass和Scss,阐述了它们的起源和特点,Sass作为最早的预处理器,其SCSS语法现在与CSS完全兼容。LESS因其简单易用性,被广泛应用于如TwitterBootstrap和AntDesign等项目。
摘要由CSDN通过智能技术生成

常见的预处理器:

  • Sass/Scss:
    • 2007年诞生,最早也是最成熟的CSS预处理器,拥有ruby社区的支持,是属于Haml(一种模板系统)的一部分
    • 目前受LESS影响,已经进化到了全面兼容CSS的SCSS
  • Less:
    • 2009年出现,受SASS的影响较大,但又使用CSS的语法,让大部分开发者更容易上手
    • 比起SASS来,可编程功能不够,不过优点是使用方式简单、便捷,兼容CSS,并且已经足够使用
    • 另外反过来也影响了SASS演变到了SCSS的时代
    • 著名的Twitter Bootstrap就是采用LESS做底层语言的,也包括React的UI框架AntDesign。
  • Stylus:
    • 2010年产生,来自Node.js社区,主要用来给Node项目进行CSS预处理支持
    • 语法偏向于Python, 使用率相对于Sass/Less少很多

1. less 语法

less 代码如何被编译成CSS代码运行:

  • 方式一:下载Node环境,通过npm包管理下载less工具,使用less工具对代码进行编译
  • 方法二:通过VSCode插件来编译成CSS或者在线编译
  • 方式三:引入CDN的less编译代码,对less进行实时的处理
    • <script src="https://cdn.jsdelivr.net/npm/less@4" ></script>
  • 方式四:将less编译的js代码下载到本地,执行js代码对less进行编译

1.1 变量(Variables)

在Less中使用如下的格式来定义变量:

@变量名: 变量值;

1.2 嵌套(Nesting)

Less提供了选择器的嵌套

特殊符号:& 表示当前选择器的父级

// 1.定义变量
@mainColor: #a40011;
@smallFontSize: 12px;
@normalFontSize: 14px;
@bigFontSize: 18px;

// 2.选择器的嵌套
.box {
	.pel {
		color: @mainColor;
		font-size: @normalFontSize;
	}

	h1 {
		.keyword {
			color: @mainColor;
			font-size: @bigFontSize;
		}
	}
		
	p {
		a.link {
			color: @mainColor;
			font-size: @smallFontSize;
			background-color: #0f0;
			
			&:hover {
				// 等于 a:hover
				color: #00f;
			}
		}
	}
}

1.3 运算(Operations)

在Less中,算术运算符 +、-、 * 、/ 可以对任何数字、颜色或变量进行运算。

  • 算术运算符在加、减或比较之前会进行单位换算,计算的结果以最左侧操作数的单位类型为准
  • 如果单位换算无效或失去意义,则忽略单位

1.4 混合(Mixins)和映射(Maps)

混合是一种将一组属性从一个规则集(或混入)到另一个规则集的方法

  • 混入也可以传入变量

映射是提取一组属性中的某个属性的方法

// 1.运算
// .box {
//   font-size: 20px;
//   width: 10% + 50px;
//   height: 100px;
//   background-color: #ff0000 + #00ff00;
// }

// 2.混入
.nowrap_ellipsis {
	white-space: nowrap;
	text-overflow: ellipsis;
	overflow: hidden;
}

.box_border(@borderWidth: 5px, @borderColor: purple) {
	border: @borderWidth solid @borderColor;
}  

.box_size {
	width: 100px;
	height: 100px;
}

.box1 {
	// 2.3.混入和映射(Map)结合使用
	// 作用: 弥补less中不能自定义函数的缺陷
	width: .box_size()[width];
	background-color: #f00;
	
	// 2.1. 混入的基本使用
	.nowrap_ellipsis();
	.box_border();
}

.box2 {
	width: 150px;
	background-color: #0f0;
	
	.nowrap_ellipsis();
	// 2.2.混入是可以传递参数(定义变量)的
	.box_border(10px, orange);
}

1.5 其他语法补充

  • extend继承:
    • 和mixins作用类似,用于复用代码
    • 和mixins相比,继承代码最终会转化成并集选择器
  • Less内置函数:
  • 作用域:
    • 在查找一个变量时,首先在本地查找变量和混合(mixins)
    • 如果找不到,则从“父”级作用域继承
  • 导入:
    • 导入的方式和CSS的用法是一致的
    • 导入一个 .less 文件,此文件中的所有变量就可以全部使用了
    • 如果导入的文件是 .less 扩展名,则可以将扩展名省略掉
// 1.extend
// .box_border {
//   border: 5px solid #f00;
// }

// .box {
//   width: 100px;
//   background-color: orange;
//   .box_border();
//   &:extend(.box_border);
// }

// 2.内置函数
// .box {
//   color: color(skyblue);
//   width: convert(100px, "in");
//   font-size: ceil(18.5px);
//   background-color: orange;
// }

// 3.作用域(scope)
@mainColor: #f00;

.box_mixin {
	@mainColor: orange;
}

.box {
	// @mainColor: #0f0;
	
	.item {
		span {
			color: @mainColor;
			.box_mixin();
			// @mainColor: #00f;
		}
	}
}

2. 认识 Sass 和 Scss

Sass的语法使用的是类似于Ruby的语法,没有花括号,没有分号,具有严格的缩进;后来官方推出了全新的语法SCSS,意思是Sassy CSS,他是完全兼容CSS的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值