一文大白话讲清楚CSS预编译语言,包括Sass,Scss,Less,Stylus

文章目录

一文大白话讲清楚CSS预编译语言,包括Sass,Scss,Less,Stylus

1. 为啥会出现CSS预编译语言

  • 我们先来看一个代码
html 复制代码
 <style>
  .div1{
    width: 200px;
    height: 200px;
    border: 1px dashed green;

    padding: 2px 5px 4px 8px;
    background-color: red;
    border-radius: 10px;
  }
  .div2{
    width: 200px;
    height: 200px;
    border: 1px dashed green;

    padding: 3px 6px 5px 9px;
    background-color: green;
    border-radius: 15px;
  }
</style>
  • 发现设问题没有,两个类,最开始的三行是一样的,这还是两个类,如果是100个呢,那是不是相当于写了100x3行的重复代码
  • 而且,如果突然要对这100个类改变尺寸,比如width改成300px,那是不是就得改100处代码
  • 这很繁琐,很不好
  • 那有没有可能我们把这个三行代码单独拿出来,然后在需要的地方引入,这样即使改,也只改一处,其他的引用会跟着变
  • 上代码
html 复制代码
<style>
    .basediv{
        width: 200px;
        height: 200px;
        border: 1px dashed green;
    }
    .div1{
        .basediv;
        padding: 2px 5px 4px 8px;
        background-color: red;
        border-radius: 10px;
    }
    .div2{
        .basediv;
        padding: 3px 6px 5px 9px;
        background-color: green;
        border-radius: 15px;
    }
</style>
  • 这样一来,首先,不要下100xN的重复代码了,其次,如果要对这个100个div修改尺寸width=300px,只修改basediv的width=300就行
  • 这样既好些,又好维护
  • 这就是CSS预编译产生的内在需求

2. 啥是CSS预编译语言

  • 我们上面举得这个basediv的例子就是预编译语言的一个功能mixin,也叫混入。
  • 简单来说,CSS预编译语言就是允许像javascript那样,使用变量,嵌套规则,混合,函数等特性,编写更易于维护和理解的CSS代码。
  • 当然,之所以叫预编译,是因为这些代码在执行前还要编译为原始CSS代码,所以叫预编译
  • 所有的css预编译余元主要都包含以下内容
    • 变量-variable
    • 作用域-scope
    • 代码混入-mixins
    • 嵌套-nested rules
    • 代码模块化-modules

3.常用的CSS预编译语言

  1. Sass & Scss
  • 不说起源啥的废话,直接上干货,就是SASS后来升级了,叫Scss,他两就是版本不一样,Scss对CSS的兼容性更好
  1. less
  • 主要特点是使用CSS语法,容易上手
  1. styLus
  • 主要用来给node项目进行CSS预处理支持

4.各类预编译语言的区别

4.1 变量variable

html 复制代码
<style>
    /*scss定义变量用"$"符号*/
    $color:red;
    .div1{
        background-color: $color;
    }
    /*less定义变量用"@"符号*/
    @width:200px;
    .div2{
        width:@width;
    }
    /*stylus变量的生命不需要特殊符号,但是变量的赋值必须要"="等号*/
    
    borderRaduis=20px;
    .div3{
        border-radius: borderRadius;
    }
</style>

4.2 作用域

html 复制代码
<style>
    /*scss定义变量用"$"符号*/
    $color:red;
    $fontSize:16px;
    .div1{
        $width:200px;
        width: $width;
        background-color: $color;
        .font{
            color:$color;
            font-size: $fontSize;
        }
    }
    
</style>
  • .font里面应用#fontSize时,现在本级找,没有,再往上,在.div1里面找,没有,在往上,在style里面找,找到了

4.3 代码混入mixins

  • 代码混入就是把一部分常用代码抽离出来,定义成单独的模块,在需要的时候直接引入就行,
  • 这个例子咱们在最开始已经讲过了,再写一下
html 复制代码
<style>
    /*less中,混合的用法是将一个写好的class引入另一个class,也能使用参数@*/
    .first{
        font-size: 16px;
    }
    .mark(@color:red){
        font-weight:500;
        color:@color
    }
    .div1{
        .firsst;
        .mark(red)
    }
    /*scss声明mixins时需要使用@mixin的名,也可以使用参数,参数用$*/
    @mixin second{
        font-size: 18px;
    }
    @mixin highshow($color:green){
      font-weight: 800;
      color: $color;
    }
    .div2{
      @include second;
      @include highshow(green)
    }
    /*stylus混合可以直接像写函数那样,直接定义,然后引用*/
    third(color=yellow){
     color:color ; 
    }
    .div3{
      third(yellow)
    }
</style>

4.4 模块化

  • 模块化就是把CSS代码封装成一个个模块,然后使用的时候进行导入
html 复制代码
@import './xds'
相关推荐
编程乐趣1 小时前
Eval-Expression.NET:动态执行C#脚本,类似Javascript的Eval函数功能
javascript·c#·.net
晨辰星662 小时前
Vue2中使用Echarts
前端·javascript·echarts
时间sk2 小时前
CSS——10.类选择器
前端·css
我真不会起名字啊2 小时前
QtJson数据格式处理详解
java·前端·javascript
djk88882 小时前
js将object整个实体对象作为参数传递
开发语言·javascript·ecmascript
【D'accumulation】3 小时前
基于 Node.js 的 ORM(对象关系映射)工具——Sequelize介绍与使用,并举案例分析
前端·javascript·学习·node.js·express
一个处女座的程序猿O(∩_∩)O3 小时前
vue3 如何封装aixos
前端·javascript·vue.js
桃园码工3 小时前
3_TypeScript 运算符 --[深入浅出 TypeScript 测试]
前端·javascript·typescript
low神3 小时前
Flutter面试题、Dart面试题
前端·javascript·flutter·react native·dart·前端面试题
还是大剑师兰特4 小时前
Javascript 编写的一个红、黄、绿灯交替变亮
javascript·交通灯·大剑师