组件 · COMPONENT
卡片与卡链 Card
两种容器:.zzm-card 是浮在纸上的白面板;.zzm-cardlink 是可点的内容卡——悬停时描边加深、上浮 3px、落下柔影。
浮起面板
本周
完成 6 节 · 共 92 分钟
比上周多 2 节。
export function Panel() {
return (
<div className="zzm-card" style={{ width: 320, padding: 24 }}>
<div style={{ fontFamily: 'var(--zzm-mono)', fontSize: 10, letterSpacing: '1.5px', color: '#A2A29C' }}>本周</div>
<div style={{ marginTop: 8, fontSize: 16, lineHeight: '24px', fontWeight: 650 }}>完成 6 节 · 共 92 分钟</div>
<div style={{ marginTop: 4, fontSize: 12.5, lineHeight: '20px', color: '#72726E' }}>比上周多 2 节。</div>
</div>
)
}<div class="zzm-card" style="width: 320px; padding: 24px">
<div style="font-family: var(--zzm-mono); font-size: 10px; letter-spacing: 1.5px; color: #a2a29c">
本周
</div>
<div style="margin-top: 8px; font-size: 16px; line-height: 24px; font-weight: 650">
完成 6 节 · 共 92 分钟
</div>
<div style="margin-top: 4px; font-size: 12.5px; line-height: 20px; color: #72726e">
比上周多 2 节。
</div>
</div>/* tokens.css · 用到的令牌 */
:root {
--zzm-mono: ui-monospace, "SF Mono", Menlo, monospace;
}
/* controls.css */
.zzm-v4 .zzm-card {
background: #FFFFFF;
border: 1px solid rgba(0, 0, 0, .09);
border-radius: 16px;
box-shadow:
0 1px 2px rgba(0, 0, 0, .04),
0 6px 18px rgba(0, 0, 0, .05),
inset 0 1px 0 rgba(255, 255, 255, .85);
}可点卡链
课节、历史、收藏这类「点进去」的卡统一用 .zzm-cardlink:白卡承托、内距 12、内嵌图圆角 12。把鼠标移上去。
export function CardLink() {
return (
<a href="#lesson" className="zzm-cardlink" style={{ display: 'block', width: 280, textDecoration: 'none', color: 'inherit' }}>
<div style={{ aspectRatio: '16/9', borderRadius: 12, background: '#131316' }} />
<div style={{ margin: '12px 4px 4px', fontSize: 14, fontWeight: 600, lineHeight: '20px' }}>双链与反向链接</div>
<div style={{ margin: '0 4px', fontSize: 12.5, lineHeight: '20px', color: '#8B8B85' }}>让想法第一次连起来。</div>
</a>
)
}<a
href="#lesson"
class="zzm-cardlink"
style="display: block; width: 280px; text-decoration: none; color: inherit"
>
<div style="aspect-ratio: 16/9; border-radius: 12px; background: #131316"></div>
<div style="margin: 12px 4px 4px; font-size: 14px; font-weight: 600; line-height: 20px">
双链与反向链接
</div>
<div style="margin: 0 4px; font-size: 12.5px; line-height: 20px; color: #8b8b85">
让想法第一次连起来。
</div>
</a>/* controls.css */
.zzm-v4 .zzm-cardlink {
background: #FFFFFF;
border: 1px solid rgba(0, 0, 0, .09);
border-radius: 16px;
padding: 12px;
cursor: pointer;
box-shadow: 0 1px 2px rgba(0, 0, 0, .04);
transition: transform .16s ease, box-shadow .16s ease, border-color .16s ease;
}
.zzm-v4 .zzm-cardlink:hover {
transform: translateY(-3px);
border-color: rgba(0, 0, 0, .3);
box-shadow: 0 10px 30px rgba(0, 0, 0, .09), 0 1px 2px rgba(0, 0, 0, .04);
}export function Done() {
return (
<a href="#lesson" className="zzm-cardlink zzm-cardlink--done" style={{ display: 'block', width: 280, textDecoration: 'none', color: 'inherit' }}>
<div style={{ aspectRatio: '16/9', borderRadius: 12, background: '#131316' }} />
<div style={{ margin: '12px 4px 4px', fontSize: 14, fontWeight: 600, lineHeight: '20px' }}>为什么是 Obsidian</div>
<div style={{ margin: '0 4px', fontSize: 12.5, lineHeight: '20px', color: '#8B8B85' }}>整卡朱染:远看就知道这节看完了。</div>
</a>
)
}<a
href="#lesson"
class="zzm-cardlink zzm-cardlink--done"
style="display: block; width: 280px; text-decoration: none; color: inherit"
>
<div style="aspect-ratio: 16/9; border-radius: 12px; background: #131316"></div>
<div style="margin: 12px 4px 4px; font-size: 14px; font-weight: 600; line-height: 20px">
为什么是 Obsidian
</div>
<div style="margin: 0 4px; font-size: 12.5px; line-height: 20px; color: #8b8b85">
整卡朱染:远看就知道这节看完了。
</div>
</a>/* controls.css */
.zzm-v4 .zzm-cardlink {
background: #FFFFFF;
border: 1px solid rgba(0, 0, 0, .09);
border-radius: 16px;
padding: 12px;
cursor: pointer;
box-shadow: 0 1px 2px rgba(0, 0, 0, .04);
transition: transform .16s ease, box-shadow .16s ease, border-color .16s ease;
}
.zzm-v4 .zzm-cardlink:hover {
transform: translateY(-3px);
border-color: rgba(0, 0, 0, .3);
box-shadow: 0 10px 30px rgba(0, 0, 0, .09), 0 1px 2px rgba(0, 0, 0, .04);
}
.zzm-v4 .zzm-cardlink--done {
background: rgba(166, 64, 47, .04);
border-color: rgba(166, 64, 47, .35);
}
.zzm-v4 .zzm-cardlink--done:hover {
border-color: rgba(166, 64, 47, .55);
}类名
| 类 | 用途 |
|---|---|
.zzm-card | 静态内容面板:统计、表单卡、说明卡 |
.zzm-cardlink | 可点内容卡:悬停描边 .3 + 上浮 3px + 柔影 |
.zzm-cardlink--done | 已完成:整卡朱染 |
.zzm-hovercard | 课程卡 / 系列卡的悬停手感(与 cardlink 相同,不带白卡承托) |
铁律
✓ 要卡 16、卡内嵌图 12
✗ 不要在卡上内联写
box-shadow 或 borderColor✓ 要完成态用容器级朱染
✗ 不要在角落放一个 18px 小勾让人去找