You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中Tailwind CSS暗黑模式切换异常问题求助

React + Tailwind 暗黑模式颜色切换异常问题解决

问题现象

暗黑模式显示正常,但浅色模式下部分元素颜色不符合预期,已排查CSS冲突、使用过Tailwind !修饰符,无全局自定义CSS冲突。

问题根源及修复步骤

1. 自定义颜色类使用错误

你在Tailwind配置中定义了headingColor.light和headingColor.dark两个子颜色,但在<h2>标签中直接使用text-headingColor——这个类不存在(因为没有默认的headingColor值),导致浅色模式下该标题无法应用正确的颜色。

修复代码:
将Pricing组件中的:

<h2 className="text-xl font-semibold mb-2 text-headingColor">
  API Pricing
</h2>

修改为:

<h2 className="text-xl font-semibold mb-2 text-headingColor-light dark:text-headingColor-dark">
  API Pricing
</h2>

2. 表格tbody边框颜色未适配浅色模式

表格tbody的border-gray-700在浅色模式下颜色过暗,几乎不可见,需要添加浅色模式的边框类。

修复代码:
将表格中所有<tr>的border-gray-700修改为border-gray-300 dark:border-gray-700,例如:

<tr className="border-t border-gray-300 dark:border-gray-700">

3. 主题切换组件初始状态优化(可选)

当前ThemeToggle组件初始状态固定为false,刷新页面后会回到浅色模式,可优化为读取本地存储或系统偏好,提升用户体验:

修改后的ThemeToggle代码:

import { useState, useEffect } from 'react'

const ThemeToggle = () => {
  // 初始化时优先读取本地存储,无则读取系统深色模式偏好
  const [isDarkMode, setIsDarkMode] = useState<boolean>(() => {
    const savedMode = localStorage.getItem('darkMode');
    if (savedMode) return savedMode === 'true';
    return window.matchMedia('(prefers-color-scheme: dark)').matches;
  })

  useEffect(() => {
    const root = window.document.documentElement
    if (isDarkMode) {
      root.classList.add('dark')
      localStorage.setItem('darkMode', 'true')
    } else {
      root.classList.remove('dark')
      localStorage.setItem('darkMode', 'false')
    }
  }, [isDarkMode])

  return (
    <button
      onClick={() => setIsDarkMode(!isDarkMode)}
      className="p-2 rounded-full bg-gray-200 dark:bg-gray-800"
      aria-label="Toggle Dark Mode"
    >
      {/* 可添加太阳/月亮SVG图标 */}
    </button>
  )
}

export default ThemeToggle

完整修复后的Pricing组件代码

const Pricing = () => {
  return (
    <div className="text-black dark:text-white p-8 rounded-lg border border-black dark:border-[#7B8595] shadow-lg max-w-3xl mx-auto bg-white dark:bg-gray-800 ">
      <h2 className="text-xl font-semibold mb-2 text-headingColor-light dark:text-headingColor-dark">
        API Pricing
      </h2>
      <p className="mb-6 text-sm">
        Our API pricing is based on the model used and the number of tokens
        processed. Here's a breakdown of the costs:
      </p>

      <div className="overflow-x-auto">
        <table className="w-full text-left overflow-hidden rounded-xl text-sm ">
          <thead>
            <tr className="bg-indigo-500 text-white">
              <th className="p-3 font-semibold">API</th>
              <th className="p-3 font-semibold">MODEL</th>
              <th className="p-3 font-semibold">PRICE PER 1K TOKENS</th>
            </tr>
          </thead>
          <tbody>
            <tr className="border-t border-gray-300 dark:border-gray-700">
              <td className="p-3">OpenAI</td>
              <td className="p-3">GPT-3.5</td>
              <td className="p-3">$0.002</td>
            </tr>
            <tr className="border-t border-gray-300 dark:border-gray-700">
              <td className="p-3">OpenAI</td>
              <td className="p-3">GPT-4</td>
              <td className="p-3">$0.03</td>
            </tr>
            <tr className="border-t border-gray-300 dark:border-gray-700">
              <td className="p-3">Together AI</td>
              <td className="p-3">Llama-2-70b</td>
              <td className="p-3">$0.0008</td>
            </tr>
            <tr className="border-t border-gray-300 dark:border-gray-700">
              <td className="p-3">Together AI</td>
              <td className="p-3">Llama-2-13b</td>
              <td className="p-3">$0.0006</td>
            </tr>
          </tbody>
        </table>
      </div>

      <div className="mt-6">
        <h3 className="text-lg font-semibold mb-2 dark:text-headingColor-dark text-headingColor-light ">
          Token Estimation
        </h3>
        <p className="mb-4 text-sm">
          On average, 1 token is approximately 4 characters or 0.75 words. For
          precise pricing, we recommend using our token calculator tool.
        </p>

        <h3 className="text-lg font-semibold mb-2 dark:text-headingColor-dark text-headingColor-light">
          Billing
        </h3>
        <p className="text-sm">
          You will only be charged for the tokens used in generating the book.
          The API tracks token usage and bills accordingly. Detailed usage
          reports are available in your account dashboard.
        </p>
      </div>
    </div>
  )
}

export default Pricing

内容的提问来源于stack exchange,提问作者Dhyan Rai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 16:15:21