@canonical/styles

中文文档
0.45.0发布于 2026/10/23LGPL-3.0ES Module构建来源已验证近 30 天下载 1万

Canonical Design System 全球风格表. 重置,打字, 和设计符号, 在命名的级联层.

中文使用文档
文档目录15 节
  1. 安装
  2. 使用量
  3. 入境点
  4. 分层
  5. 何为分层
  6. 什么是故意无层次的
  7. 元素级规则应用的地方
  8. 此套件保证
  9. 此套件不保证什么
  10. 浏览器楼层
  11. 移动到分层释放
  12. 页面上的移动
  13. 设计托肯斯
  14. 依赖关系
  15. 软件包结构

@ canonical/ 风格

此 README 是为两个读取器撰写的:将设计系统添加到应用程序中的人,以及 保持这个包裹的人。 可以通过测试检查债权的,以测试命名.

Canonical设计系统的全球风格表. 一个导入带来重置, 打印 引擎、设计符号、修饰家庭和布局预设。 所有这个包 本身的船舶处于一个命名的级联层中,其元素级规则将整页作为 重新设置是可行的——没有任何限制,也没有任何东西必须加以标记。 住在 @canonical/styles-typography 并随此软件包一同发布,属于同一层.

安装

bun add @canonical/styles

使用量

在任何组件之前导入一次, 作为您应用程序入口的首次导入 :

@import url("@canonical/styles");

或来自 Java 脚本或 TypeScript :

import "@canonical/styles";

然后在你的根上宣布表面:

<html class="app comfortable">

单行是根契约,它有两个部分.

类这是什么意思数值
上下文一种表层,它为每个密度值设置舒适/密集的对.app, (中文(简体) ), site 或者说 docs
密度哪个是生效的.comfortable 或者说 dense

色彩方案是可选的 : light 或者说 dark 标出一分,两分不开,让页面跟着 读者操作系统. 根基上没有别的东西,特别是没有一类 开关重置 。 它的适用是因为样式表已加载.

两个类都设置了继承的自定义属性,因此可以坐在文档元素上,也可以坐在任意 阅读它们的组件的祖先——参考应用程序显示: app comfortable 打开 <body>。 。 。 .

ds 这不是一个根源阶级,从来没有。 每一个组成部分都以此为根基 组件规则可以选择 .ds.button 而不是说 .button 无法与页本身相撞 分类名称.

运行另一个 CSS 框架的页面 无法让样式表重排它没有的半个 迁移,这就是 @canonical/styles-vanilla-adapter 是用来: 它运送一个副本 包的三层元素级层 限于一个团队移交的部分 保持两层 将主题信号连接起来 包里的一个测试 将其副本绑入这里的文件, 以便两者不能漂移 。 这个安排没有任何改变 软件包或不需要的页面标记.

入境点

五个. @canonical/styles 是普通页面想要的:整个样式表,顺序 见上文。 3个是样式表 部分,第5个是单项命令语句 其他四个进口.

条目这是什么
@canonical/styles一切:值,元素规则和布局预设.
@canonical/styles/tokens.css设计系统声明的每个自定义属性, 而不是选择元素的规则 。 这里的任何内容都不会改变页面,直到从中读出某个值,只有下文指出的一个例外.
@canonical/styles/elements.css设计系统适用于平面元素的每一个规则:重置,根的基线,以及带有基线引擎的打字.
@canonical/styles/layout.css预设布局 - grid, (中文(简体) ), subgrid, (中文(简体) ), responsive, (中文(简体) ), intrinsic 财务报告和审定财务报表 content-flow ——在一页名空间中声称这五个类名.
@canonical/styles/layers.css命令声明和没有其他内容:没有规则、没有导入、没有声明。 上面四个词一样的句子是打开的;每个词都输入作为第一条规则. 一页从来不需要它自己.

一个例外的"改变什么," 这是值得知道之前,你导入 tokens.css设计 函数生成的主题表声明 color-scheme 打开 :root, (中文(简体) ), .light 财务报告和审定财务报表 .dark 与 颜色符号,且属性不是惰性:它决定了画布的颜色,窗体控件, 滚动条和系统颜色,无论任何事物是否读取一个符号,在混合页面上 其他框架的载体 light 或者说 dark 捡取也. 无法分割 在这里,表是生成的,声明是按与符号相同的规则排列的——因此分开 它们是对信物包的发射器的改变,追踪到PRA-149. 一定没有的申请 它声明 color-scheme 本身,在上一层 ds.modifiers 或无分层. 那三个 声明是唯一的非海关财产 tokens.css 载着;里面所有的东西都是 习惯财产,在规则读取之前,它什么都不做.

这些部分存在的原因只有一个。 运行另一个 CSS 框架的页面不能包含元素 规则:另一个框架有自己的 p 规则,只有两个人能拥有 line-height。这样 页面 tokens.css 财务报告和审定财务报表 layout.css从框架的适配器中获取其要素规则 相反,在限于页面部分的拷贝中,设计系统拥有—— @canonical/styles-vanilla-adapter 将副本建出相同的文件 elements.css 进口.

两个属性使部分可以安全地混合,两者都可见于条目的写法.

每个条目先导入订单,订单会被写入一个文件. layers.css 拿着 语句,而不是其他的;四个条目中的每一个都导入它作为第一条规则。 命令必须 在命令任何规则之前到达浏览器, 写一次意味着两个条目永远不会有异议 ——如果每一份清单重复,他们可以这样做,但将留下同样的规则仲裁 根据消费者选择的条目不同 用铬测量:读取的语句 a 一个 @import 命令进口单完全如原样.

不得进口其他条目. 一个 @layer 层块内的语句 宣告 而不是顶层,所以一个构成另一层的条目会嵌入顺序 而不是分享它。 保持它们的独立性意味着一个页面可以按任何顺序装入一、二或全部三个,而且 得到同样的结果——每个文件都一次取出、解析和应用,这很重要,因为 浏览器处理每个 @import 因为它的样式表 和去复制什么.

分层

所有这个包裹本身的船 都处于一个命名的地层, 顺序是由一个语句固定的, 住在这里 layers.css 每一个入口都先进口 此软件包所导入的打印引擎是相同的 层 :

@layer normalize, ds.tokens, ds.reset, ds.typography, ds.modifiers, ds.surfaces,
  ds.states, ds.components, ds.components.global, ds.components.sites,
  ds.components.documentation, ds.components.stores, ds.components.apps,
  lib, app;

从下而上地阅读它——每个位置都是一种争论.

层里面有什么东西为什么它坐在那里
normalize这个包是自己重置的.最卑劣的,因为其他一切都是为了推翻它.
ds.tokens原始的价值, 以及间隔,运动和溢出的迹象.在重置之上,因为任何事物读取它之前,必须先有符号存在;在一切读取一个符号之前,必须存在符号.
ds.reset文档根为自己所做的声明:字体,颜色,行高,重量,文本包装,字体平滑——和边框大小化,以及内部的一切.上面的标志,因为它读取它们;下面的打印引擎和组件,它精炼它开始的内容.
ds.typography应用打印绘图的元素规则和基线引擎,来自 @canonical/styles-typography。 。 。 .在重置上方,因为它是对文本的更具体的语句;在修饰符下方,可以重置比例表.
ds.modifiers主题,打字尺度,意向家族(先入为主,批判性,强调性,重要性)及其shims,以及上下文和密度类.上面的打字,因为一个修饰者的工作是改变下面的地层生产的东西.
ds.surfaces表面家庭: surface, (中文(简体) ), contrasted, (中文(简体) ), modal。 。 。 .在修饰器上方,因为一个表面会重新指向修饰器设置的彩色通道.
ds.states衍生出悬浮,活性和被禁用的通道.在地表上方,因为一个状态来自于地表所决定的状态.
ds.components没有,按照规则。 它是下面各层的母体,没有自己的规则.在设计系统的8个顶层层中最高,因此一个组件是自己盒子上的最终词. 写规则 直接 进入母层坐落在该层所隐含的最终子层上,该子层上方是每个被命名的子层上方——因此这样的规则会排到每层之上,任何组件包都无法被分层覆盖. 这包里装的所有东西 ds.components 故你们应当分层坐.
ds.components.global共享组件包的样式表,以及这个包自己的布局预设.分层树的基部:其他分层所完善的.
ds.components.sites站点等级的样式表.4个二级级从未出现在同一页上,因此它们之间的顺序在它们自己之间决定了什么. 无论如何,它都是在这里固定的,这样它就永远不能先依赖哪个捆绑的包.
ds.components.documentation文档级别样式表.如上说.
ds.components.stores存储层的样式表 .如上说.
ds.components.apps共享应用程序等级的样式表; 一个应用程序自己的等级声明它上方的一层.如上说.
lib不属于设计系统的库的样式表,如文档工具(@canonical/react-tokens, (中文(简体) ), @canonical/storybook-helpers) (中文(简体) ).在设计系统之上,所以一个工具自己的规则胜过它显示的组件.
app应用程序是自己的CSS.最高,所以应用程序的页面有最后一个单词.

lib 财务报告和审定财务报表 app 是唯一的外层名称 normalize 财务报告和审定财务报表 ds.*命令语句修正 层的相对顺序,它们第一次出现,一个后期的语句永远不能重排它们,所以 一个应用程序先导入此软件包,然后在 @layer app,没有说明 自己来的.

本节为参考文献:每一层中的内容,以及位置. 命令背后的理由——如何 浏览器决定,为什么一个规则 没有任何层击败每一个层,为什么封装一个混合的页面 需要住在适配器中而不是这里,而捆绑者对语句所做的是 级联合同。 。 。 .

构成部分等级

组件层遵循设计系统的分层树: 谁拥有一个组件决定哪个分层 它的规则进入, 更深层的获胜。 有三条规则是可行的,值得说明 很明显,因为一个软件包的作者必须跟随他们.

第二层在这里取名,满分. global, (中文(简体) ), sites, (中文(简体) ), documentation, (中文(简体) ), stores 财务报告和审定财务报表 apps 是设计系统的4个二级级加共享基,本声明修正了它们 秩序。 秩序。 其中一层的软件包以自己的名将样式表包裹起来,不需要做任何事情 还有.

一个子层宣布自己的地层, 也就是上面的地层. 一个应用程序自己的软件包 ——LXD级,比如说——将其CSS条目写成分两个步骤:

@layer ds.components.apps-lxd;       /* 1. name your layer */

@import url("./Button/styles.css");  /* 2. then import your stylesheets */
/* … the rest of the package's sheets, each wrapped in that layer … */

订单声明来自应用程序加载 @canonical/styles ưμ㼯a 使用量) (中文(简体) ). 浏览器第一次与它相会时, 就会放置一个图层名称, 所以与 15 名称已经确定, ds.components.apps-lxd作为新人,在他们身后附着 ds.components在每一层以上 这是树本身的规则——更具体的层次 胜出——这意味着这个样式表从来就不用知道哪些应用程序存在.

没有什么是直接写成的 ds.components。 。 。 . 父层中的声明 那层隐含的最后一个子层, 它在每一个被命名的子层之上, 所以一个规则写在那里 排名会比每个级别都要高 与级别的目的相反.

名称是树上的分层标识,小写并用连字符表示一个分层(apps-lxd, (中文(简体) ), sites-webcomponentsprototype) (中文(简体) ). 它们不是页面根部的上下文词(app, (中文(简体) ), site, (中文(简体) ), docs: 一层表示拥有组件的是谁, 上下文表示显示的是什么样的页面 两者由不同的人选择.

何为分层

文件层选择元素吗 ?
normalize.cssnormalize对
reset.css 根声明ds.reset对
reset.css 框大小ds.reset对.. *, (中文(简体) ), ::before, (中文(简体) ), ::after
spacing.cssds.tokens没有
motion.cssds.tokens没有
overflow.css 根默认ds.tokens没有
overflow.css .surfaceds.surfaces没有
grid.css 布局预设和内容流容器ds.components.global对
grid.css :root 默认ds.components.global没有 —— 预设读取, 保留在他们身上而不是移动到 ds.tokens
modifiers.density.cssds.modifiers没有
modifiers.states.shim.css, (中文(简体) ), modifiers.importance.shim.css, (中文(简体) ), modifiers.criticality.shim.cssds.modifiers没有
controls.hover.shim.cssds.surfaces 财务报告和审定财务报表 ds.states没有
@canonical/styles-typographyds.tokens 因为他们的名声, ds.typography 因为它的元素规则和引擎, ds.modifiers 用于输入的打印比例表其要素规则,是;其标志,不是
@canonical/design-tokens 分发文件ds.tokens, (中文(简体) ), ds.modifiers, (中文(简体) ), ds.surfaces, (中文(简体) ), ds.states ——每个文件打开自己的文件,但 modifiers.importance.css,是空的,没有打开没有

标有"是"的文件是适配器的受限拷贝必须照的. 其他的几乎都一样 自定义属性,在规则读取之前不做任何事情,而规则读取一个匹配 设计系统类。 有两个例外, 无论是有意的还是文件上的, 此包导入 而非写道:

  • modifiers.theme.css 套装 color-scheme —— 说 light dark 打开 :root, (中文(简体) ), light 打开 .light, (中文(简体) ), dark 打开 .dark ——全文件. 这就是它的要点: 彩色方案就是每个 light-dark() 符号解析反对,包括浏览器自己的窗体控制和滚动条,以及 它必须到达他们.
  • states.css 获取其国家频道 * – 每个元素有30个自定义属性. 这个 是一个生成的文件, 此软件包不是作者, 它只声明自定义属性, 所以 它的通用选择器花费一页, 无论如何它不会支付.

什么是故意无层次的

还有一件事: @font-face输入 fonts.css它定义了整个文档的字体,而不是样式 一个元素,这个样式表将每个面都声明一次,所以没有图层可以命令它 反之,将它放在一起不会改变计算值。 文件是选入并单独导入的 这样一来,已经为同一文件服务的应用程序就不会下载两次.

(Layers做排序) @font-face 规定其中两人申报同一家族: 高层相貌 以源顺序胜过后一. 这里根本没有重复。 )

元素级规则应用的地方

至一一页. 其中三层选择元素而不是声明自定义属性—— normalize, (中文(简体) ), ds.reset 财务报告和审定财务报表 ds.typography ——它们应用了重置总是这样的方式: 样式表已经装入,所以规则已经生效。 没有标记可以添加和 没有子树提名.

这是蓄意的裁决,而不是疏忽。 之前的释放草案 限制了这些层次 到一个标记的子树, 这样运行两个 CSS 框架的页面就可以将它们分开 。 禁闭 工作,但是它让每个普通的页面只为一个问题付费 某些页面有: 根上的类, a 浏览器地板 它不需要, 和重置 沉默无所事事 如果该类被遗忘.

这个问题是真实的,所以问题就解决了. @canonical/styles-vanilla-adapter 船舶a 这三层的限量拷贝 只应用到一个团队交出的一页内, 并且该包中的测试将复制件绑入这里的文件,使两者不能漂移. 一个需要的页面 它安装它;一个从未听说过的页面.

此套件保证

保证后面那张支票
每个规则,包本身的船都位于13个设计-系统层中的一个,声明通过导入每个条目打开,到达浏览器之前. 它进口的印刷引擎也在里面.随"香草适配器"包而来的命令定着从已解析的样式表读出语句,并对照它检查包打开的每个层名. 此套件内部的检查——即所使用的图层集等于所宣布的集——正在被单独添加.
一个组件的应用程序级规则比同一组件的全局级规则要好,以两个捆绑器中先加载的哪个为准.两个子层在语句中被命名,所以它们的顺序在那里固定,而不是在初出场时,同样的顺序固定会将其读回. 组件包被包裹后会移动到它们,这是单独的改变;在此之前,两个子层都是空的,保证是空的.
货船没有 !important。 。 。 .同样的固定文件。 一个重要的声明颠倒了地层顺序,完全不能被地层仲裁,因此其中之一会推翻上面的保证.
下 prefers-reduced-motion: reduce,这个包定义的每个运动持续时间是 0s。 。 。 .src/motion.css,以及适配器包的减速固定器。 零取令牌是机制:一个组件读出令牌,所以没有任何东西可以比组件自己的声明要高. 给定的组件是否尊重了符号是包的保证,而不是这个保证. 仍为硬码持续时间的工作表,在偏好下仍为动画,正在被单独移动到符号上:在表格包中,共享输入铬(src/index.css)和8个组件表(ChoicesField, (中文(简体) ), RichChoicesField, (中文(简体) ), CheckboxInput, (中文(简体) ), RadioInput, (中文(简体) ), ColorInput, (中文(简体) ), ComboboxInput 及其清单, FileUploadInput, (中文(简体) ), SwitchInput);在全球一揽子方案中 Tooltip, (中文(简体) ), ContextualMenu 财务报告和审定财务报表 Popover,它设定了自己的持续时间属性;以及一个应用程序级工作表,即启动页 diff 查看器的文件头.
文档根声明基线——字体,颜色,行高,重量,文本包,字体平滑——页面继承自那里而不是浏览器的默认.与适配器包相接的计算式固定装置, 将每个部件的特性读取出来.

曾经坐在这里的两个保证是适配器的,而不是这个包的: 一个区域移交 在运行另一个 CSS 框架的页面中,它会像在普通页面上一样计算,而且没有 到达这样一个区域以外的一个裸露的元素. @canonical/styles-vanilla-adapter 状态和测试.

此套件不保证什么

  • 未上层的应用程序 CSS 击败了这里的所有规则. 级联就是这样定义的:规则是: 层在任意层中都比规则高。 这不是个缺陷,而是逃生舱门 表示一个应用程序,它想让这个软件包的图层顺序为它自己的 CSS 所必须的设置 CSS 输入 @layer app。见下文“迁移”.
  • !important 应用中或第三方 CSS 击败了这里的所有规则,对于重要的 声明层顺序倒转,所以最低层获胜。 此软件包不能做什么 改变这一点.
  • 此样式表样式为整页 . 重置到达每个 <body>, (中文(简体) ), <button>, (中文(简体) ), <pre> 财务报告和审定财务报表 <legend> 在文档中,布局预设要求类名 grid, (中文(简体) ), subgrid, (中文(简体) ), responsive, (中文(简体) ), intrinsic 财务报告和审定财务报表 content-flow 无论他们出现在哪里 这就是设计系统 重置是,这也是为什么一个同样运行另一个 CSS 框架的页面需要适配器而不是 此切入点.
  • color-scheme 设置在文档根上, 无论此样式表被装入何处,因为那是 这是什么 light-dark() 符号和浏览器自身的控制决定了反对。 这是一件事 在这里,消费者不能选择不使用某一类.

浏览器楼层

特性用于颜色萨法里火花
light-dark()每个颜色符号,包括 --color-text 在根上重设声明123国道17.5 国家120国
mod()基线引擎125号15.4 国家118 (韩语)
cap 单位默认基线引擎118 (韩语)17.2 联合国97 (英语)

将表格整体阅读,而不是逐行阅读:地板是每栏中最高的数字,因为 样式表使用全部。 没有浏览器 light-dark() 将根放下 color 宣布为 无效, 并返回到它自己的文本颜色, 因此重置适用, 但页面不是主题 .

这样,这个样式表的地板就用默认引擎 Chrome 125, Safari 17.5, (英语), 火狐 120。将默认引擎转换为 baseline-trim.css 升为 Chrome 133, Safari 18.2, Firefox 154 (英语). 打印引擎也使用 round(),在同一数字上 作为 mod()· ; @canonical/styles-typography“浏览器支持”一节是完整的表格,引擎由 发动机.

设计系统以当前浏览器为目标,不为更老的浏览器携带相容性shims. 一个 应用程序中不能移动的,应当标出一个版本.

移动到分层释放

此发布会做出一个应用程序必须回答的两个更改. 标记也不行,没有什么 添加到根上,重置完全适用于它以前的位置.

  1. 您的无级CSS现在击败了这个软件包中的所有规则. 在这之前, 释放大部分的东西 发送的软件包也是没有层的,所以您的软件包通过源命令与之相竞争 特异性,有时会丢失. 他们再也不能了。 如果你依靠我们的规则来取胜, 不会再这样了.

  2. 把自己的CSS放进去 @layer app。 。 。 . 首先导入此软件包, 然后包装您的应用程序 样式表 :

    @import url("@canonical/styles");
    
    @layer app {
      /* your CSS */
    }
    

    软件包的语句已命名 app在设计系统层之上,所以你的规则 而不是偶然的秩序, 而你不写你自己的声明.

如果您导入了子路径而不是软件包条目—— @canonical/styles/spacing.css 和五个 其它子路径此套件导出 —— 注意一个子路径没有命令语句, 因此其层 打开时由您自己样式表中首次显示的地方命令。 导入切入点,除非 你有理由不这么做.

页面上的移动

在Chrimium中测量,这个应用程序是设计系统的全过程,在设计系统之前,在设计系统之后,在设计系统之后,在设计系统之前,在设计系统之后,在设计系统之前,在设计系统之前,在设计系统之后,在设计系统之前,在设计系统之后,在设计系统之前,在设计系统之后,在设计系统之后,在设计系统之前,在设计系统之后,在设计系统之前,在设计系统之后,在设计系统之前,在设计系统之前,在设计系统之前,在设计系统之后,在设计系统之后,在设计系统的基础上,在设计系统的基础上,在设计系统中,在设计系统上,在设计系统的基础上,在设计系统上 根本没增加什么 四件事在每一个元素上都有变化 一个在 <hr>;没有别的了.

什麽在此之前之后为什么
line-height,没有设置的地方1.15 从旧重置中继承normal文档根宣布自己的基线
color,没有设置的地方rgb(0, 0, 0)oklch(0 0 0)根声明 var(--color-text):光线方案中相同的黑色, 但是它现在遵循主题而不是浏览器的默认
box-sizing,到处content-boxborder-box组件是针对它的
font-family 打开 <html>浏览器的 srif符号堆栈根声明字体; <body> 已经从打印映射器上得到了
overflow 打开 <hr>visiblehidden浏览器本身的价值; 一条规则没有内容可以溢出, 所以没有显示

昔有二事而无相

  • 这个 normalize.css 软件包不再是依赖。 此软件包会自写重置, 因此可以 被复制到适配器的封闭构件中,使其只包含设计系统的规则 实际上依赖。 狦 导入应用程序 normalize.css 通过我们,并想要它的其余部分,直接依赖它.
  • 旧的README说组件样式凌驾于修饰样式"不管源顺序". 没错 而不是:地层被宣布,但几乎没有被写进地层。 他们现在知道了.

设计托肯斯

以下符号集来自 @canonical/design-tokens 包括:

脚本集目录它打开的图层
sets.primitive底色调色板、相距尺度、字体大小ds.tokens
modifiers.theme浅/暗主题绘图,以及 color-scheme 文档根ds.modifiers
modifiers.surfaces地表高地标志ds.surfaces
modifiers.anticipation建设性/破坏性/挑衅意图ds.modifiers
modifiers.criticality错误/警告/成功/信息状态ds.modifiers
modifiers.emphasis品牌/重点/重点ds.modifiers
modifiers.importance一级/二级重要级别——生成的文件今天是空的,所以所运出的映射是这个软件包自己的shim,一个堆叠的更改会将导入降低,直到生成的文件有内容无
modifiers.typography打印尺度,通过 @canonical/styles-typographyds.modifiers
states交互式状态符号( 覆盖、 活动、 焦点、 禁用)ds.states

依赖关系

软件包作用
@canonical/design-tokensCSS 颜色、间距和状态的自定义属性
@canonical/styles-typography基线网格引擎和打印规模

软件包结构

src/
  index.css                       -- entry point: the layer statement, then the imports
  normalize.css                   -- this package's own reset
  reset.css                       -- the document root's baseline
  spacing.css                     -- spacing tokens
  motion.css                      -- motion tokens, and reduced motion
  overflow.css                    -- scroll overflow affordance
  grid.css                        -- layout presets
  modifiers.density.css           -- the context x density family
  modifiers.*.shim.css            -- temporary shims for unfinished generated modifiers
  controls.hover.shim.css         -- temporary shim for control selected/hover channels
  fonts.css                       -- opt-in @font-face, unlayered

版本与发布记录

@canonical/styles 共发布 57 个版本,首次发布于 2024/11/27;过去 12 个月发布了 39 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.45.0latest2026/10/2317 天前
0.44.12026/10/081 个月前
0.44.02026/10/051 个月前
0.43.02026/10/011 个月前
0.42.02026/09/281 个月前
0.40.02026/09/211 个月前

关于 @canonical/styles 的常见问题

@canonical/styles 是什么?

Canonical Design System 全球风格表. 重置,打字, 和设计符号, 在命名的级联层.

如何安装 @canonical/styles?

在项目目录运行 npm install @canonical/styles,或使用 pnpm add / yarn add / bun add。

@canonical/styles 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/canonical__styles 是否存在。

@canonical/styles 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@canonical/styles 可以商用吗?

@canonical/styles 使用 LGPL-3.0 许可。弱 Copyleft:作为库被调用时通常不要求开源你自己的代码,但修改库本身需以 LGPL 开源;前端打包合并后的适用边界存在不同理解。以上为概括,不构成法律意见,请以许可原文为准。

@canonical/styles 的下载量有多少?

根据 npm 官方下载统计,@canonical/styles 在 2026/10/09 – 2026/11/07 这 30 天内被下载 10,367 次,日均约 346 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@canonical/styles 还在维护吗?

最新版本 0.45.0 发布于 2026/10/23(17 天前);至今共发布 57 个版本,其中过去 12 个月发布了 39 个;首次发布于 2024/11/27。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。