彩虹糖霜的工作方式类似于 @vanilla-extract/sprinkles。与 sprinkles 一样,它在构建时生成自定义 CSS 实用类。而 sprinkles 需要预定义可用值列表,彩虹糖霜使用 CSS 自定义属性,通过内联样式变量分配允许动态值。
与 sprinkles 相比:
[预定义值] * [可能的条件]。彩虹糖霜生成的 CSS 只随条件数量增加而增加。<hr /> <hr />function App() { return ( // 使用预定义值 <Box bg="$blue50" margin="$large"> {/* 或任何有效的 CSS 值 */} <Box textAlign="center" fontSize="30px"> Hello world! </Box> </Box> ); }
安装彩虹糖霜。
npm install rainbow-sprinkles
创建一个 rainbow-sprinkles.css.ts 文件,然后创建并导出你的 rainbowSprinkles 函数:
// rainbow-sprinkles.css.ts import { defineProperties, createRainbowSprinkles } from 'rainbow-sprinkles'; // 或导入主题(例如 `createTheme`、`createThemeContract`) const vars = { space: { none: '0', small: '4px', medium: '8px', large: '16px', // 等等 }, colors: { blue50: '#eff6ff', blue100: '#dbeafe', blue200: '#bfdbfe', gray700: '#374151', gray800: '#1f2937', gray900: '#111827', // 等等 }, }; const responsiveProperties = defineProperties({ conditions: { mobile: {}, tablet: { '@media': 'screen and (min-width: 768px)' }, desktop: { '@media': 'screen and (min-width: 1024px)' }, }, defaultCondition: 'mobile', dynamicProperties: { // 定义预设值,将自动提示 color: vars.colors, backgroundColor: vars.colors, margin: vars.space, marginTop: vars.space, marginLeft: vars.space, marginRight: vars.space, marginBottom: vars.space, // 可以使用任何 CSS 值 display: true, textAlign: true, flexDirection: true, justifyContent: true, alignItems: true, }, staticProperties: { // 构建不使用 CSS 变量的实用类 display: ['block', 'flex', 'inline-block', 'inline-flex'], }, shorthands: { bg: ['backgroundColor'], m: ['margin'], mr: ['marginRight'], ml: ['marginLeft'], mt: ['marginTop'], mb: ['marginBottom'], marginX: ['marginLeft', 'marginRight'], marginY: ['marginTop', 'marginBottom'], mx: ['marginLeft', 'marginRight'], my: ['marginTop', 'marginBottom'], }, }); export const rainbowSprinkles = createRainbowSprinkles(responsiveProperties); export type Sprinkles = Parameters<typeof rainbowSprinkles>[0];
然后在你的"宿主"组件中进行设置(在这个例子中是一个 Box 组件):
// Box.tsx import { rainbowSprinkles, Sprinkles } from './rainbow-sprinkles.css'; interface BoxProps extends Sprinkles { children?: React.ReactNode; } export const Box = ({ children, ...props }: BoxProps) => { const { className, style, otherProps } = rainbowSprinkles(props); return ( <div className={className} style={style} {...otherProps}> {children} </div> ); };
🎉 准备就绪!
// App.tsx import { Box } from './Box'; function App() { return ( // 使用预定义值 <Box bg="$blue50" margin="$medium $large"> {/* 或任何有效的 CSS 值 */} <Box textAlign="center" fontSize={{ mobile: '16px', desktop: '32px' }}> Hello world! </Box> </Box> ); }
你可以为给定的属性集定义一个 CSS 层。
// rainbow-sprinkles.css.ts import { layer } from '@vanilla-extract/css'; import { defineProperties } from 'rainbow-sprinkles'; export const sprinklesLayer = layer(); const properties = defineProperties({ '@layer': sprinklesLayer // 等等 });
dynamicProperties 与 staticProperties支持动态值的一个代价是我们必须增加文档的大小。不是仅仅向元素添加一个类来添加样式,而是同时添加一个实用类和内联样式分配。虽然这种设置在许多情况下仍会产生更小的整体包大小,但一些大型应用可能会观察到特定 CSS 属性和值组合的频繁重复出现。在这些情况下,可以在初始配置中将这些组合设置在 staticProperties 中。staticProperties 将生成典型的 CSS 实用类。Rainbow Sprinkles 的运行时部分将优先使用 staticProperties 创建的 CSS 类,而不应用任何内联样式分配。
这里有一个可能有价值的场景示例。你的组织设置了 Rainbow Sprinkles 并得到了广泛采用。你的指标显示最常用的属性/值组合是 display="flex" 和使用应用主题变量的 margin。你可以运行一个实验来评估将这些属性/值组合设为静态是否能改善包大小。
createRainbowSprinkles({ dynamicProperties: { // 仍然支持任意值 display: true, margin: true, }, staticProperties: { // 同时生成固定的 CSS 类 display: ['flex'], margin: vars.space, }, });
贡献是使开源社区成为学习、激励和创造的绝佳场所的原因。我们非常感谢你做出的任何贡献。有关详细的贡献指南,请参阅 CONTRIBUTING.md。
根据 MIT 许可证分发。更多信息请参见 LICENSE。


免费创建高清无水印Sora视频
Vora是一个免费创建高清无水印Sora视频的AI工具


最适合小白的AI自动化工作流平台
无需编码,轻松生成可复用、可变现的AI自动化工作流

大模型驱动的Excel数据处理工具
基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


AI论文写作指导平台
AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号