wxwork-checkbox-center-alignment-fix.md 8.8 KB

企业微信侧边栏 - 勾选框居中显示问题修复

🚨 问题现象

在企业微信侧边栏中打开"创建改图任务"弹窗后,"涉及空间"选择区域:

  • 勾选框显示在水平居中位置
  • 空间名称文字完全看不到
  • ❌ 无法识别要选择的空间

问题截图:勾选框在盒子中间,左右两侧留白,文字不可见


🔍 问题根源分析

1. Grid布局默认对齐方式

问题.space-selector使用grid布局,但未明确设置子项对齐方式

.space-selector {
  display: grid;
  // ❌ 缺少 justify-items 设置
  // ❌ 缺少 align-items 设置
}

结果

  • Grid子项(.space-item)可能被居中对齐
  • 导致整个.space-item在grid单元格中居中显示

2. Flex内容对齐方式

问题.space-item使用flex布局,但未设置justify-content

.space-item {
  display: flex;
  align-items: center; // ✅ 有垂直居中
  // ❌ 缺少 justify-content(水平对齐)
}

默认行为justify-content: flex-start(左对齐)

但是:如果父容器grid设置了居中对齐,会覆盖flex的默认行为

3. 文字对齐方式

问题span元素未明确设置text-align

span {
  flex: 1;
  // ❌ 缺少 text-align: left
}

结果:文字可能继承父元素的对齐方式


✅ 修复方案

1. Grid子项强制拉伸填满

位置.space-selector

.space-selector {
  display: grid;
  justify-items: stretch; // ✅ grid子项拉伸填满单元格(关键!)
  align-items: start;     // ✅ grid子项顶部对齐
  
  @media (max-width: 480px) {
    justify-items: stretch; // ✅ 强化企微端设置
  }
}

效果

  • .space-item会拉伸到grid单元格的100%宽度
  • 不会居中显示,而是填满整个单元格

2. Flex内容强制左对齐

位置.space-item

.space-item {
  display: flex;
  align-items: center;              // ✅ 垂直居中
  justify-content: flex-start;      // ✅ 强制左对齐(关键修复!)
  width: 100%;                      // ✅ 占满宽度
  
  @media (max-width: 480px) {
    justify-content: flex-start;    // ✅ 强化企微端设置
  }
}

效果

  • 勾选框和文字从左侧开始排列
  • 不会居中显示

3. 文字强制左对齐

位置span

span {
  flex: 1;
  text-align: left; // ✅ 文字左对齐
  
  @media (max-width: 480px) {
    text-align: left; // ✅ 强化企微端设置
  }
}

效果

  • 文字从左侧开始显示
  • 不会居中或右对齐

4. 移除过度压缩

删除.space-itemmin-width: 0

.space-item {
  // ❌ 删除 min-width: 0(会导致被压缩到极小)
  width: 100%; // ✅ 保留width: 100%
}

效果

  • .space-item不会被压缩到极小宽度
  • 保持合理的显示尺寸

📊 修复前后对比

修复前

.space-selector (grid)
  ↓
(缺少 justify-items: stretch)
  ↓
.space-item 可能居中显示
  ↓
(缺少 justify-content: flex-start)
  ↓
勾选框和文字居中排列 ❌
  ↓
文字看不到 ❌

修复后

.space-selector (grid)
  ↓
justify-items: stretch ✅
  ↓
.space-item 填满grid单元格 ✅
  ↓
justify-content: flex-start ✅
  ↓
勾选框和文字左对齐 ✅
  ↓
文字完整可见 ✅

🎯 关键修复点总结

选择器 属性 说明
.space-selector justify-items stretch grid子项拉伸填满
.space-selector align-items start grid子项顶部对齐
.space-item justify-content flex-start flex内容左对齐
.space-item width 100% 占满grid单元格
span text-align left 文字左对齐

🎨 视觉效果

修复前

┌────────────────────────┐
│                        │
│        ☑ [空白]        │  ← 勾选框居中,文字看不到
│                        │
└────────────────────────┘

修复后

┌────────────────────────┐
│ ☑  客厅               │  ← 勾选框左侧,文字清晰可见
└────────────────────────┘
┌────────────────────────┐
│ ☐  主卧室(带卫生间) │  ← 长名称自动省略
└────────────────────────┘

🧪 测试验证

测试场景

场景1:短空间名称

  • 示例:"客厅"、"卧室"、"厨房"
  • 预期
    • ☑ 勾选框在最左侧(距离左边框10-12px)
    • ☑ 空间名称紧跟勾选框(间距8-10px)
    • ☑ 文字完整可见

场景2:中等空间名称

  • 示例:"主卧室"、"客餐厅"、"书房"
  • 预期
    • ☑ 勾选框在最左侧
    • ☑ 文字完整显示

场景3:长空间名称

  • 示例:"主卧室(带卫生间)"、"客餐厅一体化空间"
  • 预期
    • ☑ 勾选框在最左侧
    • ☑ 文字显示为"主卧室(带卫生..."(带省略号)

测试步骤

  1. 在企业微信中打开项目详情
  2. 点击"创建改图任务"按钮
  3. 选择"大修改"类型
  4. 观察"涉及空间"选择区域
  5. 验证勾选框在最左侧
  6. 验证空间名称紧跟勾选框
  7. 验证文字完整可见或带省略号

测试设备

  • 企业微信iOS端(iPhone)
  • 企业微信Android端
  • 企业微信桌面版侧边栏

💡 技术原理

Grid布局的 justify-items

  • justify-items: start:子项左对齐
  • justify-items: center:子项居中对齐 ❌(这是问题根源)
  • justify-items: stretch:子项拉伸填满 ✅(我们使用这个)
  • justify-items: end:子项右对齐

Flex布局的 justify-content

  • justify-content: flex-start:内容左对齐 ✅(我们使用这个)
  • justify-content: center:内容居中对齐 ❌(问题根源)
  • justify-content: flex-end:内容右对齐
  • justify-content: space-between:内容两端对齐

文字对齐的 text-align

  • text-align: left:文字左对齐 ✅(我们使用这个)
  • text-align: center:文字居中 ❌(问题根源)
  • text-align: right:文字右对齐

🔧 调试方法

1. 检查Grid对齐

在浏览器开发者工具中:

.space-selector {
  /* 应该看到 */
  justify-items: stretch;
  align-items: start;
}

2. 检查Flex对齐

在浏览器开发者工具中:

.space-item {
  /* 应该看到 */
  justify-content: flex-start;
  width: 100%;
}

3. 检查文字对齐

在浏览器开发者工具中:

span {
  /* 应该看到 */
  text-align: left;
}

4. 可视化调试

在企业微信开发者工具中:

  1. 选中.space-item元素
  2. 查看盒模型
  3. 验证元素是否占满grid单元格宽度
  4. 验证内容是否从左侧开始

📝 修复文件清单

1. revision-task-modal.component.scss ✅

修改内容

  • .space-selector:添加justify-items: stretchalign-items: start
  • .space-item:添加justify-content: flex-start,移除min-width: 0
  • span:添加text-align: left

修改行数

  • Line 342-343:添加grid对齐属性
  • Line 361:强化企微端grid对齐
  • Line 374:添加flex左对齐
  • Line 392:强化企微端flex左对齐
  • Line 430:添加文字左对齐
  • Line 455:强化企微端文字左对齐

🚀 部署验证

构建命令

ng build yss-project --base-href=/dev/yss/

部署命令

.\deploy.ps1

验证清单

  • 勾选框在最左侧
  • 空间名称紧跟勾选框
  • 文字完整可见或带省略号
  • 不再有居中显示的问题
  • 选中状态正常显示

🎓 核心教训

1. 明确设置对齐方式

错误做法

.space-selector {
  display: grid;
  // ❌ 依赖默认对齐方式
}

正确做法

.space-selector {
  display: grid;
  justify-items: stretch; // ✅ 明确设置水平对齐
  align-items: start;     // ✅ 明确设置垂直对齐
}

2. 多层级都要设置

  • Grid层justify-items: stretch
  • Flex层justify-content: flex-start
  • 文字层text-align: left

3. 企微端需要强化设置

@media (max-width: 480px)中重复设置关键属性,确保生效。


修复完成时间:2025-11-30 13:00
修复人员:开发团队
测试状态:✅ 待部署验证
影响范围:企业微信侧边栏 - 创建改图任务弹窗
优先级:🔥 高(严重影响用户操作)
问题类型:Grid/Flex对齐错误