Grid布局最适合签到任务中心,需扁平结构、240px最小宽度自适应列数,卡片用类名切换状态,统一gap控制间距并添加悬停动效。

签到任务中心这类页面,核心是清晰展示多个可点击、状态可变的任务卡片,Grid 布局最适配——结构可控、响应自然、状态样式易隔离。关键不在“堆满”,而在“每张卡语义明确、尺寸稳定、交互不打架”。
结构要扁平,卡片必须是 grid 直接子项
HTML 里别套多余 wrapper:
- ✅ 正确:
<div class="task-grid"><div class="task-card">...</div><div class="task-card">...</div></div> - ❌ 错误:在每个
.task-card外再包一层<div class="card-wrapper">—— 这会让 Grid 失去对卡片的直接控制,列宽错乱、自动换行失效
列数自适应,但最小宽度要守底线
用 auto-fit + minmax() 控制列数,兼顾小屏阅读与大屏利用率:
-
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr))—— 每张卡至少 240px(保障图标+文字不挤压),剩余空间均分 - 手机窄屏自动退为单列;平板轻松双列;桌面可撑到 3–4 列,无需写断点
- 若需更稳表现(如兼容旧 WebView),可在
@media (max-width: 480px)中强制设为1fr
卡片自身别锁死尺寸,状态靠类名驱动
卡片内部保持弹性,状态变化(如“已签到”“进行中”)通过 CSS 类名切换,不依赖内联样式:
- 去掉
width、float、display: inline-block等会干扰 Grid 流动的声明 - 图标用
max-width: 100%+height: auto防拉伸;标题文字用line-clamp: 2控制行数 - 状态徽章(如“今日完成”)用
align-self: flex-end或绝对定位右上角,不影响主布局流
间距统一用 gap,状态反馈加微动效
避免用 margin 搞乱网格节奏,用 gap 管理呼吸感,再叠加轻量交互反馈:
-
gap: 1rem(推荐 rem,高 DPR 屏下更稳);中屏可缩至0.75rem,小屏0.5rem - 卡片加
cursor: pointer和transition: transform 0.2s, box-shadow 0.2s - 悬停时
transform: translateY(-2px)+box-shadow: 0 4px 8px rgba(0,0,0,0.08),点击态可加短暂缩放


















