Inputmask Colormask 扩展:为输入掩码添加独立配色的完整实战指南

发布时间:2026/10/9 2:24:36

Inputmask Colormask 扩展:为输入掩码添加独立配色的完整实战指南 前端UI组件【免费下载链接】InputmaskInput Mask plugin项目地址https://gitcode.com/gh_mirrors/in/Inputmask点击查看免费下载Colormask 是 Inputmask 提供的一个扩展它与标准 Inputmask 完全同源但额外允许你为掩码本身静态字符、占位符与光标单独指定颜色使其与用户输入的文本颜色相互独立。本文以仓库中的官方文档 Colormask.md 为主体结合 lib/extensions/colormask.js 与 lib/extensions/colormask.css 的源码实现完整讲解 Colormask 的引入方式、基础用法、样式定制原理与底层渲染机制读完你就能在自己的表单中落地一套灰色静态掩码 正常颜色输入的经典交互方案。一、Colormask 是什么官方文档对它的定位一句话可以概括Colormask 与 Inputmask 功能完全一致区别仅在于它允许你为掩码指定一种颜色。这一特性在以下场景中尤其有用掩码中的静态字符如-、(、)、空格与用户输入内容希望呈现不同颜色输入尚未完成时占位符与光标需要以弱化例如灰色的方式呈现突出用户已经键入的文本表单视觉上需要引导式输入框掩码看起来像底纹/水印而真实输入浮于其上。从源码看Colormask构造器并未重新实现掩码逻辑而是直接复用 Inputmask 的能力// lib/extensions/colormask.js function Colormask(alias, options, internal) { // 允许不带 new 直接调用 if (!(this instanceof Colormask)) { return new Colormask(alias, options, internal); } this.colorMask undefined; Object.getOwnPropertyNames(Inputmask).forEach(function (key) { if (!Object.prototype.hasOwnProperty.call(this, key)) { this[key] Inputmask[key]; } }, this); } Colormask.prototype Inputmask.prototype;可见 Colormask 以Inputmask.prototype为原型所有 mask 配置、校验、事件处理能力全部继承自 Inputmask额外只挂载了几个钩子hook来接管渲染这正是与 inputmask 相同但多了配色这一说法的源码依据。二、安装与引入2.1 经典script标签方式官方文档指出使用浏览器脚本方式时需要引入dist目录下构建产物的两个文件link relstylesheet hrefcolormask.css / script srccolormask.js/script仓库中对应的产物确实存在dist/colormask.css 与 dist/colormask.js。此外 webpack.config.js 中为 Colormask 单独配置了名为colormask的构建任务入口为 bundle.colormask.js产出dist/colormask与dist/colormask.min两套文件并同时生成 ES Module 版本dist/esm/colormask.mjs。如果你需要从源码自行构建可在仓库根目录运行npm run colormask2.2 ES Module / Bundler 方式在打包工具webpack、Vite、Rollup 等中使用时官方文档给出的标准写法是import inputmask/colormask.css; import Colormask from inputmask/colormask; Colormask({ mask: 999-999-9999 }).mask(selector);这里inputmask/colormask之所以可用是因为 package.json 的exports字段显式声明了./colormask子路径并同时提供了类型声明dist/types/extensions/colormask.d.ts、ESM 构建dist/esm/colormask.mjs与 CommonJS 构建dist/colormask.js./colormask: { types: ./dist/types/extensions/colormask.d.ts, import: ./dist/esm/colormask.mjs, require: ./dist/colormask.js }2.3 子路径导出无法解析时的兜底写法如果你的打包器如某些旧版本工具或特定配置不解析inputmask/*这样的 subpath exports官方文档明确给出了降级方案——直接使用dist目录下的文件import inputmask/dist/colormask.css; import Colormask from inputmask/dist/colormask.js;这与文档中Classic web方式指向同一份构建产物只是改由打包器来管理依赖。另外package.json中files字段包含dist/与lib/因此两种路径在安装后的 node_modules 中都是可用的。三、基本使用Colormask 的使用方式与 Inputmask 几乎完全一致只是把Inputmask(...)换成Colormask(...)import inputmask/colormask.css; import Colormask from inputmask/colormask; // 10 位电话号码掩码数字以灰色静态样式呈现输入文本以正常颜色呈现 Colormask({ mask: 999-999-9999 }).mask(document.querySelector(#phone));selector可以是任何 DOM 元素选择器或元素本身与 Inputmask 的mask()行为一致所有 Inputmask 支持的选项如placeholder、jitMasking、rightAlign、isRTL等理论上都可直接传给Colormask({ ... })因为它继承自Inputmask.prototype由于构造器内部做了this instanceof Colormask判断即使忘记写new也不会报错见 lib/extensions/colormask.js。在浏览器全局环境下脚本方式引入后可通过window.Colormask访问源码末尾有window.Colormask Colormask;的挂载用法同样为Colormask({ mask: 999-999-9999 }).mask(.my-input);四、通过 colormask.css 定制掩码配色文档强调使用前请先查看样式表colormask.css将颜色调整为你需要的值。整个 Colormask 的双色效果完全由样式驱动因此理解这份样式表是定制的关键。以下逐条解读 lib/extensions/colormask.cssdist/colormask.css为同名构建产物mark.im-caret { animation: 1s blink step-end infinite !important; } mark.im-caret-select { background-color: rgba(0, 0, 0, 0.25); } keyframes blink { from, to { border-right-color: black; } 50% { border-right-color: white; } } span.im-static { color: grey; } div.im-colormask { display: inline-block; border-style: groove; border-width: 1px; appearance: textfield; cursor: text; } div.im-colormask input, div.im-colormask input:-webkit-autofill { position: absolute !important; display: inline-block; background-color: transparent; color: transparent; -webkit-text-fill-color: transparent; transition: background-color 5000s ease-in-out 0s; caret-color: transparent; text-shadow: none; appearance: textfield; border-style: none; left: 0; /*calculated*/ } div.im-colormask input:focus { outline: none; } div.im-colormask input::selection { background: none; } div.im-colormask input::-moz-selection { background: none; } div.im-colormask input:-webkit-autofill ~ div { background-color: rgb(255, 255, 255); } div.im-colormask div { color: black; display: inline-block; width: 100px; /*calculated*/ }这些规则对应了 Colormask 渲染出的三类元素具体结构见下文源码剖析类名 / 选择器作用定制建议span.im-static掩码中的静态字符分隔符、括号等修改color: grey即可改变掩码底色这是最常用的配色入口mark.im-caret光标右侧边框闪烁动画调整blink关键帧中的border-right-colormark.im-caret-select文本选区高亮修改background-color的透明度div.im-colormask外层容器模拟输入框边框调整border-style/border-width获得不同边框观感div.im-colormask input真正接收键盘输入的input文字被设为透明一般无需改动color: transparent是实现输入文字与掩码分开着色的核心div.im-colormask div承载掩码模板静态字符 输入文本的渲染层修改color: black即为输入文本的实际颜色关键设计在于真实的input元素文字是透明的color: transparent; caret-color: transparent用户看到的输入内容实际由内层div的模板渲染掩码静态字符由span.im-static渲染。因此只需分别调整span.im-static与div.im-colormask div两处的颜色就能实现掩码一个颜色、输入另一个颜色。其中-webkit-text-fill-color: transparent与caret-color: transparent还处理了 WebKit 内核下自动填充与光标显示的问题。五、源码剖析双色效果是如何渲染出来的阅读 lib/extensions/colormask.js 可以确认Colormask 并没有改动 Inputmask 的掩码算法而是通过 4 个钩子介入渲染流程Colormask.prototype.writeBufferHook function (caretPos) { renderColorMask.call(this, this.el, caretPos, false); }; Colormask.prototype.caretHook function (caretPos) { renderColorMask.call(this, this.el, caretPos, false); }; Colormask.prototype.applyMaskHook function () { initializeColorMask.call(this, this.el); }; Colormask.prototype.keyEventHook function (e) { if (e.key keys.ArrowRight || e.key keys.ArrowLeft) { // 方向键移动光标后异步重渲染保持光标与掩码同步 setTimeout(function () { renderColorMask.call(inputmask, inputmask.el, caretPos); }, 0); } };其中applyMaskHook在掩码应用时调用initializeColorMask负责 DOM 结构改造——创建一个div.im-colormask容器把原始input移入其中再创建一个模板div紧跟在输入框后面并把输入框设为绝对定位input.style.left template.offsetLeft px。同时为容器绑定mouseleave/mouseenter/click事件点击时会通过findCaretPos根据点击的clientX坐标、借助克隆字体样式测量文本宽度反推光标应落到的位置见 lib/extensions/colormask.jswriteBufferHook/caretHook在写入缓冲区或光标变化时调用renderColorMask重绘模板keyEventHook方向键移动时异步重绘确保光标标记位置正确。renderColorMask是渲染核心lib/extensions/colormask.js它遍历maskset.validPositions与getTestTemplate将缓冲区内容拼接为 HTML 模板静态字符段test.static true或该位置尚无输入被包裹进span.im-static输入字符段按原样输出当前光标位置插入mark.im-caret单字符或mark.im-caret-select多字符选区标记同时兼容jitMasking占位符渲染未输入位置输出getPlaceholder与isRTL方向RTL 下模板会 reverse 且静态/光标标签的起止顺序反转。因此你可以推断Colormask 的所有静态样式类im-static、im-caret、im-caret-select、im-colormask均由源码在运行时生成与 lib/extensions/colormask.css 中的选择器一一对应——这正是文档要求先看样式表、再调颜色的原因。六、注意事项与使用建议必须同时引入 CSS 与 JScolormask.css负责把真实输入框文字透明化并定义静态字符颜色缺少样式文件时会出现文字重叠或双色失效定制入口明确掩码颜色改span.im-static的color输入文本颜色改div.im-colormask div的color光标颜色改keyframes blink的border-right-color事件绑定在容器上鼠标进入/离开/点击事件被绑定到div.im-colormask容器而非input本身若你的页面样式重置了该容器的cursor或边框请以 lib/extensions/colormask.css 中的默认值为基准方向键与点击定位点击掩码空白处会按字符宽度测算光标位置因此自定义字体尤其等宽/非等宽字体可能影响点击定位精度建议保持字体、letter-spacing、text-transform等样式稳定构建与产物源码入口为 lib/extensions/colormask.js浏览器全局变量为window.Colormask打包入口为 bundle.colormask.js发布到 npm 的子路径映射见 package.json 的exports字段类型定义见 dist/types/extensions/colormask.d.ts与 Inputmask 的关系Colormask 不改变掩码语法、校验规则与事件体系任何已掌握 Inputmask 配置经验的开发者都可以零成本迁移只需将构造器名称替换并引入对应样式与脚本即可。七、官方文档对照本文所依据的官方文档为 inputmask-pages/src/assets/Colormask.md其在文档站中的渲染组件为 inputmask-pages/src/Components/Colormask/Colormask.js通过MarkDownPage渲染 Markdown 并生成目录 TOCColormask.lazy.js 提供懒加载仓库 inputmask-pages/src/assets/Documentation.md 的 Colormask 章节也给出了与本文一致的模块化引入示例。文中所列代码、样式类名与钩子名称均可在上述源码与产物文件中逐一核实。赞分享前端UI组件【免费下载链接】InputmaskInput Mask plugin项目地址https://gitcode.com/gh_mirrors/in/Inputmask点击查看免费下载相关推荐Inputmask扩展开发指南如何编写自定义输入掩码插件Inputmask扩展开发指南如何编写自定义输入掩码插件 在现代Web开发中表单输入验证是至关重要的环节。Inputmask作为一个功能强大的输入掩码插件前端UI组件Inputmask 的 NuGet 打包与发布指南在 .NET 项目中集成 Inputmask 输入掩码插件Inputmask 的 NuGet 打包与发布指南在 .NET 项目中集成 Inputmask 输入掩码插件 本篇指南以 Inputmask 仓库的 nusp前端UI组件Inputmask JIT掩码终极指南如何实现输入性能300%提升Inputmask JIT掩码终极指南如何实现输入性能300%提升 Inputmask是一款功能强大的输入掩码插件它能够帮助开发者轻松实现各种复杂的输入格式前端UI组件上一篇ViGEmBus三大游戏控制器兼容性难题的终极解决方案下一篇微信网页版免安装终极指南3分钟解决公司电脑限制难题创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/9 2:19:36

动态规划——背包问题

1、完全平方数Q:给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数&#x…

2026/10/9 2:19:36

多层RNN与LSTM深度解析:PyTorch实现、训练优化与踩坑指南

先说结论:RNN的“深度”和CNN的“深度”完全不是一回事。我一开始也是把循环神经网络当CNN用,堆了五六层LSTM上去,结果训练又慢又容易爆,后来才发现深层循环神经网络的实现细节里全是坑。这篇就拿《动手学深度学习》第58节里那套思…

2026/10/9 3:19:38

《操作系统》英文笔记(一): Introduction To OS

笔者这学期在澳科大当交流生,故这学期开始在这里分享澳科大这边课程的笔记,先从《操作系统》课程开始吧。What is an Operating System? Most computers have two modes of operation: kernel mode and user mode. OS runs in kernel mode (also called…

2026/10/9 3:19:38

C++优先队列priority_queue详解:从堆原理到Top-K与Dijkstra应用

优先队列(C)这个话题,我确实想好好写一篇。做了这么多年实际项目和算法实现,我一直觉得 STL 里最被低估的容器之一就是std::priority_queue。很多人对vector、map、sort熟得不能再熟,但一提到“动态取最大值/最小值”的…

2026/10/9 3:19:38

前后端分离架构下,团队协作模式如何转型?接口契约与联调实践

这些年我带过不少 Web 项目团队,发现一件特别有意思的事:很多人以为“前后端分离”只是技术架构的升级,换了框架、拆了工程、改了部署方式就完事了。可真把团队拉进去做一两个迭代之后,你会发现最痛的根本不是技术选型&#xff0c…

2026/10/9 3:19:38

HTTP协议深度解析:从400错误到HTTP/3的实战指南

1. 从一次“打不开网页”的故障说起:HTTP 不是教科书里的抽象概念,而是你每次刷新页面时都在真实运行的协议上周帮某高校实验室调试一套远程图像采集系统,设备端能稳定生成JPEG帧,但Web管理界面始终显示“加载中…”——后端日志里…

2026/10/9 3:19:38

PLC培训机构怎么选?实操课多不等于真动手,避坑看这几点

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

2026/10/9 3:14:38

不用鲁大师!Windows自带工具轻松查看内存条频率与插槽信息

不管你是想给老电脑续命、给刚装好的新机器验货,还是最近总感觉系统卡顿怀疑内存有问题,打开电脑后脑袋里多半都会冒出一串问题:我这条内存到底是多少频率的?现在是跑在双通道上吗?插槽还剩几个?这些信息其…

2026/10/8 10:03:18

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/8 10:03:20

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

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

2026/10/9 0:04:27

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略当数万字的学位论文初稿经历开题、实验、问卷与多轮文献梳理最终成形时,绝大多数研究生都会面临一道全新的形式审查关卡:AIGC 疑似度排查。在高校毕业审核流程中,盲审前的文本检测通…

2026/10/9 0:04:27

食堂节能改造源头工厂,商用厨房设备焕新方案广受好评

商用厨房作为餐饮经营、单位供餐的核心后勤阵地,其设备配置、动线规划与运维体系直接决定后厨作业效率、运营成本与合规性。从基础的灶具、制冷存储设备,到油烟净化、水处理等配套系统,每一个环节的合理性都与食品安全、能耗管控、消防安全挂…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑