从0死磕全栈之在 Next.js 中使用 Sass

Next.js 原生支持 Sass(Syntactically Awesome Style Sheets),让你可以轻松地在项目中使用 .scss.sass 文件编写样式。本文将详细介绍如何在 Next.js 应用中集成 Sass,并提供实用的代码示例,涵盖基础用法、CSS Modules、变量导出以及自定义配置等内容。


1. 安装 Sass

首先,你需要安装 sass 包作为开发依赖:

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

安装完成后,Next.js 就能自动识别 .scss.sass 文件。

💡 提示

  • .scss 使用类似 CSS 的语法(推荐初学者使用)
  • .sass 使用缩进式语法(称为 "Indented Syntax")

2. 全局 Sass 样式

你可以在 app 目录下的根布局(如 app/layout.tsx)中导入全局 .scss 文件:

app/globals.scss

scss 复制代码
body {
  margin: 0;
  font-family: Arial, sans-serif;
  background-color: #f5f5f5;
}

.title {
  color: #333;
  font-size: 2rem;
}

app/layout.tsx

tsx 复制代码
import './globals.scss';

export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <html lang="en">
      <body>{children}</body>
    </html>
  );
}

3. 使用 CSS Modules(组件级样式)

Next.js 支持通过 CSS Modules 实现局部作用域的 Sass 样式。只需将文件命名为 [name].module.scss 即可。

app/components/Button.module.scss

scss 复制代码
.btn {
  padding: 10px 20px;
  border: none;
  border-radius: 4px;
  background-color: #0070f3;
  color: white;
  cursor: pointer;
  transition: background-color 0.3s;

  &:hover {
    background-color: #0051b3;
  }
}

app/components/Button.tsx

tsx 复制代码
import styles from './Button.module.scss';

export default function Button({ children }: { children: React.ReactNode }) {
  return <button className={styles.btn}>{children}</button>;
}

✅ 这种方式避免了样式冲突,非常适合组件化开发。


4. 导出 Sass 变量到 JavaScript

Next.js 支持从 Sass 文件中导出变量,供 JavaScript 使用。这在需要动态设置样式(如主题色)时非常有用。

app/styles/variables.module.scss

scss 复制代码
$primary-color: #64ff00;

:export {
  primaryColor: $primary-color;
}

app/page.tsx

tsx 复制代码
import variables from './styles/variables.module.scss';

export default function HomePage() {
  return (
    <h1 style={{ color: variables.primaryColor }}>
      Hello, Next.js with Sass!
    </h1>
  );
}

📌 注意:必须使用 :export 块才能将 Sass 变量暴露给 JS。


5. 自定义 Sass 配置

你可以在 next.config.ts(或 .js)中通过 sassOptions 自定义 Sass 行为。

示例 1:注入全局变量

ts 复制代码
// next.config.ts
import type { NextConfig } from 'next';

const nextConfig: NextConfig = {
  sassOptions: {
    additionalData: `$primary: #0070f3;`, // 所有 Sass 文件自动可用
  },
};

export default nextConfig;

现在你可以在任意 .scss 文件中直接使用 $primary,无需导入。

示例 2:更换 Sass 实现

Next.js 默认使用 sass(Dart Sass),但你也可以指定其他实现,比如 sass-embedded

ts 复制代码
const nextConfig: NextConfig = {
  sassOptions: {
    implementation: 'sass-embedded',
  },
};

6. 最佳实践建议

  • 优先使用 .scss:语法与 CSS 兼容,学习成本低。
  • 组件样式用 .module.scss:避免全局污染。
  • 全局变量集中管理 :通过 :exportadditionalData 统一主题色、间距等。
  • 避免过度嵌套:Sass 虽支持深层嵌套,但可能导致生成的 CSS 选择器过于复杂。

总结

Next.js 对 Sass 的集成非常友好,无论是全局样式、模块化组件样式,还是变量共享,都能轻松实现。通过合理使用 Sass 的强大功能,你可以构建出结构清晰、易于维护的现代 Web 应用。


✅ 现在就去你的 Next.js 项目中试试 Sass 吧!

相关推荐
Moment3 分钟前
富文本编辑器技术选型,到底是 Prosemirror 还是 Tiptap 好 ❓❓❓
前端·javascript·面试
xkxnq7 分钟前
第二阶段:Vue 组件化开发(第 18天)
前端·javascript·vue.js
晓得迷路了9 分钟前
栗子前端技术周刊第 112 期 - Rspack 1.7、2025 JS 新星榜单、HTML 状态调查...
前端·javascript·html
怕浪猫12 分钟前
React从入门到出门 第五章 React Router 配置与原理初探
前端·javascript·react.js
jinmo_C++12 分钟前
从零开始学前端 · HTML 基础篇(一):认识 HTML 与页面结构
前端·html·状态模式
鹏多多18 分钟前
前端2025年终总结:借着AI做大做强再创辉煌
前端·javascript
小Tomkk26 分钟前
⭐️ StarRocks Web 使用介绍与实战指南
前端·ffmpeg
不一样的少年_30 分钟前
产品催: 1 天优化 Vue 官网 SEO?我用这个插件半天搞定(不重构 Nuxt)
前端·javascript·vue.js
-dcr32 分钟前
50.智能体
前端·javascript·人工智能·ai·easyui
行者9642 分钟前
Flutter跨平台开发适配OpenHarmony:进度条组件的深度实践
开发语言·前端·flutter·harmonyos·鸿蒙