程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • Vue2

  • Vue3

  • vue3 + TS 项目集成

    • 集成element-plus
    • 项目配置 src 别名
    • 项目配置环境变量
    • 项目集成 SVG 图标
    • 项目集成 SASS(SCSS)
      • 1. SCSS 语法的基本支持
      • 2. 添加全局 SCSS 样式
        • 创建 `src/styles/index.scss`
        • 创建 `src/styles/reset.scss`
      • 3. 在 `main.ts` 中引入全局样式
      • 4. 配置全局 SCSS 变量
      • 5. 配置 Vite 让全局变量自动引入
        • 修改 `vite.config.ts`
      • 6. 测试全局 SCSS 配置
    • 项目集成 Mock 数据
    • 项目集成axios二次封装
    • 项目集成 vite调试工具
    • 项目集成自动注册组件
    • 项目集成自动导入 API
  • Vue全家桶
  • vue3 + TS 项目集成
scholar
2025-04-30
目录

项目集成 SASS(SCSS)

# 项目集成 SASS(SCSS)

在 Vue3 + Vite 项目中,我们可以使用 SASS(SCSS) 作为 CSS 预处理器,以提高样式的可维护性、复用性和开发效率。


# 1. SCSS 语法的基本支持

Vite 本身已经内置支持 SCSS(SASS),因此 无需额外安装 sass 和 sass-loader。如果你的项目已经安装了 styleLint,那么 SCSS 语法已经可用。

在 Vue 组件 中,我们可以直接使用 lang="scss" 来编写 SCSS 代码:

<style scoped lang="scss">
.container {
  color: red;
  font-size: 16px;
}
</style>
1
2
3
4
5
6

📌 说明

  • lang="scss":指定样式的语言为 SCSS,否则默认是普通的 CSS。
  • scoped:表示该样式仅作用于当前组件,不会影响其他组件。

# 2. 添加全局 SCSS 样式

虽然我们可以在每个组件内使用 lang="scss",但很多样式是 全局通用的,例如:

  • 重置默认样式
  • 基础布局
  • 字体、颜色变量
  • 公共混入(mixins)

因此,我们需要在 src/styles 目录 下创建一个全局 SCSS 文件:

# 创建 src/styles/index.scss

@import './reset.scss'; // 引入重置默认样式
@import './variable.scss'; // 引入全局变量
1
2

# 创建 src/styles/reset.scss

/* 清除默认样式 */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  font-family: Arial, sans-serif;
  background-color: #f5f5f5;
}
1
2
3
4
5
6
7
8
9
10
11

# 3. 在 main.ts 中引入全局样式

为了让 index.scss 在项目的 所有组件 中生效,我们需要在 main.ts 全局引入样式。

修改 main.ts

import '@/styles/index.scss'; // 引入全局 SCSS 样式
1

📌 说明

  • @/styles/index.scss:@ 代表 src 目录,Vite 配置了别名,避免 ../../styles 这样的相对路径。

# 4. 配置全局 SCSS 变量

为什么要配置全局变量?

  • 避免在每个组件的 <style> 内部 重复定义 颜色、字体等样式变量。
  • 让所有组件都可以 直接使用 预定义的变量,例如 $primary-color、$font-size。
  • 提高样式的 一致性 和 维护性。

创建 src/styles/variable.scss

// 颜色变量
$primary-color: #409eff;
$success-color: #67c23a;
$warning-color: #e6a23c;
$error-color: #f56c6c;

// 字体大小
$font-size-base: 14px;
$font-size-lg: 16px;
$font-size-sm: 12px;

// 边距
$padding-base: 10px;
$margin-base: 10px;
1
2
3
4
5
6
7
8
9
10
11
12
13
14

在 Vue 组件中使用变量

如果不做任何配置,在 .vue 组件中是无法直接使用 variable.scss 变量的:

<style scoped lang="scss">
.button {
  color: $primary-color; // ❌ 报错:未定义变量
}
</style>
1
2
3
4
5

为了解决这个问题,我们需要 修改 vite.config.ts,让 Vue 组件的 SCSS 自动引入 variable.scss。


# 5. 配置 Vite 让全局变量自动引入

我们需要在 Vite 配置文件 vite.config.ts 中,为 SCSS 添加全局变量。

# 修改 vite.config.ts

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import path from 'path';

export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src'),
    },
  },
  css: {
    preprocessorOptions: {
      scss: {
        // additionalData: '@import "@/styles/variable.scss";', // 让所有 SCSS 文件自动引入变量
        // ✅ 推荐使用 `@use` 而不是 `@import`
        additionalData: `@use "@/styles/variable.scss" as *;`,
      },
    },
  },
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

📌 说明

  • preprocessorOptions.scss.additionalData
    
    1

    :

    • 这个配置让 所有 .scss 文件 自动引入 variable.scss,这样就不需要在每个组件中手动 @import。
  • @import "@/styles/variable.scss";
    
    1

    :

    • 注意:路径必须以 @ 开头(代表 src 目录)。
    • 末尾必须有 ;(分号),否则 Vite 解析时会报错。

# 6. 测试全局 SCSS 配置

在 Vue 组件中使用全局 SCSS 变量

<template>
  <button class="custom-btn">全局 SCSS 变量按钮</button>
</template>

<style scoped lang="scss">
.custom-btn {
  background-color: $primary-color; // 直接使用全局变量
  color: white;
  padding: $padding-base;
  font-size: $font-size-base;
  border: none;
  border-radius: 5px;
  cursor: pointer;
}
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

运行项目,检查样式

运行 pnpm run dev,检查按钮是否正确显示 primary-color 颜色,并且没有 SCSS 变量报错。

编辑此页 (opens new window)
项目集成 SVG 图标
项目集成 Mock 数据

← 项目集成 SVG 图标 项目集成 Mock 数据→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式