SuperAPI AI 工具集

Shade use primitives

前端与建站

查看项目

更新于 10-16 06:43

技能介绍

用途:在 Ghost 的 Shade 设计体系中,一个 className 只包含 flex、grid、gap、items-、justify- 等工具类的 div,应视为原语调用点,改用 Shade 原语,使布局按意图而非类名字符串来阅读。

安装与引入:import {Stack, Inline, Box, Grid, Container, Text} from '@tryghost/shade/primitives';

选型:Stack 用于纵向子元素(flex-col);Inline 用于横向子元素(flex-row,可选 wrap、as);Box 用于内容的内边距与圆角(带 padding、radius 属性);Grid 用于二维布局(display: grid);Container 用于宽度受限的外壳(max-width 包装);Text 用于带 size/tone/weight 的文本(as、size、tone、weight)。

间距:使用语义 gap 刻度而非原始数字。none 对应 gap-0(紧贴),xs 对应 gap-1(行内图标到文字),sm 对应 gap-2(密集列表、徽章),md 对应 gap-3(默认行列间距),lg 对应 gap-5(区块间距),xl 对应 gap-6(主块之间),2xl 对应 gap-8(页面级节奏)。同一刻度也适用于 Box 的 padding(padding="md" → p-3)。

示例(正确):<Box padding="lg" radius="md" className="border border-border-default"> 内嵌 <Inline align="center" gap="md" justify="between">,其中用 <Stack gap="xs"> 包裹两个 <Text>(weight="semibold" 与 size="sm" tone="secondary")。

不推荐:用裸 div 做 flex 布局(如 className="flex flex-col gap-2",内部用 font-semibold 的 div 和 text-sm text-gray-600 的 div);以及用原始 gap-4 代替 gap="md"。

不适用场景:已有现成模式时(页头用 PageHeader、列表页用 ListPage);当包装层开始感知 Ghost 数据时,这属于 Pattern 而非原语组合;以及在 Shade 原语自身实现内部。

className 仍可用:原语会转发 className 并通过 cn() 合并,用于 prop API 未覆盖的一次性样式(如 className="border border-border-default")。不要用 className 设置 flex、gap、align、justify,这些应由 props 承担。

限制:资料未说明更多细节、版本要求或收费情况,暂未提供。