当前位置: 首页 > 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 # 创建…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...