css预处理器(less,sass)

css预处理器

  • 基于css的另一种语言
  • 通过工具编译成css
  • 添加了很多css不具备的特性
  • 提升CSS文件的组织

预处理器提供的功能

  • 嵌套 反应层级和约束
  • 变量和计算 减少重复代码
  • Extend和Mixin代码片段
  • 循环 适用于复杂有规律的样式
  • import CSS文件模块化

嵌套

body{
    padding:0;
    margin:0;
}

.wrapper{
    background:white;

    .nav{
        font-size: 12px;
    }
    .content{
        font-size: 14px;
        &:hover{
            background:red;
        }
    }
}

less和sass对于嵌套的处理方法类似,都可以将如上类型的文件处理成普通的css文件


变量和计算

直接看代码
less 中变量前加@,sass中是$


@fontSize: 12px;
@bgColor: red;

body{
    padding:0;
    margin:0;
}

.wrapper{
    background:lighten(@bgColor, 40%);

    .nav{
        font-size: @fontSize;
    }
    .content{
        font-size: @fontSize + 2px;
        &:hover{
            background:@bgColor;
        }
    }
}

tips:使用的时候注意相关性,便于后期维护。


Mixin

解决了css中复用的问题

less中只需要
.box(@name)
就可以了
但是在sass中需要
@mixin  box($name)
然后调用时用
@include box($name)
@fontSize: 12px;
@bgColor: red;

.box(){
    color:green;
}
/*不带(),会被编译到css文件中*/
.box1{
    .box();
    line-height: 2em;
}
.box2{
    .box();
    line-height: 3em;
}

.block(@fontSize){
    font-size: @fontSize;
    border: 1px solid #ccc;
    border-radius: 4px;
}


body{
    padding:0;
    margin:0;
}

.wrapper{
    background:lighten(@bgColor, 40%);

    .nav{
        .block(@fontSize);
    }
    .content{
        .block(@fontSize + 2px);
        &:hover{
            background:red;
        }
    }
}

extend

消除重复css代码

less中

@fontSize: 12px;
@bgColor: red;

.block{
    font-size: @fontSize;
    border: 1px solid #ccc;
    border-radius: 4px;
}

body{
    padding:0;
    margin:0;
}

.wrapper{
    background:lighten(@bgColor, 40%);

    .nav:extend(.block){
        color: #333;
    }
    .content{
        &:extend(.block);
        &:hover{
            background:red;
        }
    }
    /*两种extend方式*/
}

sass中

$fontSize: 12px;
$bgColor: red;

.block{
    font-size: $fontSize;
    border: 1px solid #ccc;
    border-radius: 4px;
}

body{
    padding:0;
    margin:0;
}

.wrapper{
    background:lighten($bgColor, 40%);

    .nav{
        @extend .block;
        color: #333;
    }
    .content{
        @extend .block;
        &:hover{
            background:red;
        }
    }
}

loop

有规律的样式可以循环生成

less中只能递归

.gen-col(@n) when (@n > 0){
    .gen-col(@n - 1);
    .col-@{n}{
        width: 1000px/12*@n;
    }
}

.gen-col(12);

sass中支持循环

 @mixin gen-col($n){
     @if $n > 0 {
         @include gen-col($n - 1);
         .col-#{$n}{
             width: 1000px/12*$n;
         }
     }
 }

 @include gen-col(12);

/*----------------------------------------*/

@for $i from 1 through 12 {
    .col-#{$i} {
        width: 1000px/12*$i;
    }
}

Import

预处理器中的变量是可以跨文件使用的
样式分开写,上线时打包


CSS预处理器框架

  • SASS-Compass
  • Less - Lesshat/EST
  • 提供现成的Mixin
  • 类似JS类库 封装常用功能
  • 解决加前缀等兼容性问题

猜你喜欢

转载自blog.csdn.net/weixin_43590947/article/details/84142554