CSS怎么在Next.js项目中引入全局Sass样式_在_app.js文件中导入全局scss

浅婷君_2304

浅婷君_2304

2026-04-28

514人浏览

原创

_app.js 在 Next.js 13+ app 目录模式下被废弃,仅对 pages 目录生效;若项目使用 app/layout.tsx,则 _app.js 完全被忽略,其导入的全局 Sass 样式(如 globals.scss)不会注入,且无报错。

css怎么在next.js项目中引入全局sass样式_在_app.js文件中导入全局scss

不能在 _app.js 中直接导入全局 Sass 样式(如 globals.scss)——Next.js 13+ 的 app 目录模式下,_app.js 已被废弃,且该文件在 app 目录中完全不生效。

为什么 _app.js 在 app 目录里不起作用

Next.js 13 引入 app 目录后,路由和布局逻辑彻底重构:_app.js 只对旧的 pages 目录有效。如果你项目使用的是 app/layout.tsx(绝大多数新项目),那么 _app.js 文件会被忽略,任何在里面写的 import '../styles/globals.scss' 都不会触发样式注入,控制台也不会报错,但样式就是不生效。

  • 检查项目结构:存在 app/ 目录 → 必须用 app/layout.tsx 导入全局 Sass
  • 若同时存在 pages/ 和 app/,两者共存但样式系统隔离,_app.js 只影响 pages/ 下的页面
  • 强行保留 _app.js 并期望它控制整个应用,会导致样式漏加载、SSR/CSR 不一致、热更新失效等问题

正确做法:在 app/layout.tsx 中导入 .scss 文件

这是 Next.js 官方唯一支持的全局 Sass 入口点。只要确保 Sass 依赖已安装(npm install sass),就可以直接 import 普通 .scss 文件(非模块化)。

  • 路径必须是相对路径,从 app/layout.tsx 出发可解析到,例如:import '@/styles/globals.scss' 或 import '../styles/globals.scss'
  • 文件名不限于 globals.scss,但建议语义清晰,避免与 .module.scss 混淆
  • 导入语句必须放在 layout.tsx 的顶层(不能包裹在组件函数内,也不能用 dynamic import())
  • 样式会注入到 ,并在所有子路由中持久存在(注意:Next.js 不会在路由切换时卸载它,所以只放真正全局的重置、字体、主题变量等)

示例:app/layout.tsx

Expanso json-flatten
Expanso json-flatten

通过 CLI 或 MCP 服务器,使用 Expanso Edge 管道扁平化嵌套 JSON 对象。

下载
import './globals.scss'

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    
      {children}
    
  )
}

常见错误:Sass 编译失败或样式未渲染

即使路径和导入写对了,也可能遇到无声失败:

  • Cannot find module 'sass':运行 npm install sass,不是 sass-loader 或 node-sass(Next.js 内置支持 sass 包)
  • SCSS 语法报错但页面没提示:检查是否用了 @use 或 @forward 引入了未安装的第三方库(如 Bootstrap Sass),这类导入在全局上下文中容易因路径或配置缺失而静默跳过
  • 样式只在客户端生效、服务端无 CSS:确认没有在 layout.tsx 中用条件判断包裹 import(如 if (typeof window !== 'undefined')),全局样式必须同步导入
  • 字体或变量未生效:Sass 中的 @font-face 或 :root 声明需位于顶层,不能嵌套在选择器内;CSS 自定义属性推荐用 :root {} 而非 html {}

如果必须兼容 pages 和 app 目录

极少数混合迁移项目需要双入口,此时要分开处理:

  • app/layout.tsx:导入 app/styles/globals.scss
  • pages/_app.tsx:导入 styles/globals.scss(仅作用于 pages/ 下的页面)
  • 两个文件不能共用同一份 SCSS —— 因为 @import 和 @use 行为不同,且变量作用域不互通,混用会导致重复定义或丢失

最稳妥的方式是逐步将 pages/ 迁移进 app/,长期维护两套全局样式成本很高,尤其涉及主题切换、RTL 支持等复杂场景。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关专题

更多
css
css

css是层叠样式表,用来表现HTML或XML等文件样式的计算机语言,不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

5216

6

css居中
css居中

css居中:1、通过“margin: 0 auto; text-align: center”实现水平居中;2、通过“display:flex”实现水平居中;3、通过“display:table-cell”和“margin-left”实现居中。本专题为大家提供css居中的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.27

1117

5

css如何插入图片
css如何插入图片

cssCSS是层叠样式表(Cascading Style Sheets)的缩写。它是一种用于描述网页或应用程序外观和样式的标记语言。CSS可以控制网页的字体、颜色、布局、大小、背景、边框等方面,使得网页的外观更加美观和易于阅读。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.28

1998

6

css超出显示...
css超出显示...

在CSS中,当文本内容超出容器的宽度或高度时,可以使用省略号来表示被隐藏的文本内容。本专题为大家提供css超出显示...的相关文章,相关教程,供大家免费体验。

2023.08.01

3986

7

css字体颜色
css字体颜色

CSS中,字体颜色可以通过属性color来设置,用于控制文本的前景色,字体颜色在网页设计中起到很重要的作用,具有以下表现作用:1、提升可读性;2、强调重点信息;3、营造氛围和美感;4、用于呈现品牌标识或与品牌形象相符的风格。

2023.08.10

8245

11

什么是css
什么是css

CSS是层叠样式表(Cascading Style Sheets)的缩写,是一种用于描述网页(或其他基于 XML 的文档)样式与布局的标记语言,CSS的作用和意义如下:1、分离样式和内容;2、页面加载速度优化;3、实现响应式设计;4、确保整个网站的风格和样式保持统一。

2023.08.10

6991

7

css三角形怎么写
css三角形怎么写

CSS可以通过多种方式实现三角形形状,本专题为大家提供css三角形怎么写的相关教程,大家可以免费体验。

2023.08.21

2297

9

css设置文字颜色
css设置文字颜色

CSS(层叠样式表)可以用于设置文字颜色,这样做有以下好处和优势:1、增加网页的可视化效果;2、突出显示某些重要的信息或关键字;3、增强品牌识别度;4、提高网页的可访问性;5、引起不同的情感共鸣。

2023.08.22

3351

5

css禁止点击事件
css禁止点击事件

实现css禁止点击事件的方法有使用CSS的pointer-events属性和使用JavaScript禁用点击事件。本专题为大家提供点击事件相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

2953

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.6万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 6.1万人学习

CSS教程
CSS教程

共754课时 | 99.4万人学习