关于less/sass两个css预处理器的总结

对于只会用他们的嵌套功能的前端,在开发多租户项目时,遇到了不同租户的样式隔离功能,现在做出功能总结方便后续使用。

1.基本信息

LessSass
语法更接近原生 CSS语法类似 CSS(使用大括号和分号)
文件后缀为 .less后缀 .scss

2.安装

方式LessSass
Node.js 工具npm install -g lessnpm install -g sass
构建工具集成Webpack(less-loader)、Gulp(gulp-lessWebpack(sass-loader)、Gulp(gulp-sass
GUI 工具Koala、CodeKitKoala、CodeKit
在线编译Less2CSSSassMeister

3.语法对比

3.1 变量

用于存储颜色、尺寸等重复使用的值,便于统一维护

特性Less(@符号)Sass($ 符号)
基本用法@color: #f00;
.box { color: @color; }
$color: #f00;
.box { color: $color; }
作用域块级作用域(内层变量覆盖外层)全局作用域(需用!global声明全局变量)

3.2 嵌套

模拟 HTML 结构的层级关系,减少代码冗余,提高可读性。

特性LessSass(SCSS)
基本嵌套与 SCSS 一致

.nav {
  color: #333;
    a {
      text-decoration: none;
    }
    &:hover {
      color: #f00;
    }
}
媒体查询嵌套支持在选择器内嵌套媒体查询支持在选择器内嵌套媒体查询

3.3 混合

封装可复用的样式片段,类似 “函数”,可传递参数

特性LessSass(SCSS)
无参混合

直接使用类选择器作为混合

.border{border: 1px solid #000;}
.box{.border}
    

需用@mixin定义,@include引用

@mixin border{border:1px solid #fff;}
.box{@include border}
带参混合

//1px为默认值
.border(@width:1px){
    border:1px solid #fff;    
}
.box{.border(2px)}
@mixin border($width: 1px){
    border: $width solid #000;
}
.box { @include border(2px); }
复杂逻辑支持简单条件判断(when支持复杂条件、循环等逻辑

3.4 继承

复用另一个选择器的样式,生成更简洁的 CSS(合并选择器)

特性LessSass(SCSS)
语法

使用:extend()

.base { color: #333; }
.box:extend(.base) { font-size: 14px; }

使用@extend

.base { color: #333; }
.box { @extend .base; font-size: 14px; }
注意不支持继承带参数的混合支持继承更复杂的选择器(如伪类)

3.5 运算

支持数字、颜色、尺寸的运算,简化计算逻辑

特性LessSass(SCSS)
数字运算
@width: 100px;
.box { width: @width / 2; }
$width: 100px;
.box { width: $width / 2; } 
颜色运算
@color: #000 + #333; 
$color: #000 + #333; 
单位处理需保证单位一致(如100px + 50会报错)自动处理单位(如100px + 50 → 150px

3.6 导入

拆分样式文件,通过@import合并,减少 HTTP 请求

特性LessSass(SCSS)
基本用法@import "reset.less";(可省略后缀)@import "reset.scss";(可省略后缀)
局部文件无特殊命名规范文件名以_开头(如_reset.scss),导入时可省略_和后缀
编译时机运行时导入(会生成多个请求,需提前编译)编译时合并(仅生成一个 CSS 文件)

3.7 函数与逻辑控制

提供内置函数和流程控制,实现复杂样式逻辑。

特性LessSass(SCSS)
内置函数较少(如lighten()darken()处理颜色)丰富(颜色、字符串、列表等,如adjust-hue()str-length()
条件判断简单when判断
.mixin(@a) when (@a > 10) { ... }
@if/@else完整判断
@if $a > 10 { ... } @else { ... }
循环仅支持each遍历列表(较新版本)支持@for@each@while循环
@for $i from 1 to 3 {.col-#{$i} { width: 100% / 3 * $i; }}

4.总结

对比维度LessSass(SCSS)
语法友好度更接近 CSS,学习成本低略复杂,但功能更全面
功能丰富度基础功能满足日常需求支持复杂逻辑(循环、多条件),内置函数更多
生态与工具工具较少,依赖 Less.js生态完善(如 Compass 框架),工具支持广泛
适用场景小型项目、快速开发、团队熟悉 CSS大型项目、复杂样式逻辑、需要高度定制化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值