【前端】【css预处理器】Sass与Less全面对比与构建对应知识体系

第一章 概述

1.1 Sass和Less简介

1.1.1 Sass简介

Sass(Syntactically Awesome Stylesheets)是一种 CSS 预处理器,它为 CSS 赋予了更多强大的功能和更灵活的语法结构😎。

  • 语法特点 :Sass 有两种语法格式。一种是 .sass 后缀的缩进语法,它不使用大括号和分号,通过缩进来表示代码块,代码看起来更加简洁,例如:
sass 复制代码
body
  font-family: Arial
  color: #333

另一种是 .scss 后缀的语法,它和 CSS 语法类似,使用大括号和分号,对于熟悉 CSS 的开发者来说更容易上手,例如:

scss 复制代码
body {
  font-family: Arial;
  color: #333;
}
  • 功能特性:Sass 支持变量、嵌套规则、混合器、继承等功能。比如使用变量可以方便地管理颜色、字体等样式,代码如下:
scss 复制代码
$primary-color: #007bff;
button {
  background-color: $primary-color;
}
1.1.2 Less简介

Less(Leaner Style Sheets)也是一种 CSS 预处理器,它让 CSS 的编写变得更加高效和可维护🤗。

  • 语法特点:Less 的语法和 CSS 非常相似,几乎可以直接在 Less 文件中使用 CSS 代码,这降低了学习成本。例如:
less 复制代码
body {
  background-color: #f8f9fa;
}
  • 功能特性:Less 同样支持变量、混合、嵌套、函数等功能。和 Sass 类似,使用变量可以提高代码的复用性,示例如下:
less 复制代码
@link-color: #007bff;
a {
  color: @link-color;
}

1.2 Sass和Less的历史与发展

1.2.2 Sass的发展历程
  • 诞生 :2006 年,Hampton Catlin 发起了 Sass 项目,随后 Natalie Weizenbaum 加入并将其发展成一种成熟的语言🎉。最初的 Sass 采用了缩进式语法(.sass)。
  • Scss 出现 :2009 年,Chris Eppstein 引入了 .scss 语法,这种语法和 CSS 兼容,使得更多开发者能够接受和使用 Sass。
  • 广泛应用:随着前端开发的发展,Sass 被越来越多的项目采用,成为了流行的 CSS 预处理器之一。众多知名的前端框架和项目都使用 Sass 来管理样式。
1.2.2 Less的发展历程
  • 诞生:2009 年,Alexis Sellier 开发了 Less。它的设计初衷是让 CSS 更加简洁和易于维护,并且能够在浏览器端和服务器端使用👏。
  • 社区发展:Less 拥有活跃的社区,不断有新的插件和工具出现,进一步扩展了 Less 的功能。
  • 持续更新:经过多年的发展,Less 不断更新和完善,保持着良好的性能和兼容性。

1.3 Sass和Less的应用场景

1.3.1 前端项目中的使用

在前端项目中,Sass 和 Less 可以帮助开发者更高效地编写和管理 CSS 代码🧐。

  • 代码复用:通过变量、混合器等功能,可以避免重复编写相同的样式代码。例如,在一个电商网站中,按钮的样式可能在多个地方使用,使用 Sass 或 Less 的变量和混合器可以统一管理按钮样式,提高代码的复用性。
  • 模块化开发:可以将不同的样式模块分开编写,然后通过导入的方式组合在一起。比如将导航栏、页脚等样式分别写在不同的文件中,最后在主文件中导入,使代码结构更加清晰。
1.3.2 响应式设计中的应用

在响应式设计中,Sass 和 Less 可以让媒体查询的编写更加方便和灵活😃。

  • 变量和函数的应用:可以使用变量来定义不同屏幕尺寸的断点,使用函数来处理不同屏幕下的样式变化。例如:
scss 复制代码
$tablet-width: 768px;
@media (min-width: $tablet-width) {
  body {
    font-size: 16px;
  }
}
  • 嵌套媒体查询:Sass 和 Less 支持嵌套媒体查询,使得代码更加简洁易读。例如:
less 复制代码
.container {
  width: 100%;
  @media (min-width: 992px) {
    width: 960px;
  }
}
1.3.3 大型项目中的优势

在大型项目中,Sass 和 Less 的优势更加明显👍。

  • 可维护性:由于代码结构更加清晰,模块化程度高,在项目后期的维护和扩展中更加方便。开发团队可以根据功能模块划分样式文件,每个开发者负责自己的模块,减少代码冲突。
  • 团队协作:Sass 和 Less 的语法规范和功能特性可以让团队成员更好地协作。大家可以遵循统一的编码规范,使用相同的变量和混合器,提高开发效率和代码质量。

第二章 安装与环境配置

2.1 Sass 安装

2.1.1 使用 npm 安装 Sass

Sass 是一种强大的 CSS 预处理器,使用 npm(Node 包管理器)可以轻松安装它。以下是具体步骤:

  1. 检查 Node.js 和 npm 是否安装

    • 打开终端(在 Windows 上可以是命令提示符或 PowerShell,在 macOS 和 Linux 上可以是终端应用程序)。
    • 输入 node -v 并回车,如果显示 Node.js 的版本号,说明 Node.js 已安装。
    • 输入 npm -v 并回车,如果显示 npm 的版本号,说明 npm 已安装。如果没有安装,需要先从 Node.js 官网 下载并安装 Node.js,npm 会随 Node.js 一起安装。
  2. 安装 Sass

    • 在终端中输入以下命令:

      bash 复制代码
      npm install -g sass

      这里的 -g 表示全局安装,这样在系统的任何目录下都可以使用 Sass 命令。

    • 安装完成后,可以输入 sass --version 来验证 Sass 是否安装成功,如果显示 Sass 的版本号,就说明安装成功啦😎。

2.1.2 不同操作系统下的安装方法

Windows 系统
  • 使用 npm 安装:按照上面 2.1.1 中使用 npm 安装的步骤进行操作即可。
  • 使用 Chocolatey(包管理器)
    • 首先要安装 Chocolatey,打开 PowerShell 并以管理员身份运行,输入以下命令:

      powershell 复制代码
      Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
    • 安装完成后,在 PowerShell 中输入以下命令安装 Sass:

      powershell 复制代码
      choco install sass
macOS 系统
  • 使用 npm 安装:同样按照 2.1.1 中使用 npm 安装的步骤操作。
  • 使用 Homebrew(包管理器)
    • 如果还没有安装 Homebrew,打开终端输入以下命令安装:

      bash 复制代码
      /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    • 安装完成后,在终端输入以下命令安装 Sass:

      bash 复制代码
      brew install sass/sass/sass
Linux 系统(以 Ubuntu 为例)
  • 使用 npm 安装:遵循 2.1.1 中的步骤。
  • 使用 APT(包管理器)
    • 先添加 Sass 的 APT 仓库,在终端输入以下命令:

      bash 复制代码
      echo "deb [arch=amd64] https://dl.bintray.com/sass/ubuntu stable main" | sudo tee -a /etc/apt/sources.list.d/sass.list
      sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C92F20992128602E
    • 然后更新 APT 缓存并安装 Sass:

      bash 复制代码
      sudo apt-get update
      sudo apt-get install sass

2.2 Less 安装

2.2.1 使用 npm 安装 Less

Less 也是一种流行的 CSS 预处理器,使用 npm 安装它的步骤如下:

  1. 检查 Node.js 和 npm:和安装 Sass 时一样,先确保 Node.js 和 npm 已经安装。

  2. 安装 Less :在终端中输入以下命令:

    bash 复制代码
    npm install -g less

    同样,-g 表示全局安装。安装完成后,可以输入 lessc --version 来验证 Less 是否安装成功。

2.2.2 浏览器端引入 Less

除了使用 npm 安装,还可以在浏览器端直接引入 Less。步骤如下:

  1. 下载 Less.js 文件
  2. 在 HTML 文件中引入 Less 文件和 Less.js
    • 假设已经将 styles.less 文件和 less.js 文件放在项目的同一目录下,在 HTML 文件的 <head> 标签中添加以下代码:

      html 复制代码
      <link rel="stylesheet/less" type="text/css" href="styles.less">
      <script src="less.js" type="text/javascript"></script>
    • 注意,要先引入 Less 文件,再引入 less.js 文件。这样在浏览器中打开 HTML 文件时,Less 会自动编译成 CSS。

2.3 开发环境配置

2.3.1 配置编译工具(如 gulp、webpack)

使用 gulp 配置 Sass/Less 编译
  1. 安装 gulp 和相关插件
    • 首先在项目目录下初始化 package.json 文件,在终端中输入 npm init -y

    • 然后安装 gulp 和相关插件,输入以下命令:

      bash 复制代码
      npm install gulp gulp-sass gulp-less --save-dev

      这里的 gulp-sass 用于编译 Sass,gulp-less 用于编译 Less,--save-dev 表示将这些插件作为开发依赖安装。

  2. 创建 gulpfile.js 文件
    • 在项目根目录下创建 gulpfile.js 文件,添加以下代码:

      javascript 复制代码
      const gulp = require('gulp');
      const sass = require('gulp-sass')(require('sass'));
      const less = require('gulp-less');
      
      // 编译 Sass 任务
      function compileSass() {
        return gulp.src('src/scss/*.scss')
         .pipe(sass().on('error', sass.logError))
         .pipe(gulp.dest('dist/css'));
      }
      
      // 编译 Less 任务
      function compileLess() {
        return gulp.src('src/less/*.less')
         .pipe(less())
         .pipe(gulp.dest('dist/css'));
      }
      
      exports.compileSass = compileSass;
      exports.compileLess = compileLess;
    • 这里假设 Sass 文件放在 src/scss 目录下,Less 文件放在 src/less 目录下,编译后的 CSS 文件会输出到 dist/css 目录下。

  3. 运行编译任务
    • 在终端中输入 gulp compileSass 可以编译 Sass 文件,输入 gulp compileLess 可以编译 Less 文件。
使用 webpack 配置 Sass/Less 编译
  1. 安装 webpack 和相关加载器

    • 同样先初始化 package.json 文件,然后安装 webpack 和相关加载器,输入以下命令:

      bash 复制代码
      npm install webpack webpack-cli style-loader css-loader sass-loader less-loader sass less --save-dev
  2. 创建 webpack.config.js 文件

    • 在项目根目录下创建 webpack.config.js 文件,添加以下代码:

      javascript 复制代码
      const path = require('path');
      
      module.exports = {
        entry: './src/index.js',
        output: {
          path: path.resolve(__dirname, 'dist'),
          filename: 'bundle.js'
        },
        module: {
          rules: [
            {
              test: /\.scss$/,
              use: ['style-loader', 'css-loader', 'sass-loader']
            },
            {
              test: /\.less$/,
              use: ['style-loader', 'css-loader', 'less-loader']
            }
          ]
        }
      };
    • 这里配置了 webpack 对 Sass 和 Less 文件的处理规则。

  3. 运行 webpack 编译

    • 在终端中输入 npx webpack 来运行 webpack 编译。

2.3.2 集成到前端框架(如 Vue、React)

集成到 Vue 项目
Sass 集成
  1. 安装 Sass 相关依赖

    • 在 Vue 项目中,输入以下命令安装 Sass 相关依赖:

      bash 复制代码
      npm install sass sass-loader --save-dev
  2. 在 Vue 组件中使用 Sass

    • .vue 文件的 <style> 标签中添加 lang="scss" 属性,例如:

      vue 复制代码
      <template>
        <div class="container">
          <h1>Hello Vue with Sass</h1>
        </div>
      </template>
      
      <script>
      export default {
        name: 'App'
      };
      </script>
      
      <style lang="scss">
      .container {
        h1 {
          color: red;
        }
      }
      </style>
Less 集成
  1. 安装 Less 相关依赖

    • 输入以下命令安装 Less 相关依赖:

      bash 复制代码
      npm install less less-loader --save-dev
  2. 在 Vue 组件中使用 Less

    • .vue 文件的 <style> 标签中添加 lang="less" 属性,例如:

      vue 复制代码
      <template>
        <div class="container">
          <h1>Hello Vue with Less</h1>
        </div>
      </template>
      
      <script>
      export default {
        name: 'App'
      };
      </script>
      
      <style lang="less">
      .container {
        h1 {
          color: blue;
        }
      }
      </style>
集成到 React 项目
Sass 集成
  1. 安装 Sass 相关依赖

    • 在 React 项目中,输入以下命令安装 Sass 相关依赖:

      bash 复制代码
      npm install sass --save-dev
  2. 在 React 组件中使用 Sass

    • 假设创建了一个 styles.scss 文件,在 React 组件中引入并使用:

      jsx 复制代码
      import React from 'react';
      import './styles.scss';
      
      const App = () => {
        return (
          <div className="container">
            <h1>Hello React with Sass</h1>
          </div>
        );
      };
      
      export default App;
Less 集成
  1. 安装 Less 相关依赖
    • 输入以下命令安装 Less 相关依赖:

      bash 复制代码
      npm install less less-loader --save-dev
    • 同时可能需要对 webpack 配置进行一些调整,因为 Create React App 默认不支持 Less。可以使用 react-app-rewired 来修改配置。

  2. 在 React 组件中使用 Less
    • 假设创建了一个 styles.less 文件,在 React 组件中引入并使用:

      jsx 复制代码
      import React from 'react';
      import './styles.less';
      
      const App = () => {
        return (
          <div className="container">
            <h1>Hello React with Less</h1>
          </div>
        );
      };
      
      export default App;

这样,就完成了 Sass 和 Less 的安装、开发环境的配置以及与前端框架的集成啦🎉。

第三章 基础语法

3.1 变量

3.1.1 Sass变量的定义与使用
1. 变量定义

在 Sass 中,变量以 $ 符号开头,后面跟着变量名,使用冒号 : 来赋值。例如:

scss 复制代码
$primary-color: #007bff;
$font-size-base: 16px;

这里定义了两个变量,$primary-color 用于存储主要颜色,$font-size-base 用于存储基础字体大小。

2. 变量使用

定义好变量后,就可以在样式中使用它们了。例如:

scss 复制代码
body {
  color: $primary-color;
  font-size: $font-size-base;
}

在这个例子中,body 元素的文本颜色使用了 $primary-color 变量的值,字体大小使用了 $font-size-base 变量的值。😎

3.1.2 Less变量的定义与使用
1. 变量定义

Less 中的变量以 @ 符号开头,同样使用冒号 : 来赋值。例如:

less 复制代码
@primary-color: #007bff;
@font-size-base: 16px;

这里定义的变量和 Sass 中的类似,只是符号不同。

2. 变量使用

在 Less 中使用变量的方式和 Sass 类似。例如:

less 复制代码
body {
  color: @primary-color;
  font-size: @font-size-base;
}

同样,body 元素的文本颜色和字体大小使用了定义好的变量值。🤗

3.1.3 变量作用域比较
1. Sass 变量作用域
  • 局部变量:在选择器、混合器、函数等内部定义的变量是局部变量,只在其定义的范围内有效。例如:
scss 复制代码
body {
  $local-color: #ff0000;
  color: $local-color;
}

p {
  // 这里无法使用 $local-color 变量
  color: $primary-color; 
}
  • 全局变量:在文件顶层定义的变量是全局变量,可以在整个文件中使用。
2. Less 变量作用域
  • 局部变量:Less 中的局部变量也是在选择器、混合器等内部定义,只在其定义的范围内有效。例如:
less 复制代码
body {
  @local-color: #ff0000;
  color: @local-color;
}

p {
  // 这里无法使用 @local-color 变量
  color: @primary-color; 
}
  • 全局变量:在文件顶层定义的变量是全局变量,可在整个文件中使用。不过,Less 有一个"就近原则",当局部变量和全局变量同名时,会优先使用局部变量。😜

3.2 嵌套规则

3.2.1 Sass的嵌套语法

Sass 允许在选择器中嵌套选择器,使代码结构更清晰。例如:

scss 复制代码
nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }

  li {
    display: inline-block;
  }

  a {
    display: block;
    padding: 6px 12px;
    text-decoration: none;
  }
}

在这个例子中,ullia 选择器都嵌套在 nav 选择器内部,这样的结构更符合 HTML 中的嵌套关系。😍

3.2.2 Less的嵌套语法

Less 的嵌套语法和 Sass 类似。例如:

less 复制代码
nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }

  li {
    display: inline-block;
  }

  a {
    display: block;
    padding: 6px 12px;
    text-decoration: none;
  }
}

同样,ullia 选择器嵌套在 nav 选择器内部,使代码更易读。🤓

3.2.3 嵌套的注意事项
  • 避免过度嵌套:过度嵌套会使代码的可读性和维护性变差,一般建议嵌套层数不超过 3 层。例如:
scss 复制代码
// 不推荐的过度嵌套
body {
  .container {
    .row {
      .col {
        p {
          color: red;
        }
      }
    }
  }
}
  • 使用父选择器 & :在嵌套中,& 表示父选择器。例如:
scss 复制代码
a {
  color: blue;

  &:hover {
    color: red;
  }
}

这里的 &:hover 表示 a 元素的 :hover 状态。👍

3.3 注释

3.3.1 Sass的注释方式
1. 单行注释

使用 // 来添加单行注释,单行注释不会被编译到 CSS 文件中。例如:

scss 复制代码
// 这是一个单行注释
body {
  color: black;
}
2. 多行注释

使用 /* */ 来添加多行注释,多行注释在压缩模式下会被移除,在非压缩模式下会保留在 CSS 文件中。例如:

scss 复制代码
/*
这是一个多行注释
可以写很多内容
*/
body {
  color: black;
}
3.3.2 Less的注释方式
1. 单行注释

同样使用 // 来添加单行注释,单行注释不会被编译到 CSS 文件中。例如:

less 复制代码
// 这是一个单行注释
body {
  color: black;
}
2. 多行注释

使用 /* */ 来添加多行注释,多行注释会保留在 CSS 文件中。例如:

less 复制代码
/*
这是一个多行注释
可以写很多内容
*/
body {
  color: black;
}

总之,Sass 和 Less 在注释方面有一些相似之处,但也有一些细微的差别,需要根据实际需求来选择合适的注释方式。😃

第四章 混合器与函数

4.1 混合器(Mixin)

4.1.1 Sass混合器的定义与使用

1. 定义

在 Sass 中,混合器就像是一个代码块的集合,你可以把一些常用的 CSS 样式组合在一起,给它取个名字,方便之后重复使用。使用 @mixin 关键字来定义混合器。

scss 复制代码
// 定义一个简单的混合器,用于设置圆角边框
@mixin rounded-border {
  border: 1px solid #ccc;
  border-radius: 5px;
}
2. 使用

使用 @include 关键字来调用定义好的混合器。

scss 复制代码
// 调用 rounded-border 混合器
.button {
  @include rounded-border;
  padding: 10px 20px;
  color: white;
  background-color: blue;
}

编译后的 CSS 代码如下:

css 复制代码
.button {
  border: 1px solid #ccc;
  border-radius: 5px;
  padding: 10px 20px;
  color: white;
  background-color: blue;
}

🎉这样就避免了重复编写相同的代码,提高了代码的复用性。

4.1.2 Less混合器的定义与使用

1. 定义

Less 中的混合器定义方式和 Sass 类似,直接定义一个类或者 ID 样式,就可以当作混合器使用。

less 复制代码
// 定义一个混合器,用于设置阴影效果
.shadow {
  box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
}
2. 使用

在需要使用混合器的地方,直接调用这个类名或者 ID 名。

less 复制代码
.card {
  .shadow;
  width: 200px;
  height: 300px;
  background-color: #fff;
}

编译后的 CSS 代码如下:

css 复制代码
.card {
  box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
  width: 200px;
  height: 300px;
  background-color: #fff;
}

😎通过这种方式,也能实现代码的复用。

4.1.3 混合器传参

1. Sass 混合器传参

Sass 混合器可以接收参数,让混合器更加灵活。

scss 复制代码
// 定义一个带参数的混合器,用于设置不同颜色和大小的边框
@mixin custom-border($color, $width) {
  border: $width solid $color;
}

// 调用带参数的混合器
.box {
  @include custom-border(red, 2px);
  width: 100px;
  height: 100px;
}

编译后的 CSS 代码如下:

css 复制代码
.box {
  border: 2px solid red;
  width: 100px;
  height: 100px;
}
2. Less 混合器传参

Less 混合器同样可以接收参数。

less 复制代码
// 定义一个带参数的混合器,用于设置不同颜色的背景
.background-color(@color) {
  background-color: @color;
}

// 调用带参数的混合器
.item {
  .background-color(green);
  width: 150px;
  height: 150px;
}

编译后的 CSS 代码如下:

css 复制代码
.item {
  background-color: green;
  width: 150px;
  height: 150px;
}

🧐通过传参,混合器可以根据不同的需求生成不同的样式。

4.1.4 混合器的区别与应用场景

1. 语法区别
  • Sass :使用 @mixin 定义混合器,@include 调用混合器。
  • Less:直接定义类或者 ID 作为混合器,调用时直接使用类名或 ID 名。
2. 功能区别
  • Sass:支持更复杂的逻辑和控制结构,如条件判断、循环等。
  • Less:语法相对简单,适合初学者快速上手。
3. 应用场景
  • Sass:适用于大型项目,需要处理复杂的样式逻辑和大量的代码复用。
  • Less:适用于小型项目或者对代码复杂度要求不高的场景。

4.2 函数

4.2.1 Sass内置函数

1. 颜色函数
  • lighten($color, $amount):用于将颜色变亮。
scss 复制代码
$base-color: blue;
.lightened {
  background-color: lighten($base-color, 20%);
}
  • darken($color, $amount):用于将颜色变暗。
scss 复制代码
$base-color: blue;
.darkened {
  background-color: darken($base-color, 20%);
}
2. 数学函数
  • round($number):对数字进行四舍五入。
scss 复制代码
$num: 3.6;
.rounded {
  font-size: round($num)px;
}
  • ceil($number):对数字向上取整。
scss 复制代码
$num: 3.2;
.ceiled {
  font-size: ceil($num)px;
}

4.2.2 Less内置函数

1. 颜色函数
  • lighten(@color, @amount):将颜色变亮。
less 复制代码
@base-color: blue;
.lightened {
  background-color: lighten(@base-color, 20%);
}
  • darken(@color, @amount):将颜色变暗。
less 复制代码
@base-color: blue;
.darkened {
  background-color: darken(@base-color, 20%);
}
2. 字符串函数
  • replace(@string, @pattern, @replacement):替换字符串中的内容。
less 复制代码
@str: "Hello, World!";
.replaced {
  content: replace(@str, "World", "Sass");
}

4.2.3 自定义函数

1. Sass 自定义函数

使用 @function 关键字定义自定义函数。

scss 复制代码
// 定义一个自定义函数,用于计算两个数的和
@function sum($num1, $num2) {
  @return $num1 + $num2;
}

// 使用自定义函数
.result {
  width: sum(100px, 20px);
}
2. Less 自定义函数

Less 中可以使用 JavaScript 代码来定义自定义函数。

less 复制代码
// 定义一个自定义函数,用于计算两个数的乘积
@multiply: `function(num1, num2) { return num1 * num2; }`;

// 使用自定义函数
.product {
  width: ~`@{multiply}(10, 5)`px;
}

👏通过自定义函数,可以根据项目的具体需求实现特定的功能。

第五章 继承与导入

5.1 继承

5.1.1 Sass 的继承语法

在 Sass 中,继承是一种强大的特性,它允许一个选择器继承另一个选择器的所有样式。使用 @extend 指令来实现继承。

示例代码

scss 复制代码
// 定义一个基础的样式类
.message {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333;
}

// 定义一个成功消息的样式类,继承自 .message
.success {
  @extend .message;
  background-color: #d4edda;
  border-color: #c3e6cb;
  color: #155724;
}

// 定义一个错误消息的样式类,继承自 .message
.error {
  @extend .message;
  background-color: #f8d7da;
  border-color: #f5c6cb;
  color: #721c24;
}

编译后的 CSS

css 复制代码
.message, .success, .error {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333;
}

.success {
  background-color: #d4edda;
  border-color: #c3e6cb;
  color: #155724;
}

.error {
  background-color: #f8d7da;
  border-color: #f5c6cb;
  color: #721c24;
}

可以看到,.success.error 类继承了 .message 类的所有样式,并且添加了自己的额外样式😎。

5.1.2 Less 的继承语法

在 Less 中,继承通过 :extend 伪类来实现。它可以让一个选择器继承另一个选择器的样式。

示例代码

less 复制代码
// 定义一个基础的样式类
.message {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333;
}

// 定义一个成功消息的样式类,继承自 .message
.success:extend(.message) {
  background-color: #d4edda;
  border-color: #c3e6cb;
  color: #155724;
}

// 定义一个错误消息的样式类,继承自 .message
.error:extend(.message) {
  background-color: #f8d7da;
  border-color: #f5c6cb;
  color: #721c24;
}

编译后的 CSS

css 复制代码
.message, .success, .error {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333;
}

.success {
  background-color: #d4edda;
  border-color: #c3e6cb;
  color: #155724;
}

.error {
  background-color: #f8d7da;
  border-color: #f5c6cb;
  color: #721c24;
}

同样,.success.error 类继承了 .message 类的样式,并添加了自己的样式👏。

5.1.3 继承的使用场景与注意事项

使用场景
  • 代码复用:当多个元素需要具有相同的基本样式时,可以将这些基本样式定义在一个选择器中,然后让其他选择器继承这些样式,避免代码重复。例如,在一个网站中,不同类型的按钮可能有相同的基本样式(如边框、内边距等),可以使用继承来实现。
  • 样式统一:确保不同元素的样式保持一致。比如,所有的提示信息都有相同的边框和内边距,通过继承可以方便地实现样式的统一。
注意事项
  • 性能问题:过度使用继承可能会导致生成的 CSS 文件变大,因为继承会将被继承的选择器和继承的选择器合并在一起。所以在使用继承时,要合理规划,避免不必要的继承。
  • 选择器优先级:继承不会影响选择器的优先级。如果需要改变样式的优先级,应该使用其他方法,如内联样式或更具体的选择器。

5.2 导入

5.2.1 Sass 的导入规则

在 Sass 中,可以使用 @import 指令来导入其他 Sass 文件。导入的文件内容会被合并到当前文件中进行编译。

示例代码

scss 复制代码
// 导入 variables.scss 文件
@import 'variables';

// 导入 mixins.scss 文件
@import 'mixins';

// 使用导入的变量和混合器
body {
  background-color: $body-bg-color;
  @include font-size(16px);
}

注意事项

  • 文件扩展名 :Sass 会自动处理 .scss.sass 文件的导入,所以在 @import 中可以省略文件扩展名。
  • 部分文件 :如果文件名以 _ 开头,Sass 会将其视为部分文件,不会单独编译,而是在被导入时合并到其他文件中。例如,_variables.scss 就是一个部分文件。

5.2.2 Less 的导入规则

在 Less 中,同样使用 @import 指令来导入其他 Less 文件。

示例代码

less 复制代码
// 导入 variables.less 文件
@import 'variables';

// 导入 mixins.less 文件
@import 'mixins';

// 使用导入的变量和混合器
body {
  background-color: @body-bg-color;
  .font-size(16px);
}

注意事项

  • 文件扩展名 :和 Sass 类似,Less 也可以省略 .less 文件扩展名。
  • 导入 CSS 文件 :如果导入的文件是 .css 文件,Less 会将其视为普通的 CSS 文件,不会对其进行编译,而是直接将其内容插入到当前文件中。

5.2.3 导入文件的编译处理

Sass
  • 编译过程 :当编译一个包含 @import 指令的 Sass 文件时,Sass 会将导入的文件内容合并到当前文件中,然后进行编译。编译后的结果是一个包含所有样式的 CSS 文件。
  • 部分文件的作用 :部分文件(以 _ 开头的文件)不会单独编译,而是在被导入时合并到其他文件中,这样可以更好地组织代码。
Less
  • 编译过程 :Less 编译器在处理 @import 指令时,会将导入的 Less 文件内容合并到当前文件中进行编译。如果导入的是 CSS 文件,会直接将其内容插入到当前文件中。
  • 动态导入:Less 支持动态导入,即在运行时根据条件导入不同的文件。例如:
less 复制代码
@condition: true;
@media (min-width: 768px) {
  @import (when (@condition = true)) 'desktop.less';
}

这样,只有当 @conditiontrue 且屏幕宽度大于等于 768px 时,才会导入 desktop.less 文件😃。

第六章 运算与控制指令

6.1 运算

6.1.1 Sass的运算规则

1. 数字运算
  • 加减运算:Sass 中数字的加减运算和数学中的基本一致,但要注意单位。如果单位相同,可以直接进行加减,例如:
scss 复制代码
$width1: 20px;
$width2: 10px;
.element {
  width: $width1 + $width2; // 结果为 30px
}
  • 乘除运算:乘法运算时,两个值不能同时带有单位,例如:
scss 复制代码
$width: 10px;
$multiplier: 2;
.element {
  width: $width * $multiplier; // 结果为 20px
}

除法运算在 Sass 中有一些特殊情况,需要使用括号或者将其作为变量或函数的一部分,例如:

scss 复制代码
$width: 20px;
.element {
  width: ($width / 2); // 结果为 10px
}
2. 颜色运算

颜色也可以进行运算,颜色的每个通道(红、绿、蓝)都会分别进行运算。例如:

scss 复制代码
$color1: #111111;
$color2: #222222;
.element {
  color: $color1 + $color2; // 结果为 #333333
}
3. 字符串运算

字符串可以使用 + 进行拼接,例如:

scss 复制代码
$prefix: "btn-";
$name: "primary";
.element {
  class: $prefix + $name; // 结果为 "btn-primary"
}

6.1.2 Less的运算规则

1. 数字运算
  • 加减乘除:Less 中的数字运算和 Sass 类似,但在除法运算上更加灵活,不需要像 Sass 那样严格的格式。例如:
less 复制代码
@width1: 20px;
@width2: 2px;
.element {
  width: @width1 / @width2; // 结果为 10px
}
  • 单位处理:Less 在运算时会尽量保留合适的单位,如果参与运算的单位不同,Less 会以第一个值的单位为准。例如:
less 复制代码
@width: 20px;
@height: 10em;
.element {
  width: @width + @height; // 结果为 30px(这里只是示例,实际使用中要注意单位统一)
}
2. 颜色运算

和 Sass 一样,Less 也可以对颜色进行运算,每个通道分别计算。例如:

less 复制代码
@color1: #111;
@color2: #222;
.element {
  color: @color1 + @color2; // 结果为 #333
}

6.1.3 颜色运算

1. 加法运算

颜色加法运算会将颜色的红、绿、蓝通道值分别相加,取值范围在 0 - 255 之间。例如:

scss 复制代码
$color1: #001122;
$color2: #112233;
.element {
  color: $color1 + $color2; // 结果为 #113355
}
2. 减法运算

减法运算则是将通道值相减,同样取值范围在 0 - 255 之间。例如:

scss 复制代码
$color1: #333333;
$color2: #111111;
.element {
  color: $color1 - $color2; // 结果为 #222222
}
3. 乘法和除法运算

乘法和除法运算会按比例改变颜色的亮度。例如:

scss 复制代码
$color: #555555;
.element {
  color: $color * 2; // 颜色变亮
  background-color: $color / 2; // 颜色变暗
}

6.2 控制指令

6.2.1 Sass的控制指令(if、for、each、while)

1. if 指令

if 指令用于根据条件判断返回不同的值。语法为 if(condition, value-if-true, value-if-false)。例如:

scss 复制代码
$is-large: true;
.element {
  width: if($is-large, 200px, 100px); // 结果为 200px
}
2. for 指令

for 指令用于循环生成样式。有两种形式:@for $var from <start> through <end>@for $var from <start> to <end>through 包含结束值,to 不包含结束值。例如:

scss 复制代码
@for $i from 1 through 3 {
  .item-#{$i} {
    width: 10px * $i;
  }
}

这会生成 .item-1.item-2.item-3 三个类,宽度分别为 10px、20px 和 30px。

3. each 指令

each 指令用于遍历列表或映射。例如:

scss 复制代码
$colors: red, green, blue;
@each $color in $colors {
  .btn-#{$color} {
    background-color: $color;
  }
}

这会生成 .btn-red.btn-green.btn-blue 三个类,背景颜色分别为红色、绿色和蓝色。

4. while 指令

while 指令会在条件为真时不断循环。例如:

scss 复制代码
$i: 1;
@while $i <= 3 {
  .box-#{$i} {
    height: 10px * $i;
  }
  $i: $i + 1;
}

这会生成 .box-1.box-2.box-3 三个类,高度分别为 10px、20px 和 30px。

6.2.2 Less的控制指令(when)

when 指令用于在 Less 中进行条件判断。例如:

less 复制代码
@width: 20px;
.element {
  .mixin() when (@width > 10px) {
    color: red;
  }
  .mixin();
}

这里当 @width 大于 10px 时,.element 的颜色会变为红色。

6.2.3 控制指令的应用场景

1. 动态生成样式

使用 foreach 指令可以根据规则动态生成多个样式类,减少重复代码。例如,在生成网格系统时,可以使用 for 循环生成不同宽度的列类:

scss 复制代码
@for $i from 1 through 12 {
  .col-#{$i} {
    width: (100% / 12) * $i;
  }
}
2. 条件样式

使用 ifwhen 指令可以根据不同条件应用不同的样式。例如,根据屏幕宽度应用不同的布局:

scss 复制代码
$is-mobile: false;
.element {
  display: if($is-mobile, block, flex);
}
3. 颜色主题切换

使用控制指令可以方便地实现颜色主题的切换。例如,通过 each 遍历颜色列表生成不同主题的样式:

scss 复制代码
$themes: ("light": #ffffff, "dark": #000000);
@each $theme, $color in $themes {
  .theme-#{$theme} {
    background-color: $color;
  }
}

🎉 通过这些运算和控制指令,我们可以让 CSS 代码更加灵活和高效,减少重复劳动,提高开发效率!

第七章 高级特性

7.1 Sass的高级特性

7.1.1 插值语法

插值语法是 Sass 中非常实用的一个特性,它允许你在 Sass 代码中动态地插入变量、表达式等内容。简单来说,就像是在一个句子里灵活地嵌入不同的词语一样😃。

  • 使用方式 :插值语法使用 #{} 来包裹需要插入的内容。例如,当你想要动态生成类名或者选择器时,就可以使用插值语法。
scss 复制代码
$prefix: "my-";
$element: "button";

.#{$prefix}#{$element} {
  color: blue;
}

在上面的代码中,通过插值语法将 $prefix$element 变量的值插入到选择器中,最终生成的 CSS 选择器为 .my-button

  • 应用场景:除了生成选择器,插值语法还可以用于属性名、属性值等。比如在动态设置字体家族时:
scss 复制代码
$font-family: "Arial";
body {
  font-#{"family"}: #{$font-family};
}

这里通过插值语法将属性名和属性值动态插入,使代码更加灵活。

7.1.2 函数式编程特性

Sass 支持函数式编程特性,这让代码的复用性和可维护性大大提高👍。

  • 自定义函数:你可以在 Sass 中定义自己的函数,就像在其他编程语言中一样。函数可以接收参数并返回值。
scss 复制代码
@function calculate-width($percentage) {
  @return $percentage * 100%;
}

div {
  width: calculate-width(0.5);
}

在这个例子中,定义了一个名为 calculate-width 的函数,它接收一个参数 $percentage,并返回该参数乘以 100% 的结果。在样式中调用这个函数,就可以动态计算宽度。

  • 内置函数 :Sass 还提供了许多内置函数,如颜色处理函数、数学函数等。例如,lighten() 函数可以用于调整颜色的亮度。
scss 复制代码
$base-color: blue;
div {
  background-color: lighten($base-color, 20%);
}

这里使用 lighten() 函数将 $base-color 的亮度提高了 20%

7.1.3 模块系统

Sass 的模块系统让代码的组织和管理变得更加方便👏。

  • @use 规则@use 规则用于导入其他 Sass 文件,并且可以指定命名空间。
scss 复制代码
// _base.scss
$primary-color: blue;

// main.scss
@use 'base' as b;

body {
  color: b.$primary-color;
}

在这个例子中,通过 @use 规则导入了 _base.scss 文件,并使用 as b 指定了命名空间。在 main.scss 中可以通过命名空间来访问 _base.scss 中的变量。

  • @forward 规则@forward 规则用于转发其他 Sass 文件的内容,使得导入该文件的其他文件可以直接访问被转发文件的内容。
scss 复制代码
// _base.scss
$primary-color: blue;

// _utils.scss
@forward 'base';

// main.scss
@use 'utils';

body {
  color: utils.$primary-color;
}

这里 _utils.scss 通过 @forward 规则转发了 _base.scss 的内容,main.scss 导入 _utils.scss 后就可以直接访问 _base.scss 中的变量。

7.2 Less的高级特性

7.2.1 动态导入

Less 的动态导入特性允许你在运行时根据条件导入不同的 Less 文件,就像在游戏中根据不同的关卡选择不同的装备一样😎。

  • 基本语法 :使用 @import 语句进行导入,并且可以使用变量来动态指定导入的文件路径。
less 复制代码
@theme: "dark";
@import "@{theme}.less";

在这个例子中,根据 @theme 变量的值动态导入相应的 Less 文件。如果 @theme 的值为 "dark",则会导入 dark.less 文件。

7.2.2 命名空间与访问器

Less 的命名空间与访问器特性可以帮助你更好地组织和管理代码,避免命名冲突🤝。

  • 命名空间:可以将一组样式封装在一个命名空间中。
less 复制代码
#my-namespace {
  .my-class {
    color: red;
  }
}

这里 #my-namespace 就是一个命名空间,.my-class 样式被封装在其中。

  • 访问器 :使用 #namespace > .class 或者 #namespace.class 的方式来访问命名空间中的样式。
less 复制代码
div {
  #my-namespace > .my-class();
}

在这个例子中,通过访问器调用了 #my-namespace 命名空间中的 .my-class 样式。

7.2.3 循环

Less 支持循环,这可以让你批量生成样式,提高开发效率🚀。

  • for 循环 :可以使用 for 循环来生成一系列样式。
less 复制代码
.loop(@i) when (@i > 0) {
  .item-@{i} {
    width: (@i * 10)px;
  }
  .loop(@i - 1);
}
.loop(5);

在这个例子中,定义了一个递归的 for 循环,从 5 开始递减,每次生成一个类名包含序号的样式,并且设置不同的宽度。最终会生成 .item-5.item-1 的样式。

第八章 性能优化与最佳实践

8.1 性能优化

8.1.1 代码压缩

代码压缩是提升性能的重要手段之一😃。在开发过程中,为了保证代码的可读性和可维护性,我们会添加大量的注释、空格和换行符,但这些在生产环境中是不必要的,会增加代码的体积,影响加载速度。

1. 压缩的好处
  • 减少文件大小:通过去除不必要的字符,能显著减小代码文件的体积。例如,一个原本 100KB 的代码文件,经过压缩后可能只有 60KB,这样在网络传输时就会更快🚀。
  • 提高加载速度:文件变小了,浏览器下载代码的时间就会缩短,从而加快页面的加载速度,提升用户体验。
2. 压缩工具
  • UglifyJS:常用于压缩 JavaScript 代码。它可以对代码进行各种优化,如变量名替换、去除无用代码等。使用方法很简单,安装后在命令行中输入相应的命令即可完成压缩。
  • CSSNano:专门用于压缩 CSS 代码。它能去除注释、空格、冗余的代码等,让 CSS 文件更加简洁。

8.1.2 避免不必要的嵌套

在编写代码时,过度的嵌套会让代码变得复杂,降低性能,同时也不利于代码的维护🧐。

1. 嵌套带来的问题
  • 性能损耗:每一层嵌套都会增加浏览器解析代码的难度和时间。例如,在 CSS 中,多层嵌套的选择器会让浏览器在匹配元素时花费更多的时间。
  • 代码可读性差:过多的嵌套会让代码结构变得混乱,开发人员很难快速理解代码的逻辑。
2. 避免方法
  • 保持扁平结构:尽量减少嵌套层级,让代码结构更加扁平。比如在编写 HTML 和 CSS 时,使用类名来直接选择元素,而不是通过多层嵌套的选择器。
  • 模块化开发:将代码拆分成多个小模块,每个模块负责特定的功能,这样可以避免在一个模块中出现过多的嵌套。

8.1.3 缓存与预编译

缓存和预编译可以提高代码的执行效率,减少重复计算的时间⏱️。

1. 缓存
  • 数据缓存:在代码中,有些数据的获取可能比较耗时,比如从数据库中查询数据或者进行复杂的计算。可以将这些数据缓存起来,下次需要使用时直接从缓存中获取,而不是重新计算或查询。例如,在 JavaScript 中可以使用对象来存储缓存数据。
javascript 复制代码
let cache = {};
function getData(key) {
    if (cache[key]) {
        return cache[key];
    }
    // 模拟耗时操作
    let data = someExpensiveOperation(key);
    cache[key] = data;
    return data;
}
  • 浏览器缓存:利用浏览器的缓存机制,如本地存储(Local Storage)和会话存储(Session Storage),可以将一些不经常变化的数据存储在浏览器中,下次访问时直接从缓存中读取,减少网络请求。
2. 预编译
  • 模板预编译:在前端开发中,经常会使用模板引擎来生成 HTML 内容。可以在服务器端对模板进行预编译,将编译后的结果发送到客户端,这样客户端就不需要再进行编译,直接使用预编译的结果即可,提高了页面的渲染速度。
  • 代码预编译:对于一些需要编译的语言,如 TypeScript、Sass 等,可以在开发过程中提前进行编译,将编译后的代码部署到生产环境,避免在运行时进行编译,提高性能。

8.2 最佳实践

8.2.1 代码结构组织

良好的代码结构组织可以提高代码的可维护性和可扩展性👏。

1. 分层架构
  • 表现层:负责与用户交互的界面部分,如 HTML、CSS 和 JavaScript 中的 DOM 操作。
  • 业务逻辑层:处理业务逻辑的部分,如数据的处理、计算等。
  • 数据访问层:负责与数据源(如数据库、API 等)进行交互,获取和存储数据。
2. 模块化开发
  • 将代码拆分成多个模块:每个模块只负责一个特定的功能,模块之间通过接口进行交互。这样可以提高代码的复用性,同时也方便团队成员分工协作。
  • 使用模块化规范:如 CommonJS、ES6 模块等,确保模块之间的兼容性和可维护性。

8.2.2 变量与混合器的命名规范

规范的命名可以让代码更易读、易理解,减少开发过程中的错误😎。

1. 变量命名规范
  • 使用有意义的名称 :变量名应该能够清晰地表达其用途,避免使用无意义的名称。例如,使用 userName 而不是 a
  • 遵循命名风格:常见的命名风格有驼峰命名法(camelCase)和下划线命名法(snake_case),选择一种并保持一致。
2. 混合器命名规范
  • 描述功能 :混合器的名称应该能够准确描述其功能,例如 border-radius-mixin 表示这个混合器用于设置圆角边框。
  • 避免重复:避免使用与已有混合器或变量相同的名称,以免引起混淆。

8.2.3 团队协作中的使用规范

在团队协作中,统一的使用规范可以提高开发效率,减少沟通成本🤝。

1. 代码风格统一
  • 使用代码格式化工具:如 Prettier、ESLint 等,确保团队成员的代码风格一致。
  • 制定代码规范文档:明确代码的缩进、注释、命名等方面的规范,让团队成员有章可循。
2. 版本控制
  • 使用版本控制系统:如 Git,方便团队成员对代码进行管理和协作。
  • 遵循分支管理策略:如 GitFlow、GitHub Flow 等,确保代码的开发和发布流程有序进行。
3. 沟通与协作
  • 定期进行代码审查:团队成员相互审查代码,发现问题及时解决,提高代码质量。
  • 保持良好的沟通:及时交流开发过程中的问题和进展,避免重复劳动和冲突。

第九章 Sass和Less的比较与选择

9.1 语法比较

9.1.1 基础语法差异

1. 文件扩展名与引入方式
  • Sass :有两种文件扩展名,.sass.scss.sass 采用缩进式语法,不使用大括号和分号;.scss 则使用类似 CSS 的大括号和分号语法。引入方式通常是在 CSS 中使用 @import 语句,例如 @import 'styles.sass';@import 'styles.scss';
  • Less :文件扩展名为 .less,引入方式同样使用 @import,如 @import 'styles.less';
2. 变量声明
  • Sass :使用 $ 符号来声明变量,例如:
scss 复制代码
$primary-color: #007bff;
body {
  color: $primary-color;
}
  • Less :使用 @ 符号声明变量,示例如下:
less 复制代码
@primary-color: #007bff;
body {
  color: @primary-color;
}
3. 嵌套规则
  • Sass:支持更复杂的嵌套,不仅可以嵌套选择器,还能嵌套属性。例如:
scss 复制代码
nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }
  li { display: inline-block; }
  a {
    display: block;
    padding: 6px 12px;
    text-decoration: none;
  }
}
  • Less:也支持选择器嵌套,但属性嵌套相对没那么灵活。示例:
less 复制代码
nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }
  li { display: inline-block; }
  a {
    display: block;
    padding: 6px 12px;
    text-decoration: none;
  }
}

9.1.2 高级特性差异

1. 混合器(Mixins)
  • Sass :使用 @mixin 定义混合器,使用 @include 调用。混合器可以接受参数,并且支持默认值。例如:
scss 复制代码
@mixin border-radius($radius: 5px) {
  -webkit-border-radius: $radius;
  -moz-border-radius: $radius;
  border-radius: $radius;
}
.button {
  @include border-radius(3px);
}
  • Less :使用 .# 定义混合器,调用时直接使用混合器名称。参数和默认值的使用方式与 Sass 类似。示例:
less 复制代码
.border-radius(@radius: 5px) {
  -webkit-border-radius: @radius;
  -moz-border-radius: @radius;
  border-radius: @radius;
}
.button {
  .border-radius(3px);
}
2. 函数
  • Sass :内置了丰富的函数,如颜色函数、数学函数等。还可以自定义函数,使用 @function 定义。例如自定义一个计算百分比的函数:
scss 复制代码
@function percentage($value, $total) {
  @return ($value / $total) * 100%;
}
.element {
  width: percentage(200px, 800px);
}
  • Less:也有一些内置函数,但相对 Sass 来说数量较少。自定义函数的语法不如 Sass 直观。
3. 继承
  • Sass :使用 @extend 实现选择器的继承。例如:
scss 复制代码
.message {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333;
}
.success {
  @extend .message;
  border-color: green;
}
  • Less:没有专门的继承语法,但可以通过混合器来实现类似的效果。

9.2 性能比较

9.2.1 编译速度

  • Sass:编译速度相对较慢,尤其是在处理大型项目时。这是因为 Sass 的功能更丰富,语法解析和处理相对复杂。
  • Less:编译速度较快,对于小型项目或需要快速迭代的项目来说,Less 的编译速度优势明显。

9.2.2 代码体积

  • Sass:生成的 CSS 代码体积可能会稍大,特别是在使用大量混合器和嵌套时。因为混合器会将代码复制到使用的地方,导致代码重复。
  • Less:生成的代码体积相对较小,在优化代码方面表现较好。

9.3 社区与生态系统比较

9.3.1 社区活跃度

  • Sass:社区非常活跃,有大量的开发者使用和贡献。在 GitHub 上有很多与 Sass 相关的项目和插件,文档也非常丰富。许多知名的前端框架和工具都支持 Sass。
  • Less:社区活跃度也不错,但相对 Sass 来说稍逊一筹。不过也有一定数量的开发者在使用和维护相关项目。

9.3.2 插件与工具支持

  • Sass:有很多强大的插件和工具,如 SassLint 用于代码检查,Webpack 可以很好地集成 Sass 进行打包。还有许多 Sass 框架可供选择,如 Bourbon、Compass 等。
  • Less:也有一些插件和工具,如 Lesshint 用于代码检查,在 Webpack 中也能方便地使用。但插件和框架的数量相对 Sass 较少。

9.4 选择建议

9.4.1 根据项目需求选择

  • 如果项目对性能要求较高,需要快速编译和较小的代码体积,且功能需求相对简单,那么 Less 是一个不错的选择👍。
  • 如果项目需要复杂的功能,如大量的混合器、自定义函数、颜色处理等,并且对社区支持和生态系统有较高要求,那么 Sass 更合适👏。

9.4.2 根据团队技术栈选择

  • 如果团队成员对 Ruby 有一定了解,并且熟悉 Sass 的语法和生态,那么选择 Sass 可以充分发挥团队的技术优势🤝。
  • 如果团队主要使用 JavaScript 技术栈,并且希望与现有工具和框架更好地集成,那么 Less 可能更容易上手和维护😃。
相关推荐
stayong16 小时前
市面主流跨端开发框架对比
前端
庞囧16 小时前
大白话讲 React 原理:Scheduler 任务调度器
前端
东华帝君16 小时前
react 虚拟滚动列表的实现 —— 动态高度
前端
CptW16 小时前
手撕 Promise 一文搞定
前端·面试
温宇飞16 小时前
Web 异步编程
前端
腹黑天蝎座16 小时前
浅谈React19的破坏性更新
前端·react.js
东华帝君16 小时前
react组件常见的性能优化
前端
第七种黄昏16 小时前
【前端高频面试题】深入浏览器渲染原理:从输入 URL 到页面绘制的完整流程解析
前端·面试·职场和发展
angelQ16 小时前
前端fetch手动解析SSE消息体,字符串双引号去除不掉的问题定位
前端·javascript
Huangyi16 小时前
第一节:Flow的基础知识
android·前端·kotlin