首页 > 其他分享 >less和sass优缺点对比

less和sass优缺点对比

时间:2023-03-16 14:56:08浏览次数:48  
标签:extend sass less color button 优缺点 width background

1. 编译难度

sass:  node-sass安装经常报错,而且与nodejs版本绑定,不再更新,dart-sass为纯js实现,性能待提升

less:  编译容易,安装无压力

2. 语法

2.1 循环

sass有多种循环,for, each, while, 语法直观,书写方便,用来生成class非常好用

less没有循环,使用递归代替循环,语法不直观,不好用

sass循环用法

@for $var from <start> through <end>   //through是闭区间
@for $var from <start> to <end> 只包含  //to是前闭后开区间

@for $i from 1 through 3 {
  .item-#{$i} { width: 2em * $i; }
}
/*编译为*/
.item-1 {
  width: 2em;
}
.item-2 {
  width: 4em; 
}
.item-3 {
  width: 6em; 
}

@each $var in <list>

/* 遍历列表 */
@each $animal in dog, cat, bird {
    .#{$animal}-icon {
        background-image: url('/images/#{$animal}.png');
    }
}

/*编译为*/
.dog-icon {
    background-image: url('/images/dog.png'); 
}
.cat-icon {
    background-image: url('/images/cat.png'); 
}
.bird-icon {
    background-image: url('/images/bird.png'); 
}

/* 对象遍历,带key和value */
$colors: (
    p1: rgb(255, 113, 61),
    p2: lightblue,
    p3: lightseagreen
);

@each $key, $color in $colors {
    &.#{$key} {
         background-color: $color;
    }
}

/* 对象遍历,直接写对象 */
@each $header, $size in (h1: 2em, h2: 1.5em, h3: 1.2em) {
    #{$header} {
      font-size: $size;
    }
}
/*编译成*/
h1 {
    font-size: 2em; 
}
h2 {
    font-size: 1.5em; 
}
h3 {
    font-size: 1.2em; 
}

/* each多变量,多元组,按列对应 */
@each $animal, $color, $cursor in (puma, black, default),
                                  (sea-slug, blue, pointer),
                                  (egret, white, move) {
  .#{$animal}-icon {
    background-image: url('/images/#{$animal}.png');
    border: 2px solid $color;
    cursor: $cursor;
  }
}
/*编译成*/
.puma-icon {
    background-image: url('/images/puma.png');
    border: 2px solid black;
    cursor: default; 
}
.sea-slug-icon {
    background-image: url('/images/sea-slug.png');
    border: 2px solid blue;
    cursor: pointer; 
}
.egret-icon {
    background-image: url('/images/egret.png');
    border: 2px solid white;
    cursor: move; 
}
@while 循环

$types: 4;
$type-width: 20px;

@while $types > 0 {
    .while-#{$types} {
        width: $type-width + $types;
    }
    $types: $types - 1;
}

/* 编译后 */
.while-4 {
    width: 24px;
}
.while-3 {
    width: 23px;
}
.while-2 {
    width: 22px;
}
.while-1 {
    width: 21px;
}

less循环用法

/* Less */
.generate-columns(4);

.generate-columns(@n, @i: 1) when (@i =< @n) {
  .column-@{i} {
    width: (@i * 100% / @n);
  }
  .generate-columns(@n, (@i + 1));
}
/* 生成后的 CSS */
.column-1 {
  width: 25%;
}
.column-2 {
  width: 50%;
}
.column-3 {
  width: 75%;
}
.column-4 {
  width: 100%;
}

2.2 条件分支

sass:  有 if else 判断语句

less:   没有if else,使用when来进行条件判断

sass用法

$type: monster;
p {
  @if $type == ocean {
    color: blue;
  } @else if $type == matador {
    color: red;
  } @else if $type == monster {
    color: green;
  } @else {
    color: black;
  }
}
/*编译为*/
p {
  color: green; 
}

less用法

/* Less */
#card{

    // and 运算符 ,相当于 与运算 &&,必须条件全部符合才会执行
    .border(@width,@color,@style) when (@width>100px) and(@color=#999){
        border:@style @color @width;
    }

    // not 运算符,相当于 非运算 !,条件为 不符合才会执行
    .background(@color) when not (@color>=#222){
        background:@color;
    }

    // , 逗号分隔符:相当于 或运算 ||,只要有一个符合条件就会执行
    .font(@size:20px) when (@size>50px) , (@size<100px){
        font-size: @size;
    }
}
#main{
    #card>.border(200px,#999,solid);
    #card .background(#111);
    #card > .font(40px);
}

/* 生成后的 CSS */
#main{
  border:solid #999 200px;
  background:#111;
  font-size:40px;
}

2.3 重用

sass:  有 extend 和 @mixin

less:   有 extend  和 方法

sass的extend = less的extend

sass的@mixin = less的方法

sass和less的 extend 编译后,都会将类的重复样式进行合并,而sass的@mixin和less的方法则是直接插入代码,不合并

extend可以精简代码,减少重复代码,适用于纯静态的引用

@mixin和方法则可以传递变量,适用于动态引用代码的情景

sass 用法

/* sass extend基本用法 */
.button {  
    background: green;  
}
.button-1 {  
    @extend .button;  
}
.button-2 {  
    @extend .button;  
}

// 编译后
.button, 
.button-1, 
.button-2 {  
    background: green;  
}

/* sass继承多个类样式 */
.error {
    border: 1px #f00;
    background-color: #fdd;
}
.attention {
    font-size: 3em;
    background-color: #ff0;
}
.seriousError {
    @extend .error;
    @extend .attention;
    border-width: 3px;
}

/* sass mixin基本用法 */
@mixin button {  
    background-color: green;  
}
.button-1 {  
    @include button;  
} 
.button-2 {  
    @include button;  
}

// 编译后
.button {  
    background-color: green;  
}
.button-1 {  
    background-color: green;  
}
.button-2 {  
    background-color: green;  
}

/* sass mixin 使用判断 */
@mixin blockOrHidden($boolean:true) {
    @if $boolean {
        @debug "$boolean is #{$boolean}";
        display: block;
    }
    @else {
        @debug "$boolean is #{$boolean}";
        display: none;
    }
}

.block {
    @include blockOrHidden;
}

.hidden{
    @include blockOrHidden(false);
}

/* sass mixin 使用循环 */
$list: adam john wynn mason kuroir; //$list 就是一个列表

@mixin author-images {
    @each $author in $list {
        .photo-#{$author} {
            background: url("/images/avatars/#{$author}.png") no-repeat;
        }
    }
}

.author-bio {
    @include author-images;
}

less 用法

/* Less extend */
.animation{
    transition: all .3s ease-out;
    .hide{
      transform:scale(0);
    }
}
#main{
    &:extend(.animation);
}
#con{
    &:extend(.animation .hide);
}

/* 生成后的 CSS */
.animation,#main{
  transition: all .3s ease-out;
}
.animation .hide , #con{
    transform:scale(0);
}

/* Less 方法 */
.boxShadow(...){
    box-shadow: @arguments;
}
.textShadow(@a,...){
    text-shadow: @arguments;
}
#main{
    .boxShadow(1px,4px,30px,red);
    .textShadow(1px,4px,30px,red);
}

/* 生成后的 CSS */
#main{
  box-shadow: 1px 4px 30px red;
  text-shadow: 1px 4px 30px red;
}

 

参考: Less学习笔记

          scss- 条件语句 循环语句使用

          Sass的控制命令(判断、循环)

标签:extend,sass,less,color,button,优缺点,width,background
From: https://www.cnblogs.com/mengff/p/17222563.html

相关文章

  • Spring Study -lesson07-03-15
    自动装配Bean 两种自动装配方法:第一byName ,第二byType属性类型(用byType可以省略写id)。byName要保证所有bean的id必须唯一,这个bean必须和自动注入的属性set方法的......
  • vue的路由实现及sass
    day27vue的路由实现及sass路由前端路由根据对应的url地址来渲染不同的内容前端路由的分类页面路由(通过页面的跳转来完成对应的切换(刷新页面))hash路由(通过对应的......
  • 项目构建node-sass源码报错 SyntaxError:Unexpectedtoken"?"
    背景vue2项目,之前一直构建正常。今天改了代码,构建时报错,报错原因显示编译node-sass源码时出错。报错信息:Modulebuildfailed:/node_modules/node-sass/sass.dart.js:19......
  • Spring Study lesson02 - 案例学习二-23-03-14
    把dao中UserDao的实现类写入到beans.xml中,三个实现类。<beanid="MySqlDaoImpl"class="com.feijian.dao.MySqlDaoImpl"/><beanid="OracleDaoImpl"class="com.feiji......
  • less & saas/scss & css 深度选择器语法在 Vue2 & Vue3中的使用
    vue2中原生css>>>.el-card__header saas\scss::v-deep.el-card__headerless/deep/.el-card__header vue3中:deep(){......
  • 如何建设私有云原生 Serverless 平台
    随着云计算的普及,越来越多的企业开始将业务应用迁移到云上。然而,如何构建一套完整的云原生Serverless平台,依然是一个需要考虑的问题。Serverless的发展趋势云计算行业......
  • Mybatis-lesson09-多对一查询 (查询所有的学生及对应的老师信息)-03-12
    在StudentMapper.xml需要使用复杂查询的方法,1、先单独查学生和单独查老师2、在中间使用结果映射 学生中reultMap="StudentTeacher"3、中间增加结果映射resultMap......
  • S2 - Lesson 46 - Expensive and uncomfortable
    Wordsunload wooden goods extremely discoveroccur admit astonish confine pile woolen normal        Content Exp......
  • Mybatis-lesson07-lombok-慎用慎用吧-03-12
    第一步:Settings中加入plugins---lombok第二步:maven中导入依赖<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><ve......
  • Mybatis-lesson06-03-12
    id就是对应的namespace中的方法名;resultType就是sql语句执行的返回值(Classor数据类型)parameterType参数的类型(方法名中的参数),如果为简单的数据类型,默认可以不写。......