一文大白话讲清楚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'
相关推荐
志尊宝3 小时前
Vue3 零基础每日笔记(076):防抖节流的正确使用——搜索框、按钮防重复提交、滚动监听
javascript·vue.js·笔记
能源革命4 小时前
Vue 网格拖拽布局组件全景指南:7 大方案深度对比
前端·javascript·vue.js
雷工笔记4 小时前
KingFusion 驾驶舱开发:ECharts小时模板实现动态时间窗口
javascript
知野小兔4 小时前
JavaScript中Map和Set详解
javascript
daols884 小时前
vue 表格组件 vxe-table 实现自定义多行编辑功能
前端·javascript·vue.js·vxe-table
志尊宝4 小时前
Vue3 零基础每日笔记(075):图片懒加载与骨架屏
javascript·vue.js·笔记
IT_Octopus5 小时前
【零基础入门 LLM 开发 · Day 11】:ChatOpenAI vs init_chat_model——一行换供应商
java·前端·javascript
柚yuzumi5 小时前
React 19 Hooks 入门:函数组件的四大法宝 (useState / useEffect / useRef / useContext)
前端·javascript·架构
King禅5 小时前
JavaScript 调试实战指南:从 console.log 到 DevTools 深度运用
javascript
全栈项目管理程序猿5 小时前
ArcGIS JS 基础教程(28):图层渲染顺序管理
前端·javascript