当前位置: 首页 > news >正文

Next.js 独立开发教程(三):CSS 样式的完整指南

 系列文章目录

Next.js 开发教程(一):入门指南-CSDN博客

Next.js 开发教程(二):从零构建仪表盘应用-CSDN博客

有兴趣的可以蹲个后续,我会陆续发布一系列的文章。


目录

 系列文章目录

1. 样式在 Next.js 中的基本支持

2. 全局 CSS 文件

2.1 创建全局 CSS 文件

2.2 在 `_app.js` 中引入全局样式

3. CSS 模块:组件级样式

3.1 创建一个样式模块文件

3.2 使用组件并查看效果

4. 使用 Sass/SCSS 提升样式能力

4.1 安装 Sass

4.2 创建 SCSS 文件

5. 使用 CSS-in-JS:`styled-jsx`

5.1 在组件中使用 `styled-jsx`

5.2 优势与局限性

6. 样式优化和性能提升

6.1 样式的懒加载

6.2 使用 Tailwind CSS

7. 实现仪表盘样式的最佳实践

7.1 使用布局组件

7.2 应用到仪表盘页面

8. 总结

相关内容


在现代 Web 开发中,样式是一个至关重要的部分。一个优雅的 UI 能极大提升用户体验,而在使用 Next.js 开发应用时,其对 CSS 的强大支持为开发者提供了灵活性和高效性。从基础的 CSS 文件到模块化的 CSS,再到流行的 CSS-in-JS 和预处理器,Next.js 几乎涵盖了开发者可能用到的所有样式方案。

本篇教程以 Next.js 官方仪表盘应用开发教程的 "CSS 样式" 部分为基础,全面解析如何在 Next.js 中处理 CSS,并引导读者使用最佳实践完成一个样式优雅的仪表盘应用。

1. 样式在 Next.js 中的基本支持

Next.js 默认支持多种样式方案,无需额外配置即可开始使用。这些方案包括:

  • 全局 CSS 文件:适用于需要全局共享的样式规则。
  • CSS 模块:用于组件级别的样式,具备模块化和自动作用域功能。
  • Sass/SCSS 支持:通过安装依赖支持更复杂的样式逻辑。
  • CSS-in-JS:如 `styled-jsx` 和第三方库(如 Emotion 和 Styled Components)。

接下来,我们将逐一介绍这些方案,并结合仪表盘应用进行具体实现。

2. 全局 CSS 文件

全局样式适用于跨页面共享的样式规则,比如字体定义、基础布局、以及通用的重置样式。在 Next.js 中,您可以通过在 `pages/_app.js` 中引入 CSS 文件来定义全局样式。

2.1 创建全局 CSS 文件

首先,在项目的 `styles` 目录下创建一个 `globals.css` 文件:

/* styles/globals.css */
body {font-family: Arial, sans-serif;margin: 0;padding: 0;background-color: #f4f4f4;
}h1 {color: #333;
}a {text-decoration: none;color: #0070f3;
}a:hover {text-decoration: underline;
}

2.2 在 `_app.js` 中引入全局样式

Next.js 的 `pages/_app.js` 文件用于控制全局布局和状态。在这里引入 `globals.css` 文件:

// pages/_app.js
import '../styles/globals.css';export default function MyApp({ Component, pageProps }) {return <Component {...pageProps} />;
}

此时,`globals.css` 中的样式将自动应用到整个应用中,无需额外配置。

3. CSS 模块:组件级样式

CSS 模块是 Next.js 的强大功能之一,它允许我们为每个组件定义独立的样式,自动作用域到对应的组件,避免样式冲突。

3.1 创建一个样式模块文件

以创建一个按钮组件为例,在 `components` 目录中添加 `Button.js` 和 `Button.module.css` 文件:

// components/Button.js
import styles from './Button.module.css';export default function Button({ children }) {return <button className={styles.button}>{children}</button>;
}

/* components/Button.module.css */
.button {background-color: #0070f3;color: white;padding: 10px 20px;border: none;border-radius: 5px;cursor: pointer;
}.button:hover {background-color: #005bb5;
}


3.2 使用组件并查看效果

在仪表盘页面中引入 `Button` 组件:

// pages/dashboard.js
import Button from '../components/Button';export default function Dashboard() {return (<div><h1>仪表盘</h1><Button>点击我</Button></div>);
}

此时,按钮组件会应用定义在 `Button.module.css` 中的样式。

---

4. 使用 Sass/SCSS 提升样式能力

Next.js 内置对 Sass 的支持,使开发者可以使用变量、嵌套规则和混入等高级特性来编写更强大的样式规则。

4.1 安装 Sass

在项目中安装 Sass 依赖:

npm install sass

4.2 创建 SCSS 文件

修改全局样式为 SCSS 文件格式。将 `globals.css` 重命名为 `globals.scss`,并使用 SCSS 语法:

/* styles/globals.scss */
$primary-color: #0070f3;body {font-family: Arial, sans-serif;margin: 0;padding: 0;background-color: #f4f4f4;
}h1 {color: $primary-color;
}a {text-decoration: none;color: $primary-color;&:hover {text-decoration: underline;}
}

在 `_app.js` 中更新引入路径:

import '../styles/globals.scss';

5. 使用 CSS-in-JS:`styled-jsx`

Next.js 内置支持 `styled-jsx`,无需额外安装即可直接在组件中编写样式。`styled-jsx` 提供了局部作用域的样式,同时保持了写 CSS 的简单性。

5.1 在组件中使用 `styled-jsx`

以下是一个修改后的按钮组件:

// components/Button.js
export default function Button({ children }) {return (<><button>{children}</button><style jsx>{`button {background-color: #0070f3;color: white;padding: 10px 20px;border: none;border-radius: 5px;cursor: pointer;}button:hover {background-color: #005bb5;}`}</style></>);
}


 

5.2 优势与局限性

  • 优势:样式作用域默认局限于当前组件,不会影响其他组件。无需创建额外的 CSS 文件。
  • 局限性:缺乏预处理器功能(如 Sass 变量和混入)。

6. 样式优化和性能提升

6.1 样式的懒加载

Next.js 会自动对 CSS 进行按需加载,确保每个页面只加载所需的样式,减少初始加载时间。

6.2 使用 Tailwind CSS

Tailwind CSS 是一个实用性优先的 CSS 框架,与 Next.js 的架构天然契合,能显著提高样式开发效率。

安装 Tailwind CSS:

npm install tailwindcss postcss autoprefixer
npx tailwindcss init

在 `tailwind.config.js` 中配置路径,并在 `globals.css` 中引入 Tailwind 的基础样式:

/* styles/globals.css */
@tailwind base;
@tailwind components;
@tailwind utilities;

7. 实现仪表盘样式的最佳实践

7.1 使用布局组件

创建 `components/Layout.js`,实现基础的布局样式:

// components/Layout.js
import styles from './Layout.module.css';export default function Layout({ children }) {return <div className={styles.container}>{children}</div>;
}
/* components/Layout.module.css */
.container {max-width: 1200px;margin: 0 auto;padding: 20px;background-color: white;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);border-radius: 8px;
}

7.2 应用到仪表盘页面

// pages/dashboard.js
import Layout from '../components/Layout';
import Button from '../components/Button';export default function Dashboard() {return (<Layout><h1>仪表盘</h1><Button>添加新条目</Button></Layout>);
}

8. 总结

Next.js 提供了灵活且强大的 CSS 处理能力,从基础的全局样式到组件级别的 CSS 模块,再到 `styled-jsx` 和第三方框架(如 Tailwind CSS)。通过掌握这些功能,开发者可以根据项目需求选择合适的样式方案,从而更高效地构建现代化 Web 应用。

无论您是刚开始接触样式管理,还是希望深入优化样式性能,Next.js 都为您提供了全面的支持。通过本文的讲解,希望您能够在仪表盘应用开发中熟练运用 Next.js 的 CSS 功能,构建出功能强大且界面美观的应用。

相关文章:

Next.js 独立开发教程(三):CSS 样式的完整指南

系列文章目录 Next.js 开发教程(一)&#xff1a;入门指南-CSDN博客 Next.js 开发教程&#xff08;二&#xff09;&#xff1a;从零构建仪表盘应用-CSDN博客 有兴趣的可以蹲个后续&#xff0c;我会陆续发布一系列的文章。 目录 系列文章目录 1. 样式在 Next.js 中的基本支持…...

React (三)

文章目录 项目地址十二、性能优化12.1 使用useMemo避免不必要的计算12.2 使用memo缓存组件,防止过度渲染12.3 useCallBack缓存函数12.4 useCallBack里访问之前的状态(没懂)十三、Styled-Components13.1 安装13.2给普通html元素添加样式13.3 继承和覆盖样式13.4 给react组件添…...

Python数据结构之链表

一、链表 1、目的 解决顺序表存储数据有上限&#xff0c;并且插入和删除操作效率低的问题。 2、概念 链表&#xff1a;链式存储的线性表&#xff0c;使用随机的物理内存存储逻辑上连续的数据。 链表的组成&#xff1a;由一个个结点组成 结点&#xff1a;由数据域和链接域组…...

“LLM是否是泡沫”

目录 “LLM是否是泡沫” 培养自己鉴别论文价值的能力、复现开源项目的能力、debug 代码的能力 llm 是生产力工具 多去找实习&#xff0c;读再多的论文&#xff0c;刷再多的技术文章&#xff0c;也不如一次 debug 多机通讯报错带来的认知深刻 一、LLM领域的发展与挑战 二、…...

基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff09…...

算法(Algorithm)

算法&#xff08;Algorithm&#xff09; 是指解决问题或完成特定任务的一系列明确指令的集合。它是按照一定规则定义的一种计算过程&#xff0c;用于将输入转化为输出&#xff0c;能够被计算机或人类有效执行。 算法的核心特点 有穷性 算法必须在有限步骤内完成&#xff0c;不能…...

C语言中const char *字符进行切割实现

将127.0.0.1以“”“.”来进行切割&#xff0c;实现如下&#xff1a; const char * ip "127.0.0.1";char *test new char[100];strcpy(test, ip);const char *split ".";char *final;final strtok(test, split);while (final){printf("%s\n"…...

【UE5】在材质中计算模型在屏幕上的比例

ViewProperty节点有很多有意思的变量 例如用 ViewProperty 的 tan ⁡ ( FOV / 2 ) \tan(\text{FOV} / 2) tan(FOV/2) 输出&#xff0c;用它计算模型占屏幕的比例。 &#xff08;常用于for运算的次数优化&#xff0c;也可以用于各种美术效果&#xff09; ScaleOnScreen Obje…...

前端速通(HTML)

1. HTML HTML基础&#xff1a; 什么是HTML&#xff1f; 超文本&#xff1a; "超文本"是指通过链接连接不同网页或资源的能力。HTML支持通过<a>标签创建超链接&#xff0c;方便用户从一个页面跳转到另一个页面。 标记语言&#xff1a; HTML使用一组预定义的标签…...

订单日记为“惠采科技”提供全方位的进销存管理支持

感谢温州惠采科技有限责任公司选择使用订单日记&#xff01; 温州惠采科技有限责任公司&#xff0c;成立于2024年&#xff0c;位于浙江省温州市&#xff0c;是一家以从事销售电气辅材为主的企业。 在业务不断壮大的过程中&#xff0c;想使用一种既能提升运营效率又能节省成本…...

Linux:文件管理(一)

目录 一、文件基础认识 二、C语言操作文件的接口 1.> 和 >> 2.理解“当前路径” 三、相关系统调用 1.open 2.文件描述符 3.一切皆文件 4.再次理解重定向 一、文件基础认识 文件 内容 属性。换句话说&#xff0c;如果在电脑上新建了一个空白文档&#xff0…...

鸿蒙多线程开发——线程间数据通信对象03(sendable)

1、简 介 在传统JS引擎上&#xff0c;对象的并发通信开销的优化方式只有一种&#xff0c;就是把实现下沉到Native侧&#xff0c;通过Transferable对象的转移或共享方式降低并发通信开销。而开发者仍然还有大量对象并发通信的诉求&#xff0c;这个问题在业界的JS引擎实现上并没…...

linux从0到1——shell编程7

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…...

自主研发,基于PHP+ vue2+element+ laravel8+ mysql5.7+ vscode开发的不良事件管理系统源码,不良事件管理系统源码

不良事件上报系统源码&#xff0c;不良事件管理系统源码&#xff0c;PHP源码 不良事件上报系统通过 “事前的人员知识培训管理和制度落地促进”、“事中的事件上报和跟进处理”、 以及 “事后的原因分析和工作持续优化”&#xff0c;结合预存上百套已正在使用的模板&#xff0…...

【海思Hi3519DV500】双目网络相机套板硬件规划方案

Hi3519DV500双目网络相机套板是针对该芯片设计的一款 IP 编码板 PCBA&#xff0c;硬件接口支持双目sensor 接入&#xff0c;SDIO3.0 接口、USB2.0、USB3.0、UART 接口以及丰富的 IO 扩展应用&#xff0c;可根据各种使用场景设计相应扩展板&#xff0c;丰富外围接口&#xff0c;…...

【电源专题】BUCK电源SW电压的平均值为什么等于输出电压?

在Buck电源测试过程中,我们会去测试SW开关节点的波形。那么从SW波形中我们能看出什么呢? 首先查看SW波形一般会看SW频率,通过SW波形的频率知道目前芯片的运行状态是什么。比如PSM还是PWM模式。 此外,还会看SW波形的占空比,通过占空比我们可以知道目前输出的状态是怎么样的…...

SpringCloud Gateway转发请求到同一个服务的不同端口

SpringCloud Gateway默认不支持将请求路由到一个服务的多个端口 本文将结合Gateway的处理流程&#xff0c;提供一些解决思路 需求背景 公司有一个IM项目&#xff0c;对外暴露了两个端口8081和8082&#xff0c;8081是springboot启动使用的端口&#xff0c;对外提供一些http接口…...

【模块一】kubernetes容器编排进阶实战之pod的调度流程,pause容器及init容器

pod的调度流程及常见状态 pod的调度流 pod的常见状态 Unschedulable&#xff1a;#Pod不能被调度&#xff0c;kube-scheduler没有匹配到合适的node节点 PodScheduled&#xff1a;#pod正处于调度中&#xff0c;在kube-scheduler刚开始调度的时候&#xff0c;还没有将pod分配…...

PySpark3:pyspark.sql.functions常见的60个函数

目录 一、常见的60个函数 1、col 2、lit 3、sum 4、avg/mean 5、count 6、max 7、min 8、concat 9、substring 10、lower 11、upper 12、trim 13、ltrim 14、rtrim 15、split 16、explode 17、collect_list 18、collect_set 19、asc 20、desc 21、when 2…...

Python操作neo4j库py2neo使用之创建和查询(二)

Python操作neo4j库py2neo使用之创建和查询&#xff08;二&#xff09; py2neo 创建操作 1、连接数据库 from py2neo import Graph graph Graph("bolt://100.100.20.55:7687", auth(user, pwd), nameneo4j)2、创建Node from py2neo import Node, Subgraph # 创建…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...