Files
Ant-Browser/docs/STYLE_FIXES.md
Ant Browser Release Bot f2cc3654a5 release: 1.0.0 snapshot (ea3b0e5)
channel: release
version: 1.0.0
source-ref: master
published-at-utc: 2026-03-13T13:17:53Z
2026-03-13 21:17:53 +08:00

8.4 KiB
Raw Permalink Blame History

组件样式修复说明

修复日期

2026-01-06

问题描述

组件中存在以下样式问题:

  1. 使用了不存在的 CSS 变量 --color-bg-primary
  2. 半透明背景导致弹窗、抽屉等浮层组件显示不清晰
  3. Toast、Alert、Badge 等组件的背景透明度过低

修复内容

1. CSS 变量修正

问题: 组件使用了 --color-bg-primary,但主题文件中未定义此变量

修复: 将所有 --color-bg-primary 替换为正确的变量

组件 原变量 新变量 说明
Modal --color-bg-primary --color-bg-elevated 弹窗使用提升层背景
Drawer --color-bg-primary --color-bg-elevated 抽屉使用提升层背景
Table --color-bg-primary --color-bg-surface 表格使用表面背景
Pagination --color-bg-primary --color-bg-surface 分页器使用表面背景
Loading --color-bg-primary --color-bg-base 全屏加载使用基础背景

2. 背景透明度优化

问题: 半透明背景(/10)导致组件显示不清晰

修复: 提高背景透明度至 /15,增强视觉效果

Toast 组件

// 修复前
bg-[var(--color-success)]/10

// 修复后
bg-[var(--color-success)]/15 backdrop-blur-md

Alert 组件

// 修复前
bg-[var(--color-success)]/10 border-[var(--color-success)]/20

// 修复后
bg-[var(--color-success)]/15 border-[var(--color-success)]/30

Badge 组件

// 修复前
bg-[var(--color-success)]/10

// 修复后
bg-[var(--color-success)]/15

Dropdown 组件

// 修复前(危险项悬停)
hover:bg-[var(--color-error)]/10

// 修复后
hover:bg-[var(--color-error)]/15

3. 可用的 CSS 变量

根据主题文件,以下是正确的背景色变量:

--color-bg-base       /* 基础背景(页面背景) */
--color-bg-surface    /* 表面背景(卡片、表格) */
--color-bg-elevated   /* 提升层背景(弹窗、抽屉) */
--color-bg-muted      /* 柔和背景(禁用、次要) */
--color-bg-subtle     /* 微妙背景(悬停) */

修复效果

修复前

  • 弹窗背景半透明,内容不清晰
  • Toast 提示颜色过淡
  • Alert 警告不够醒目
  • Badge 徽章颜色浅

修复后

  • 弹窗背景实心,内容清晰可读
  • Toast 提示颜色鲜明
  • Alert 警告醒目
  • Badge 徽章颜色适中

受影响的组件

  1. Modal - 弹窗
  2. Drawer - 抽屉
  3. Toast - 消息提示
  4. Alert - 警告提示
  5. Badge - 徽章
  6. Dropdown - 下拉菜单
  7. Table - 表格
  8. Pagination - 分页器
  9. Loading - 加载状态

测试建议

  1. 打开组件展示页面(/components
  2. 测试各个 Tab 的组件显示
  3. 切换亮色/暗色主题
  4. 检查弹窗、抽屉的背景是否清晰
  5. 验证 Toast、Alert 的颜色是否醒目

注意事项

使用正确的 CSS 变量

在开发新组件时,请使用以下规则选择背景色变量:

场景 推荐变量 示例
页面背景 --color-bg-base body
卡片、表格 --color-bg-surface Card, Table
弹窗、抽屉 --color-bg-elevated Modal, Drawer
禁用、次要 --color-bg-muted disabled input
悬停效果 --color-bg-subtle hover state

透明度使用建议

用途 推荐透明度 说明
状态背景 /15 Toast, Alert, Badge
悬停效果 /10 hover background
遮罩层 /50 Modal backdrop
全屏加载 /80 Loading fullscreen

避免的做法

不要使用不存在的变量

// 错误
bg-[var(--color-bg-primary)]

// 正确
bg-[var(--color-bg-surface)]

不要使用过低的透明度

// 不推荐(颜色过淡)
bg-[var(--color-success)]/5

// 推荐
bg-[var(--color-success)]/15

不要混用不同的背景变量

// 不一致
<div className="bg-[var(--color-bg-surface)]">
  <div className="bg-[var(--color-bg-elevated)]">
    {/* 应该使用相同层级的变量 */}
  </div>
</div>

构建状态

前端构建成功
应用构建成功
所有组件样式正常

相关文件

  • frontend/src/shared/components/Modal.tsx
  • frontend/src/shared/components/Drawer.tsx
  • frontend/src/shared/components/Toast.tsx
  • frontend/src/shared/components/Alert.tsx
  • frontend/src/shared/components/Badge.tsx
  • frontend/src/shared/components/Dropdown.tsx
  • frontend/src/shared/components/Table.tsx
  • frontend/src/shared/components/Pagination.tsx
  • frontend/src/shared/components/Loading.tsx

响应式和滚动修复

修复日期

2026-01-06(第二次修复)

问题描述

  1. Modal 和 Drawer 内容溢出 - 当内容过多时,无法滚动查看完整内容
  2. 组件展示页面高度不足 - Tab 内容区域没有高度限制,导致内容超出视口
  3. Flex 布局问题 - 内容区域的 flex-1 没有配合 min-h-0 使用,导致滚动失效

修复内容

1. Modal 组件滚动修复

问题: 内容区域无法正确滚动

修复:

// 修复前
<div className="px-6 py-4 overflow-y-auto flex-1">

// 修复后
<div className="px-6 py-4 overflow-y-auto flex-1 min-h-0">

关键点:

  • 添加 min-h-0 允许 flex 子元素缩小
  • 标题和底部添加 flex-shrink-0 防止被压缩
  • 容器添加 w-full 确保宽度正确

2. Drawer 组件滚动修复

问题: 抽屉内容无法滚动

修复:

// 修复前
<div className="flex-1 overflow-y-auto px-6 py-4">

// 修复后
<div className="flex-1 overflow-y-auto px-6 py-4 min-h-0">

3. 组件展示页面高度限制

问题: Tab 内容区域没有高度限制,内容超出视口

修复:

// 修复前
<Tabs items={tabItems}>
  {(activeKey) => (
    <>
      {activeKey === 'buttons' && <ButtonsDemo />}
      ...
    </>
  )}
</Tabs>

// 修复后
<Tabs items={tabItems}>
  {(activeKey) => (
    <div className="max-h-[calc(100vh-280px)] overflow-y-auto">
      {activeKey === 'buttons' && <ButtonsDemo />}
      ...
    </div>
  )}
</Tabs>

高度计算:

  • 100vh - 视口高度
  • -280px - 预留空间(顶栏 60px + 标题 80px + Tab 导航 60px + 边距 80px

Flex 布局滚动最佳实践

问题根源

在 Flexbox 布局中,如果父容器是 flex 且子元素使用 flex-1,子元素的最小高度默认是 auto,这会导致:

  • 子元素不会缩小到小于其内容的高度
  • overflow-y-auto 失效,因为容器会扩展以适应内容

解决方案

// ❌ 错误 - 滚动不工作
<div className="flex flex-col h-full">
  <div className="flex-shrink-0">Header</div>
  <div className="flex-1 overflow-y-auto">
    {/* 内容过多时无法滚动 */}
  </div>
  <div className="flex-shrink-0">Footer</div>
</div>

// ✅ 正确 - 滚动正常工作
<div className="flex flex-col h-full">
  <div className="flex-shrink-0">Header</div>
  <div className="flex-1 overflow-y-auto min-h-0">
    {/* 内容可以正常滚动 */}
  </div>
  <div className="flex-shrink-0">Footer</div>
</div>

关键 CSS 类

类名 作用 使用场景
flex-1 占据剩余空间 内容区域
min-h-0 允许缩小到 0 配合 flex-1 使用
overflow-y-auto 垂直滚动 内容可能溢出的区域
flex-shrink-0 不允许缩小 固定高度的头部/底部

响应式高度计算

固定高度

// 适用于内容较少的场景
<div className="max-h-[500px] overflow-y-auto">

视口相对高度

// 适用于全屏或大部分屏幕的场景
<div className="max-h-[90vh] overflow-y-auto">

计算高度

// 适用于需要减去固定元素高度的场景
<div className="max-h-[calc(100vh-280px)] overflow-y-auto">

测试清单

  • Modal 内容过多时可以滚动
  • Drawer 内容过多时可以滚动
  • 组件展示页面所有 Tab 内容可见
  • 不同屏幕尺寸下滚动正常
  • 标题和底部按钮固定不滚动
  • 滚动条样式正常

受影响的组件

  1. Modal - 弹窗内容滚动
  2. Drawer - 抽屉内容滚动
  3. ComponentsPage - 组件展示页面高度限制

构建状态

前端构建成功
应用构建成功
所有组件滚动正常
响应式布局正常