吴志勇的博客 吴志勇的博客
  • h5

    • HTML5&CSS3
  • scss

    • css预处理语言
  • JavaScript

    • JavaScript教程
    • Ajax
    • ES6教程
    • NodeJS
    • Typescript
  • 框架

    • Jquery
    • VUE
    • React
  • Swing专题
  • java基础
  • javaweb
  • 框架
  • 数据库
  • netty
  • 设计模式
  • 微服务及架构
  • 云原生
  • maven
  • 单元测试
工具
我的
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

吴志勇

......
  • h5

    • HTML5&CSS3
  • scss

    • css预处理语言
  • JavaScript

    • JavaScript教程
    • Ajax
    • ES6教程
    • NodeJS
    • Typescript
  • 框架

    • Jquery
    • VUE
    • React
  • Swing专题
  • java基础
  • javaweb
  • 框架
  • 数据库
  • netty
  • 设计模式
  • 微服务及架构
  • 云原生
  • maven
  • 单元测试
工具
我的
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • HTML5&CSS3

  • CSS预处理语言

    • css预处理器
      • Sass

      • 01 【less学习笔记】
    • JavaScript

    • nodejs

    • webpack

    • VUE

    • react

    • Typescript
    • 前端
    • CSS预处理语言
    wuzhiyong
    2024-09-24

    css预处理器

    在现代前端开发的广阔舞台上,CSS预处理器扮演着至关重要的角色。它们通过引入变量、嵌套规则、混合、函数等高级特性,不仅极大地提升了CSS的可维护性和灵活性,还促进了代码的复用,简化了复杂样式的管理。本文将深入探讨SASS、SCSS、LESS与Stylus这四种主流CSS预处理器的特性、优缺点及其适用场景,帮助开发者根据项目需求做出最佳选择。

    # 一、SASS:CSS预处理器的先驱

    image-20240924210139134

    SASS(Syntactically Awesome Style Sheets)是最早的CSS预处理器之一,它最初采用了一种基于缩进的语法风格,称为SASS语法。这种语法强制代码遵循一致的缩进,虽然在代码整洁度和可读性方面有其优势,但对于习惯于传统CSS语法的开发者来说,可能存在一定的学习曲线。

    核心特性:

    • 变量:用于存储颜色、尺寸等常量,减少代码冗余,提高代码可维护性。
    • 嵌套规则:使CSS选择器的书写更加直观和紧凑,便于管理和维护。
    • 混合:类似于函数,允许重用代码片段,增强代码复用性。
    • 函数:提供内置函数,如颜色处理、数学运算等,支持自定义函数,增加代码的动态性。

    适用场景: SASS适用于注重代码整洁度和一致性的项目,尤其在团队开发中,统一的代码风格尤为重要。

    #

    下面让我们来看看与核心特性有关的示例吧!

    # 1.变量示例

    变量在SASS中用于存储颜色、尺寸等常量,帮助减少代码冗余,提高代码的可维护性。

    // 定义变量
    $primary-color: #ff4757;
    $base-font-size: 16px;
    
    // 使用变量
    body {
      background-color: $primary-color;
      font-size: $base-font-size;
    } 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    # 2.嵌套规则示例

    嵌套规则在SASS中可以使CSS选择器的书写更加直观和紧凑,便于代码的管理和维护。

    // 嵌套规则
    .container {
      width: 100%;
      & > .content {
        padding: 10px;
        &:hover {
          background-color: #f5f5f5;
        }
      }
    } 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    # 3.混合示例

    混合(Mixins)在SASS中类似于函数,允许你重用代码片段,增强代码的复用性。

    // 混合
    @mixin box-shadow($shadow) {
      -webkit-box-shadow: $shadow;
              box-shadow: $shadow;
    }
    
    // 使用混合
    .button {
      @include box-shadow(0 2px 4px rgba(0, 0, 0, 0.1));
    } 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    # 4.函数示例

    SASS提供了内置函数,如颜色处理、数学运算等,同时也支持自定义函数,增加代码的动态性。

    // 使用内置函数
    $light-blue: lighten(blue, 20%);
    
    // 自定义函数
    @function addPadding($val) {
      @return $val + $val / 2;
    }
    
    // 使用自定义函数
    .container {
      padding: addPadding(10px);
    } 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    # 二、SCSS:SASS的新面貌

    SCSS(Sassy CSS)是SASS语法的一种扩展,它采用了与CSS相同的语法结构,即使用花括号和分号,这使得SCSS语法对CSS开发者来说更加友好,降低了学习成本。

    核心特性:

    • 兼容CSS:SCSS保留了CSS的所有特性,开发者可以逐步将CSS迁移到SCSS。
    • 强大的功能集:继承了SASS的所有高级特性,如变量、嵌套、混合等。

    适用场景: SCSS适合于任何规模的项目,尤其是在需要从现有CSS代码库平稳过渡到预处理器时,SCSS的兼容性使其成为理想选择。

    #

    下面让我们来看看与核心特性有关的示例吧!

    # 1.兼容CSS

    SCSS保留了CSS的所有特性,这意味着你可以直接在SCSS文件中使用标准的CSS代码,无需任何修改。这对于逐步迁移现有的CSS项目到SCSS非常有帮助。

    /* 直接使用CSS */
    body {
      background-color: #ffffff;
      color: #333333;
    }
    
    /* SCSS可以在同一个文件中与CSS代码共存 */
    h1 {
      font-size: 2em; /* 直接使用CSS */
    }
    
    // 开始使用SCSS特性
    $primary-color: #ff4757; // SCSS变量 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    # 2.变量

    SCSS中的变量可以用于存储颜色、尺寸等常量,这有助于减少代码冗余,提高代码的可维护性。

    $primary-color: #ff4757;
    $base-font-size: 16px;
    
    body {
      background-color: $primary-color;
      font-size: $base-font-size;
    } 
    
    1
    2
    3
    4
    5
    6
    7

    # 3.嵌套规则

    SCSS中的嵌套规则使得CSS选择器的书写更加直观和紧凑,便于代码的管理和维护。

    .container {
      width: 100%;
      
      .content {
        padding: 10px;
        
        &:hover {
          background-color: lighten($primary-color, 10%);
        }
      }
    } 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    # 4.混合

    混合在SCSS中类似于函数,允许你重用代码片段,增强代码的复用性。

    // 混合定义
    @mixin box-shadow($shadow) {
      -webkit-box-shadow: $shadow;
              box-shadow: $shadow;
    }
    
    // 使用混合
    .button {
      @include box-shadow(0 2px 4px rgba(0, 0, 0, 0.1));
    } 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    # 5.自定义函数

    SCSS不仅提供了内置函数,如lighten()、darken()等,还允许开发者定义自己的函数,增加代码的动态性和灵活性。

    @function addPadding($val) {
      @return $val + $val / 2;
    }
    
    .container {
      padding: addPadding(10px);
    } 
    
    1
    2
    3
    4
    5
    6
    7

    # 三、LESS:动态样式语言

    LESS(Leaner CSS)是一种动态样式语言,它引入了变量、嵌套、操作符等概念,使得CSS变得更为强大和灵活。LESS的设计哲学是“CSS with powers”,它旨在让CSS更易于管理,同时保持其原有的简单性。

    核心特性:

    • 动态特性:变量、嵌套、操作符等使得LESS能够处理更复杂的样式逻辑。
    • 扩展性:支持函数和自定义操作,允许开发者扩展LESS的功能。

    适用场景: LESS适用于需要快速迭代和频繁修改样式的项目,其简单的语法和动态特性使其成为原型设计和敏捷开发的理想选择。

    下面让我们来看看与核心特性有关的示例吧!

    # 1.变量

    LESS中的变量允许你存储颜色、尺寸等值,用于跨多个规则集中复用,减少代码重复,提高代码的可维护性。

    // 定义变量
    @primary-color: #ff4757;
    @base-font-size: 16px;
    
    // 使用变量
    body {
      background-color: @primary-color;
      font-size: @base-font-size;
    } 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    # 2.嵌套规则

    嵌套规则在LESS中使得CSS选择器的书写更加直观和紧凑,便于代码的管理和维护。

    // 嵌套规则
    .container {
      width: 100%;
      
      .content {
        padding: 10px;
        
        &:hover {
          background-color: darken(@primary-color, 10%);
        }
      }
    } 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    # 3.操作符

    LESS支持操作符,如加、减、乘、除和百分比,用于执行数值运算,这在处理尺寸和颜色变化时特别有用。

    // 使用操作符
    .container {
      padding: (@base-font-size * 1.5);
    } 
    
    1
    2
    3
    4

    # 4.函数和自定义操作

    LESS提供了内置函数,如lighten()、darken()等,同时允许你定义自己的函数和操作,进一步扩展LESS的功能。

    // 使用内置函数
    @light-blue: lighten(blue, 20%);
    
    // 自定义函数
    .addPadding(@val) {
      padding: (@val + @val / 2);
    }
    
    // 使用自定义函数
    .container {
      .addPadding(10px);
    } 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    # 5.自定义操作

    LESS还支持自定义操作,允许你创建更复杂的逻辑处理。

    // 自定义操作
    .multiply(@a, @b) {
      @result: (@a * @b);
      .return(@result);
    }
    
    // 使用自定义操作
    .container {
      width: .multiply(100%, 0.8);
    } 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    # 四、Stylus:自由流动的CSS

    Stylus是一种语法更为自由和灵活的CSS预处理器,它简化了CSS的书写方式,去除了许多不必要的符号,如分号和括号,使代码看起来更自然,更易于阅读和编写。

    核心特性:

    • 简洁语法:Stylus的语法更为宽松,减少了代码的繁琐感。
    • 动态特性:支持JavaScript表达式,允许在样式中进行更复杂的逻辑处理。

    适用场景: Stylus适合那些追求极简主义和高度定制化的项目,对于喜欢探索新语法和编写富有表现力的代码的开发者来说,Stylus是一个极具吸引力的选择。

    下面让我们来看看与核心特性有关的示例吧!

    # 1.简洁语法

    Stylus的语法非常宽松,它去除了许多不必要的符号,如分号和括号,使得代码看起来更自然,更易于阅读和编写。

    // 简洁的变量定义和使用
    primaryColor = #ff4757
    baseFontSize = 16px
    
    body
      backgroundColor primaryColor
      fontSize baseFontSize
    
    // 嵌套规则
    .container
      width 100%
      .content
        padding 10px
        &:hover
          backgroundColor darken(primaryColor, 10%)
    
    // 没有花括号和分号,代码更加简洁 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

    # 2.动态特性

    Stylus的强大之处在于它支持JavaScript表达式,允许在样式中进行更复杂的逻辑处理,比如条件判断、循环等。

    // 使用JavaScript表达式计算宽度
    .container
      width (100 / 2)%
    
    // 条件判断
    button
      backgroundColor if (isDarkTheme, '#333', '#ccc')
    
    // 循环生成样式
    colors = ['red', 'green', 'blue']
    each color, index in colors
      .box(index)
        backgroundColor color
    
    // 使用函数
    addPadding (val)
      padding val + val / 2
    
    .container
      addPadding(10px)
    
    // JavaScript函数
    isDarkTheme = ->
      return window.matchMedia('(prefers-color-scheme: dark)').matches
    
    // 在Stylus中调用JavaScript函数
    body
      backgroundColor if isDarkTheme(), '#000', '#fff' 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28

    # 五、结论

    SASS、SCSS、LESS与Stylus各有千秋,选择合适的CSS预处理器应基于项目需求、团队背景和个人偏好。SASS和SCSS以其丰富的功能和广泛的社区支持,适合大型项目;LESS以其接近CSS的语法和较低的学习门槛,适合快速迭代的小型项目;而Stylus则以其独特的语法和高度的灵活性,满足那些寻求创新和高效开发的开发者需求。无论选择哪一种,CSS预处理器都能显著提升前端开发的效率和代码质量,是现代Web开发中不可或缺的利器。

    上次更新: 2024-09-29 11:22:28

    ← 弹性盒简介 01 【Sass的安装使用】→

    Copyright © 2020-2025 wuzhiyong
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式