02-样式设置【翻译官网案例】

news2024/12/24 2:25:28

原文链接:https://nextjs.org/learn/dashboard-app/css-styling

  • 01-nextjs起步
  • 03-处理字体和图片
  • 04-创建layouts 和pages 页面
  • 05-页面之间的导航跳转
  • 更多
    目前,您的主页没有任何样式。让我们来看看您可以用哪些不同的方式来设计Next.js应用程序的样式。

本课目标

  • 如何将全局CSS文件添加到您的应用程序中。
  • 两种不同的设置style方式:TailwindCSS module
  • 如何使用clsx工具程序包有条件地添加类名。

全局样式

如果您查看/app/ui文件夹内部,您将看到一个名为global.css的文件。您可以使用此文件将CSS规则添加到应用程序中的所有路由中,例如CSS重置规则、链接等HTML元素的站点范围样式等等。
您可以在应用程序的任何组件中导入global.css,但通常将其添加到顶级组件中是一种很好的做法。在Next.js项目中,这个顶级组件是 root layout (稍后会详细介绍)
通过导航到/app/layout.tsx并导入global.css文件,将全局样式添加到应用程序中:

import '@/app/ui/global.css';

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

在开发服务器仍在运行的情况下,保存您的更改并在浏览器中预览它们。您的主页现在应该是这样的:
image.png
但是等一下,你没有添加任何CSS规则,这些样式是从哪里来的?
如果你看看global.css内部,你会注意到一些@tailwind指令:

@tailwind base;
@tailwind components;
@tailwind utilities;

Tailwind

Tailwind是一个CSS框架,它允许您直接在TSX标记中快速编写实用程序类,从而加快了开发过程。
在Tailwind中,可以通过添加类名来设置元素的样式。例如,添加类“text-blue-500”将使

文本变为蓝色:
<h1 className="text-blue-500"> I'm blue! </h1>
尽管CSS样式是全局共享的,但每个类都单独应用于每个元素。这意味着,如果添加或删除一个元素,就不必担心维护单独的样式表,样式冲突,或者CSS 包的大小随着应用程序的扩展而增长。
当您使用create-next-app应用程序启动新项目时,Next.js会询问您是否要使用Tailwind。如果您选择yes,Next.js将自动安装必要的软件包,并在您的应用程序中配置Tailwind。
如果您查看/app/page.tsx,您会发现我们在示例中使用的是Tailwind类。

import AcmeLogo from '@/app/ui/acme-logo';
import { ArrowRightIcon } from '@heroicons/react/24/outline';
import Link from 'next/link';

export default function Page() {
  return (
    // These are Tailwind classes:
    <main className="flex min-h-screen flex-col p-6">
      <div className="flex h-20 shrink-0 items-end rounded-lg bg-blue-500 p-4 md:h-52">
        // ...
 )
}

如果这是您第一次使用Tailwind,请不要担心。为了节省时间,我们已经为您将要使用的所有组件设置了样式。
让我们玩Tailwind吧!复制下面的代码并将其粘贴到/app/page.tsx中的<p>元素上方:

<div
  className="h-0 w-0 border-b-[30px] border-l-[20px] border-r-[20px] border-b-black border-l-transparent border-r-transparent"
/>

使用上面的代码片段时,您看到的是什么形状?一个黑色三角形
如果您更喜欢编写传统的CSS规则,或者将样式与JSX分开,那么CSS模块是一个很好的选择。

CSS模块

CSS模块允许您通过自动创建唯一的类名来将CSS扩展到一个组件,因此您也不必担心样式冲突。
我们将在本课程中继续使用 Tailwind,但让我们花点时间看看如何使用 CSS 模块从上面的测验中获得相同的结果。
在里面/app/ui,创建一个名为的新文件home.module.css并添加以下 CSS 规则:

.shape {
  height: 0;
  width: 0;
  border-bottom: 30px solid black;
  border-left: 20px solid transparent;
  border-right: 20px solid transparent;
}

然后,在您的/app/page.tsx文件中导入样式并

用以下代码替换您添加的Tailwind 类名styles.shape:

import AcmeLogo from '@/app/ui/acme-logo';
import { ArrowRightIcon } from '@heroicons/react/24/outline';
import Link from 'next/link';
import styles from '@/app/ui/home.module.css'; //+++++

export default function Page() {
  return (
    <main className="flex min-h-screen flex-col p-6">
      <div className={styles.shape} />
    // ...
  )
}

保存更改并在浏览器中预览。您应该看到与之前相同的形状。
Tailwind 和 CSS 模块是设计 Next.js 应用程序样式的两种最常用方法。使用其中一种取决于个人喜好 - 您甚至可以在同一个应用程序中同时使用这两种方法!

使用clsx库切换类名

在某些情况下,您可能需要根据状态或其他条件有条件地设置元素的样式。
clsx是一个可以让你轻松切换类名的库。我们建议查看文档了解更多详细信息,但以下是基本用法:

  • 假设您要创建一个InvoiceStatus接受 的组件status。状态可以是’pending’或’paid’。
  • 如果是’paid’,则您希望颜色为绿色。如果是’pending’,则您希望颜色为灰色。

您可以clsx有条件地应用这些类,如下所示:第9和第10行

import clsx from 'clsx';
 
export default function InvoiceStatus({ status }: { status: string }) {
  return (
    <span
      className={clsx(
        'inline-flex items-center rounded-full px-2 py-1 text-sm',
        {
          'bg-gray-100 text-gray-500': status === 'pending',
          'bg-green-500 text-white': status === 'paid',
        },
      )}
    >
    // ...
)}

其他style解决方案

除了我们讨论过的方法之外,您还可以使用以下方法设置 Next.js 应用程序的样式:

  • Sass 允许您导入.css和.scss文件。
  • CSS-in-JS 库,例如styled-jsx、样式组件和情感。

查看CSS 文档以获取更多信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1858009.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用mapXplore将SQLMap数据转储到关系型数据库中

关于mapXplore mapXplore是一款功能强大的SQLMap数据转储与管理工具&#xff0c;该工具基于模块化的理念开发&#xff0c;可以帮助广大研究人员将SQLMap数据提取出来&#xff0c;并转储到类似PostgreSQL或SQLite等关系型数据库中。 功能介绍 当前版本的mapXplore支持下列功能…

对于GPT-5的些许期待

目录 1.概述 2.GPT-5技术突破预测 3.智能系统人类协作 3.1. 辅助决策 3.2. 增强创造力 3.3. 处理复杂任务 3.4.人机协同的未来图景 4.迎接AI技术变革策略 4.1.教育方面 4.2.职业发展方面 4.3.政策制定方面 4.4.人才与技能培养 1.概述 GPT-5作为下一代大语言模型&a…

AI交互及爬虫【数据分析】

各位大佬好 &#xff0c;这里是阿川的博客&#xff0c;祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 Python 初阶 Python–语言基础与由来介绍 Python–…

《2024全球人才趋势研究报告-生命科学行业洞察》

这份报告由美世发布&#xff0c;深入分析了生命科学行业在2024年的现状,并从业务性质的变化、组织文化的演变、员工身心健康问题的整体解决方案、人与数字的融合等方面,洞察了行业趋势和业务驱动力。报告指出,随着全球化和技术创新的不断推进,生命科学行业正经历着翻天覆地的变…

GIS开发如何高质量就业?这几点是关键!

高质量就业&#xff0c;包含薪资和其他福利待遇&#xff0c;在讨论如何高质量就业之前&#xff0c;我们先来看下GIS开发岗位的前景、薪资水平如何&#xff1f;最后讨论一下GIS开发工程师到底需要学习哪些技术&#xff1f; 01 GIS开发岗位呈持续上升趋势 从GIS开发岗位趋势也可…

【Linux】多线程的相关知识点

一、线程安全 1.1 可重入 VS 线程安全 1.1.1 概念 线程安全&#xff1a;多个线程并发执行同一段代码时&#xff0c;不会出现不同的结果。常见对全局变量或者静态变量进行操作&#xff0c;并且没有锁的保护的情况下&#xff0c;会出现问题。重入&#xff1a;同一个函数被不同…

Android性能优化-内存优化

&#xff11;、为什么进行内存优化&#xff08;如果不进行内存优化&#xff09; APP运营内存限制&#xff0c;OOM导致APP崩溃 APP性能&#xff0c;流畅性&#xff0c;响应速度和体验 2、Android内存管理方式: Android系统内存分配与回收方式 APP内存限制机制 切换应用时&…

【日常开发之Windows共享文件】Java实现Windows共享文件上传下载

文章目录 Windows 配置代码部分Maven代码 Windows 配置 首先开启服务&#xff0c;打开控制面板点击程序 点击启用或关闭Windows功能 SMB1.0选中红框内的 我这边是专门创建了一个用户 创建一个文件夹然后点击属性界面&#xff0c;点击共享 下拉框选择你选择的用户点击添加…

自建消息推送工具 Gotify 实现消息私有化通知

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 之前分享了如何通过 Webhook 将 VPS 与 NAS 上部署的应用消息推送到钉钉、飞书、企业微信,但是对于部分用户来说,可能因为以下种种原因,不方便使用常见的办公 IM 软件来进行消息推送: 消息涉及隐私敏感信息,不希…

艺术签名生成工具哪个好?5个工具定制个性化签名

在追求个性化的现代社会&#xff0c;艺术签名已经成为一种时尚和趋势&#xff0c;越来越多的人开始关注和尝试学习如何设计自己的艺术签名。 这不仅是一种表达自我的方式&#xff0c;也是一种展现个性和独特性的方式。今天让我们一起探索5款艺术签名在线生成工具&#xff0c;让…

【高性能计算笔记】

第1章 - 高性能计算介绍 1. 概念&#xff1a; 高性能计算(High performance computing&#xff0c;缩写HPC)&#xff1a; 指通常使用很多处理器&#xff08;作为单个机器的一部分&#xff09;或者某一集群中组织的几台计算机&#xff08;作为单个计算资源操作&#xff09;的…

百度Agent初体验(制作步骤+感想)

现在AI Agent很火&#xff0c;最近注册了一个百度Agent体验了一下&#xff0c;并做了个小实验&#xff0c;拿它和零一万物&#xff08;Yi Large&#xff09;和文心一言&#xff08;ERNIE-4.0-8K-latest&#xff09;阅读了相同的一篇网页资讯&#xff0c;输出资讯摘要&#xff0…

shell的正则表达------awk

一、awk&#xff1a;按行取列 1.awk原理&#xff1a;根据指令信息&#xff0c;逐行的读取文本内容&#xff0c;然后按照条件进行格式化输出。 2.awk默认分隔符&#xff1a;空格、tab键&#xff0c;把多个空格自动压缩成一个。 3.awk的选项&#xff1a; awk ‘操作符 {动作}’…

【总线】AXI4第五课时:信号描述

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣&#xff0c;那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者&#xff0c;AXI4以其高性能和高度可扩展性&#xff0c;成为了现代电子系统中不可或缺的通信桥梁…

不同匿名程度的代理本质区别是什么?

区别主要在于匿名的程度不同&#xff0c;就看你自己对匿名要求高不高了。 有三种主要代理类型&#xff1a; 1、透明代理 透明代理的特点就是不提供匿名性&#xff0c;你用它的时候网站是可以直接读取到你的真实IP地址的&#xff0c;需要提供的就可以直接排除它了。 2、匿名…

JVM专题八:JVM如何判断可回收对象

在JVM专题七&#xff1a;JVM垃圾回收机制中提到JVM的垃圾回收机制是一个自动化的后台进程&#xff0c;它通过周期性地检查和回收不可达的对象&#xff08;垃圾&#xff09;&#xff0c;帮助管理内存资源&#xff0c;确保应用程序的高效运行。今天就让我们来看看JVM到底是怎么定…

Shopee API接口:获取搜索栏生成的商品结果列表

一、引言 此接口可以高效获取搜索栏生成的商品结果列表。本文将详细介绍这一核心功能&#xff0c;并探讨其在实际应用中的价值。 二、核心功能介绍——获取搜索栏生成的商品结果列表 请求API及返回示例 http://api.xxxx.com/sp/ll/search/item?keywordiphone&page1&am…

零门槛用AI,302.AI让人工智能变得简单易用

当下人工智能火爆&#xff0c;提到AI&#xff0c;几乎每个人都能说上几句&#xff0c;但是你真的会使用AI吗&#xff1f; 当涉及到如何实际使用AI时&#xff0c;许多人可能会觉得它太过高深莫测&#xff0c;从而产生一种距离感&#xff0c;不知如何开始。我和大家也一样&#x…

期末考试的成绩怎么发?

随着学期末的临近&#xff0c;我们又迎来了向家长通报学生成绩的关键时刻。下面是一份成绩群发的全新指南&#xff0c;让我们一起高效而温馨地完成这项任务&#xff01; 1.选择沟通渠道&#xff1a; - 邮件与短信各有优势。邮件更适合提供详尽的成绩分析和评语&#xff0c;而短…

云计算【第一阶段(18)】磁盘管理与文件系统 分区格式挂载(一)

目录 一、磁盘基础 二、磁盘结构 2.1、机械硬盘 2.2、固态硬盘 2.3、扩展移动硬盘 2.4、机械磁盘的一些计算&#xff08;了解&#xff09; 2.5、磁盘接口类型 二、Linux 中使用的文件系统类型 2.1、磁盘分区的表示 2.1.1、主引导记录(MBR) 2.1.2、Linux中将硬盘、分…