
lucide 原生 JavaScript 如何混用 Lucide Lab 图标与自定义图标【免费下载链接】lucideBeautiful consistent icon toolkit made by the community. Open-source project and a fork of Feather Icons.项目地址: https://gitcode.com/GitHub_Trending/lu/lucide在只有 HTML 原生 JavaScriptVanilla JavaScript的项目里页面需要同时显示 Lucide 主库图标、主库之外收录在 Lucide Lab 的图标以及自己编写的自定义 SVG 图标。Lucide Lab 是“不属于 Lucide 主库”的图标集合通过lucide/lab包引入原生 JavaScript 版本的做法是HTML 中写i>pnpm add lucide lucide/labyarn add lucide lucide/labnpm install lucide lucide/labbun add lucide lucide/lab以上四条任选其一按你项目实际使用的包管理器执行即可。写 HTML 占位元素Lucide 是 ES Modules 构建的完全可 tree-shaking。createIcons的工作方式是查找带data-lucide属性的元素并将其替换成给定图标名对应的 SVG。在 HTML 中为每个图标写一个占位元素!DOCTYPE html html body i>import { createIcons, Smile } from lucide/dist/cjs/lucide; import { avocado as Avocado } from lucide/lab; createIcons({ icons: { Avocado, } });icons参数接收一个“图标 key → iconNode”的对象。Lab 图标从lucide/lab按名字导入例如avocado自定义图标则是你自己构造的 iconNode 数据结构。官方文档在框架版本如 Astro、Preact、React的示例中展示了自定义 iconNode 的写法即以IconNode类型描述的二维数组元素形如[circle, { cx: 12, cy: 8, r: 5 }]--- const customIcon: IconNode [ [circle, { cx: 12, cy: 8, r: 5 }] ]; --- Icon iconNode{customIcon} size24 colorblue /在原生 JavaScript 中同样的二维数组就是传给icons的值。把 Lab 图标和自定义图标放进同一个icons对象即可在一次createIcons调用中混用import { createIcons } from lucide; import { avocado as Avocado } from lucide/lab; // 自定义图标的 iconNode二维数组元素为 [SVG 标签名, 属性对象] const myRocket [ [path, { d: M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z }], [path, { d: M12 15l-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z }], [path, { d: M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0 }], [path, { d: M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5 }] ]; createIcons({ icons: { Avocado, my-rocket: myRocket, } });两点说明官方 Vanilla JS 文档只完整示范了 Lab 图标的注册自定义 iconNode 的数组结构来自框架版文档示例原生 JavaScript 中写法去掉类型标注、直接作为普通对象传入即可。自定义图标的d、cx、cy等属性值必须是你自己设计的 SVG 路径官方示例中的值如cx: 12, cy: 8, r: 5只用于展示结构不要原样当作最终图形使用。用 attrs 给混合图标统一设置样式createIcons支持额外参数其中attrs用于传递附加自定义属性例如 CSS 类或描边选项对所有被替换的图标生效。官方完整示例import { createIcons } from lucide; createIcons({ attrs: { class: [my-custom-class, icon], stroke-width: 1, stroke: #333 }, nameAttr: data-lucide, // attribute for the icon name. root: element, // DOM element to replace icons in. inTemplates: true // Also replace icons inside template tags. });其中attrs控制颜色、描边宽度这类统一外观nameAttr可调整用于替换图标的属性名默认即data-lucideroot指定在哪个 DOM 元素范围内替换图标适合操作大型 DOM 的局部区域或 Shadow DOM 内的元素inTemplates: true表示连template标签里的图标也一并替换。只需默认行为时传icons一个参数即可。Lab 图标与常规 lucide 图标一样可接收调整外观的属性参数。如何验证替换成功createIcons的行为定义是搜索data-lucide属性元素并替换为 SVG。因此验证方式是检查 DOM页面加载并执行createIcons后原来写i contenteditable="false">【免费下载链接】lucideBeautiful consistent icon toolkit made by the community. Open-source project and a fork of Feather Icons.项目地址: https://gitcode.com/GitHub_Trending/lu/lucide创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考