使用 CSS 变量在 Nextjs 中应用深色模式

在当今的 web 开发环境中,提供深色模式选项对于现代用户界面几乎至关重要。在本文中,我们将探索如何使用 css 变量、tailwind css 以及一些有用的工具和包在 next.js 项目中实现强大的暗模式解决方案。

实用程序类的 tailwind css

首先,让我们在 next.js 项目中设置 tailwind css。 tailwind 提供了实用优先的样式方法,可以显着加快我们的开发过程。

要安装 tailwind css,请在项目目录中运行以下命令:

npm install -d tailwindcss postcss autoprefixernpx tailwindcss init -p

登录后复制

然后,配置你的 tailwind.config.js 文件:

/** @type {import('tailwindcss').config} */module.exports = {  content: [    "./app/**/*.{js,ts,jsx,tsx,mdx}",    "./pages/**/*.{js,ts,jsx,tsx,mdx}",    "./components/**/*.{js,ts,jsx,tsx,mdx}",    // or if using `src` directory:    "./src/**/*.{js,ts,jsx,tsx,mdx}",  ],  theme: {    extend: {},  },  plugins: [],}

登录后复制

然后,配置你的 globals.css 文件:

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

登录后复制

用于调色板的 orea 颜色生成器

使用 CSS 变量在 Nextjs 中应用深色模式

要为浅色和深色模式创建和谐的调色板,我们可以使用 orea 颜色生成器。该工具有助于生成一组可以很好地协同工作的颜色,并且可以轻松适应不同的主题。

访问 orea 颜色生成器并选择您的基色。该工具提供了一个用户友好的界面来创建和可视化您的配色方案:

立即学习“前端免费学习笔记(深入)”;

上图显示了 orea color generator 界面,您可以:

使用颜色选择器选择中间颜色查看生成的各种色调的颜色在浅色和深色模式下查看主题预览复制 css 变量以便轻松集成到您的项目中

使用 orea 颜色生成器生成调色板后,您将需要在项目中实现这些颜色。以下是如何在 css 中定义颜色变量的示例:

:root {  /* initially tailwindcss bg-opacity */  --tw-bg-opacity: 1;  --primary-50: 242, 242, 242;  --primary-100: 230, 230, 230;  --primary-200: 204, 204, 204;  --primary-300: 179, 179, 179;  --primary-400: 153, 153, 153;  --primary-500: 128, 128, 128;  --primary-600: 102, 102, 102;  --primary-700: 77, 77, 77;  --primary-800: 51, 51, 51;  --primary-900: 26, 26, 26;  --primary-950: 13, 13, 13;}

登录后复制

这些css变量定义了原色的一系列色调,从浅色(—primary-50)到深色(—primary-950)。通过使用这些变量,您可以轻松地在整个应用程序中应用一致的颜色,并在浅色和深色模式之间切换。

现在我们已经定义了颜色变量,让我们将它们集成到我们的 tailwind css 配置中:

module.exports = {  // ... other config  theme: {    extend: {      colors: {        primary: {          '50': 'rgba(var(--primary-50), var(--tw-bg-opacity))',          '100': 'rgba(var(--primary-100), var(--tw-bg-opacity))',          '200': 'rgba(var(--primary-200), var(--tw-bg-opacity))',          '300': 'rgba(var(--primary-300), var(--tw-bg-opacity))',          '400': 'rgba(var(--primary-400), var(--tw-bg-opacity))',          '500': 'rgba(var(--primary-500), var(--tw-bg-opacity))',          '600': 'rgba(var(--primary-600), var(--tw-bg-opacity))',          '700': 'rgba(var(--primary-700), var(--tw-bg-opacity))',          '800': 'rgba(var(--primary-800), var(--tw-bg-opacity))',          '900': 'rgba(var(--primary-900), var(--tw-bg-opacity))',          '950': 'rgba(var(--primary-950), var(--tw-bg-opacity))',        },      },    },  },}

登录后复制

此配置允许您在 tailwind 类中使用这些颜色,例如 bg-primary-500 或 text-primary-200,同时仍然保持使用 tailwind 的不透明度修改器应用不透明度的能力。

深色/浅色模式主题的下一个主题包

安装后,我们需要设置基本主题变量。创建一个新的 css 文件(例如,globals.css)或添加到现有文件中:

// app/layout.jsx:root {  /* add your light mode colors */  --tw-bg-opacity: 1;  --primary-50: 242, 242, 242;  --primary-100: 230, 230, 230;  --primary-200: 204, 204, 204;  --primary-300: 179, 179, 179;}[data-theme='dark'] {/* add your dark mode colors */  --primary-50: 13, 13, 13;  --primary-100: 26, 26, 26;  --primary-200: 51, 51, 51;  --primary-300: 77, 77, 77;}

登录后复制

此 css 定义了浅色和深色主题的基本颜色变量。当深色模式处于活动状态时,[data-theme=’dark’] 选择器将自动由下一个主题应用。

现在,让我们在您的layout.tsx文件中实现themeprovider:

// app/layout.jsx"use client";import { themeprovider } from 'next-themes'export default function layout({ children }) {  return (                        {children}            )}

登录后复制

在您的组件中,您现在可以使用 usetheme 挂钩来访问和更改当前主题:

"use client";import { usetheme } from 'next-themes'const themechanger = () => {  const { theme, settheme } = usetheme()  return (    
the current theme is: {theme}
)}export default themechanger

登录后复制

此设置允许在浅色和深色模式之间平滑过渡,并且主题在页面重新加载时保持不变。

使用 shadcn/ui 进行主题切换的下拉菜单

为了更美观的 ui,我们可以使用 shadcn/ui 中的下拉组件来创建主题切换。首先,安装必要的组件:

npx shadcn-ui@latest add dropdown-menu

登录后复制

现在,让我们实现我们的主题切换:

import { useTheme } from "next-themes"import { Button } from "@/components/ui/button"import {  DropdownMenu,  DropdownMenuContent,  DropdownMenuItem,  DropdownMenuTrigger,} from "@/components/ui/dropdown-menu"import { Sun, Moon } from "lucide-react"export function ThemeToggle() {  const { setTheme } = useTheme()  return (                                       setTheme("light")}>          Light                 setTheme("dark")}>          Dark                 setTheme("system")}>          System                    )}

登录后复制

此组件创建一个下拉菜单,其中包含在浅色、深色和系统主题之间切换的选项。该按钮使用太阳和月亮图标来直观地表示当前主题。

结论

使用 css 变量、tailwind css 和 next-themes 在 next.js 应用程序中实现暗模式提供了灵活且可维护的解决方案。以下是我们所取得的成就的摘要:

我们设置了 tailwind css 以实现实用优先的样式。我们使用 orea 颜色生成器为浅色和深色模式创建一致的调色板。我们使用下一个主题实现了主题切换,允许在浅色和深色模式之间轻松切换。我们使用 shadcn/ui 创建了一个精美的主题切换组件,增强了用户体验。

通过利用 css 变量,我们创建了一个易于维护和扩展的系统。使用下一个主题可确保我们的主题偏好得以保留,为用户提供无缝体验。

实施深色模式时记住这些要点:

始终考虑可访问性并确保两个主题有足够的对比度。在浅色和深色模式下彻底测试您的应用程序。考虑使用偏好颜色方案媒体查询来尊重用户的系统偏好。所有组件和页面的主题保持一致。

通过此设置,您就可以在 next.js 应用程序中提供现代的、用户友好的深色模式选项。快乐编码!

以上就是使用 CSS 变量在 Nextjs 中应用深色模式的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2854266.html

(0)
上一篇 2025年3月10日 14:47:49
下一篇 2025年3月8日 12:07:24

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • CSS 选择器:您设计网页的新好朋友

    欢迎来到 css 的奇妙世界! 如果您是 web 开发新手,您可能会想,“css 选择器到底是什么,我为什么要关心?”好吧,css 选择器就像 web 开发领域中值得信赖的魔杖。它们可让您挑选网页上的特定元素并对其进行时尚改造。 让我们深入…

    2025年3月10日
    200
  • 用于响应式设计的最佳 CSS 框架

    在当今的数字环境中,创建在所有设备上都具有良好外观和功能的网站是没有商量余地的。响应式设计是现代 Web 开发的基石,确保用户无论在智能手机、平板电脑还是台式机上都能获得无缝体验。为了实现这一目标,开发人员经常求助于 CSS 框架,该框架提…

    2025年3月10日
    200
  • 逐步构建网页:探索 HTML 中的结构和元素

    ? 今天是我软件开发之旅的关键一步! ? 我编写了第一行代码,深入研究了 HTML 的本质。涵盖的元素和标签。昨天,我探索了构建网站的拳击技术,今天我通过创建页眉、页脚和内容区域等部分将其付诸实践。我还添加了各种 HTML 元素,包括图像元…

    2025年3月10日
    200
  • 响应式网页设计在当今数字环境中的重要性

    在快节奏、不断发展的技术世界中,网站已成为企业、组织和个人的数字店面。随着数十亿用户通过各种设备(从台式机和笔记本电脑到平板电脑和智能手机)访问互联网,网站仅仅在单一屏幕尺寸上看起来不错已经不够了。这就是响应式网页设计发挥作用的地方,确保所…

    2025年3月10日
    200
  • 了解 CSS 盒模型:内容盒与边框盒、内联元素与块元素

    作为前端开发人员,了解 css 盒模型是make-or-break能够提供像素完美的布局。让我们深入讨论一下内联元素和块元素在两种盒模型类型(内容盒和边框盒)的上下文中的行为有何不同。 基础知识:盒子里有什么? 在详细介绍之前,有必要回顾一…

    2025年3月10日
    200
  • 建立一个温度转换器网站

    介绍 各位开发者大家好!我很高兴分享我的最新项目:实用的温度转换器。该项目非常适合那些希望通过处理用户输入、执行转换和动态更新 dom 来增强 javascript 技能的人。无论您是初学者还是经验丰富的开发人员,此温度转换器都是了解单位转…

    2025年3月10日
    200
  • 工具和资源 [实时文档]

    CSS https://unsplash.com = 示例图片https://uifaces.co = 示例用户面部图像https://extract.pics/ = 从网站提取所有图像https://color.adobe.com/ = …

    2025年3月10日
    200
  • 每个 UI 开发人员都应该知道的聪明的 CSS 行话

    简介:简洁 css 的力量 作为 ui 开发人员,您总是在寻找简化代码并创建更高效​​、更引人注目的设计的方法。 css(层叠样式表)是您的武器库中的基本工具,掌握它可以显着提高您的生产力和工作质量。在这篇博文中,我们将探索 15 个独特的…

    2025年3月10日
    200
  • 如何在高对比度模式下自动调整颜色

    介绍 我最近收到一份错误报告,其中 svg 图标在高对比度模式下无法正确显示。在这篇文章中,我将分享对我有用的解决方案。 解决方案 在高对比度模式下,我使用canvastext系统颜色来自动调整图标的颜色。 .icon { mask-ima…

    2025年3月10日
    200
  • 使无头组件易于设计

    无头组件只是一个无样式组件,还是还有更多内容? 网络已经通过要求定义样式来将样式与内容分开在 css 中而不是 html 中。这种架构允许每个网页都采用全局设计标准,无需定义任何特定于页面的样式。 随着网络演变成一个应用程序平台,开发人员寻…

    2025年3月10日
    200

发表回复

登录后才能评论