wired-divider 手绘风格分隔线组件:从安装配置到源码绘制原理全解析
UI组件前端【免费下载链接】wired-elementsCollection of custom elements that appear hand drawn. Great for wireframes or a fun look.项目地址https://gitcode.com/gh_mirrors/wi/wired-elements点击查看免费下载wired-divider是 wired-elements 组件库中用于在页面区块之间绘制一条手绘感分割线的轻量级 Web Component。本文以 docs/wired-divider.md 为骨架结合 源码实现 深入讲解它的安装方式、elevation属性、CSS 定制技巧以及底层基于 Rough.js 的绘制与响应式重绘机制读完即可在 wireframe、原型草图或趣味风格页面中直接使用并自由调参。组件简介用一条手绘线划分内容区块wired-divider在页面中渲染一条略带抖动、具有手绘笔触的水平分隔线用于替代传统的hr非常适合线框图wireframes、低保真原型mockups或任何追求随手画风格的界面。该组件自 2.0.0 版本2019 年 10 月加入 wired-elements见 CHANGELOG.md当前仓库包版本为 3.0.0-rc.7见 package.json。组件本身不包含任何可见的 HTML 内容而是通过自定义元素wired-divider在内部生成一个 SVG再经由 Rough.js 的绘图算法输出带随机抖动的路径。它由 WiredDivider 类 实现继承自WiredBasesrc/wired-base.ts。安装与引入通过 npm 安装把 wired-elements 添加到你的 JavaScript 项目npm i wired-elements安装完成后即可从包入口导入WiredDividerimport { WiredDivider } from wired-elements; // 或者按需只加载单个组件 import { WiredDivider } from wired-elements/lib/wired-divider.js;两种方式都会注册wired-divider自定义元素。第一种方式经由包总入口 src/wired-elements.ts 一次性导出所有组件第二种方式直接加载单个编译产物lib/wired-divider.jslib目录由npm run build调用 TypeScript 编译生成编译配置见 tsconfig.json。通过 CDN 直接引入不经过打包工具时可以在 HTML 页面中直接加载 ES Modulescript typemodule srchttps://unpkg.com/wired-elements/lib/wired-divider.js?module/script加载后页面上所有wired-divider标签都会被自动升级为手绘分隔线组件。在 HTML 中使用最简单的用法是把wired-divider放在两个内容区块之间。原文档给出的示例pLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua./p wired-divider/wired-divider pLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua./p仓库中提供了可直接运行的完整示例页面 examples/divider.html它通过script typemodule src../lib/wired-divider.js/script引入本地构建产物并用两段 Lorem ipsum 文本夹着一个wired-divider/wired-divider来演示效果。参照该示例你的页面最小结构为!DOCTYPE html html head script typemodule srchttps://unpkg.com/wired-elements/lib/wired-divider.js?module/script /head body p上方段落……/p wired-divider/wired-divider p下方段落……/p /body /html分隔线会自动撑满宿主元素display: block的可用宽度并在组件首次渲染或容器尺寸变化时按当前宽度重新绘制。属性详解elevationwired-divider只暴露一个属性属性类型取值范围默认值说明elevationNumber15含边界1绘制的手绘线条数elevation表示组件绘制几条叠加的抖动线条。值为 1 时只画一条线值越大线条越浓重视觉上像多层描边可用作更强的视觉分隔强调。!-- 单条线默认 -- wired-divider/wired-divider !-- 双线分隔 -- wired-divider elevation2/wired-divider !-- 五条线最浓重 -- wired-divider elevation5/wired-divider从源码看elevation是property({ type: Number })声明的一个数字属性src/wired-divider.ts#L8并且超出 15 范围的值会被钳制。绘制与尺寸计算两处都执行了同样的钳制逻辑const elev Math.min(Math.max(1, this.elevation), 5);也就是说即使传入elevation10或elevation0实际绘制仍按 5 条或 1 条处理而不是抛出错误。由于它是响应式属性运行时通过 JS 修改也会触发重绘const divider document.querySelector(wired-divider); divider.elevation 3; // 立即变为 3 条线自定义外观颜色与线宽组件遵循currentColor继承机制因此通过 CSS 的color属性即可改变分隔线颜色无需任何专属样式变量wired-divider { color: #b03060; /* 任意文字颜色都会作用于分隔线 */ }原因在基类样式 src/wired-base.ts#L24-L28 中所有path均设置了stroke: currentColor;和stroke-width: 0.7;。如果希望更粗的笔触可以直接覆盖路径样式wired-divider path { stroke-width: 1.5; }此外基类样式还规定宿主元素默认opacity: 0只有当组件完成首次绘制并加上wired-rendered类后才淡入显示src/wired-base.ts#L6-L12避免用户看到绘制前的空白或半成品闪烁。源码原理手绘线是如何画出来的画布尺寸与线条布局WiredDivider的重绘流程由基类WiredBase.wiredRender()驱动src/wired-base.ts#L44-L59先通过canvasSize()计算画布尺寸再调用抽象方法draw()绘制。divider 的实现非常直观src/wired-divider.ts#L30-L41protected canvasSize(): Point { const size this.getBoundingClientRect(); const elev Math.min(Math.max(1, this.elevation), 5); return [size.width, elev * 6]; } protected draw(svg: SVGSVGElement, size: Point) { const elev Math.min(Math.max(1, this.elevation), 5); for (let i 0; i elev; i) { line(svg, 0, (i * 6) 3, size[0], (i * 6) 3, this.seed); } }可以拆解出几个关键结论高度公式画布高度 elevation × 6像素即每条线占用 6px 的纵向空间线条位置第i条线从 0 开始绘制在纵向i * 6 3处正好落在每个 6px 条带的垂直居中位置横向贯穿每条线从 x0 画到 x容器宽度因此分隔线始终占满可用宽度画布宽度自适应宽度来自getBoundingClientRect()所以无论容器如何变化线条都会重新铺满。抖动效果来自 Rough.jsline()函数在 src/wired-lib.ts#L100-L102 中定义它调用 Rough.js 的roughLine渲染器生成 SVG path。Rough.js 的随机参数在 src/wired-lib.ts#L32-L54 统一配置roughness: 1抖动程度bowing: 0.85弯曲程度maxRandomnessOffset: 2随机偏移上限stroke: #000、strokeWidth: 1.5作为绘制参数最终呈色仍受currentColor影响正因为 Rough.js 引入了随机偏移画出的线不是笔直的标准线段而是带着轻微毛边与弯曲的手绘感线条。随机种子每次都是独一无二的手写体每个组件实例在创建时都会生成一个随机种子src/wired-base.ts#L38protected seed Math.floor(Math.random() * 2 ** 31);这个seed在每次调用line()时作为参数传入 Rough.js。结果是同一个页面上多个wired-divider的抖动形态各不相同如同每个人手写的线都不一样而同一实例的多次重绘如窗口缩放则会复用同一个 seed保持线条形态稳定一致。响应式重绘机制WiredDivider通过两种机制监听尺寸变化src/wired-divider.ts#L52-L72优先使用ResizeObserver观察宿主元素尺寸变化时触发wiredRender()若环境不支持ResizeObserver则回退到监听window的resize事件passive: true。而wiredRender()内部还会做一次尺寸比对src/wired-base.ts#L45-L58只有宽高真正变化时才清空旧的 SVG 子节点并按新尺寸重绘否则直接跳过避免无意义的重复绘制开销。组件在disconnectedCallback中会正确解除监听防止内存泄漏。与整个组件库的关系wired-divider只是 wired-elements 中 20 余个手绘组件之一总入口 src/wired-elements.ts 会导出全部组件包括WiredButton、WiredInput、WiredCard等因此安装一个包即可按需引用任意组件。各组件共享 WiredBase 基类 的尺寸变化重绘 随机种子 currentColor 上色这套统一机制使用体验一致。更多组件的 API 文档位于 docs 目录组件行为也遵循 README 中的通用安装与使用约定见 README.md。许可证wired-divider 随 wired-elements 整体以 MIT License 开源版权归 Preet Shihn 所有见 docs/wired-divider.md 与 package.json 中的 license 字段。你可以在个人与商业项目中自由使用包括 wireframe 工具、原型演示和产品 UI。赞分享UI组件前端【免费下载链接】wired-elementsCollection of custom elements that appear hand drawn. Great for wireframes or a fun look.项目地址https://gitcode.com/gh_mirrors/wi/wired-elements点击查看免费下载相关推荐flask-restful-swagger源码解析Swagger规范提取的实现原理flask restful swagger源码解析Swagger规范提取的实现原理 flask restful swagger是一个专为Flask RESTf后端开发工具MJML 邮件开发指南mj-divider 分隔线组件从配置到源码原理全解析MJML 邮件开发指南mj divider 分隔线组件从配置到源码原理全解析 导读 mj divider 是 MJML 标准组件库中用于在响应式邮件中插入水平前端CLIwired-elements 之 wired-radio-group手绘风格单选组组件完整使用与源码解析wired elements 之 wired radio group手绘风格单选组组件完整使用与源码解析 导读 wired radio group 是 wirUI组件前端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

EOS 开发入门:使用 cleos create key 生成区块链账户密钥对(公钥与私钥)完整指南

EOS 开发入门:使用 cleos create key 生成区块链账户密钥对(公钥与私钥)完整指南

区块链 【免费下载链接】eos An open source smart contract platform 项目地址: https://gitcode.com/gh_mirrors/eo/eos 点击查看 免费下载 导读 本文基于当前 EOS 开源仓库(eos)中的官方操作指南(docs/02_cleos/02_how-to-g…

2026/9/24 4:52:31 阅读更多 →
RenderDoc 功能测试与验证指南:从 ad-hoc 手测到自动化测试套件

RenderDoc 功能测试与验证指南:从 ad-hoc 手测到自动化测试套件

开发工具调试器图形学GPU 【免费下载链接】renderdoc RenderDoc is a stand-alone graphics debugging tool. 项目地址: https://gitcode.com/gh_mirrors/re/renderdoc 点击查看 免费下载 本指南面向 RenderDoc 的贡献者与二次开发者,系统说明在为 Rend…

2026/9/24 4:51:31 阅读更多 →
DP83848工业以太网PHY设计调试全攻略:从硬件到驱动

DP83848工业以太网PHY设计调试全攻略:从硬件到驱动

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 4:51:30 阅读更多 →

最新新闻

Mac录屏全攻略:自带工具与OBS等专业方案选型指南

Mac录屏全攻略:自带工具与OBS等专业方案选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:21:22 阅读更多 →
VC6.0程序在Win11上闪退?三步修复兼容性实战指南

VC6.0程序在Win11上闪退?三步修复兼容性实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:21:22 阅读更多 →
STM32G4 ADC硬件过采样与软件滤波实战:从配置到代码落地

STM32G4 ADC硬件过采样与软件滤波实战:从配置到代码落地

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:21:22 阅读更多 →
VCS后仿真SDF警告处理:编译选项实战指南

VCS后仿真SDF警告处理:编译选项实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:21:22 阅读更多 →
球杆平衡系统:从PID到LQR的控制算法实战指南

球杆平衡系统:从PID到LQR的控制算法实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:21:22 阅读更多 →
Presto Release 0.161 技术详解:ORDER BY 语义变更、EXCEPT 正确性修复与连接器增强

Presto Release 0.161 技术详解:ORDER BY 语义变更、EXCEPT 正确性修复与连接器增强

大数据数据库后端 【免费下载链接】presto The official home of the Presto distributed SQL query engine for big data 项目地址: https://gitcode.com/gh_mirrors/pre/presto 点击查看 免费下载 导读 本文基于 Presto 官方发布说明 release-0.161.rst&#xf…

2026/9/24 6:20:22 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →