直接使用即可原生隐藏输入内容并显示圆点,无需JS或CSS干预;禁用type="text"加遮盖方案,因其存在明文暴露、无障碍失效、键盘不匹配等严重缺陷。

密码输入框用 <input type="password"> 就行
直接把 type 属性设为 "password",浏览器就会自动隐藏输入内容、显示圆点或星号。不需要 JavaScript 或 CSS 额外干预,这是原生支持的语义化写法。
为什么不能用 type="text" 加 CSS 遮盖
有人试图用 type="text" 配合 text-indent、color: transparent 或伪元素遮盖文字,这完全不可靠:
- 复制粘贴时明文暴露
- 开发者工具里 DOM 树中明文可见
- 屏幕阅读器可能误读(尤其未加
aria-label时) - 移动端键盘不会触发密码键盘(iOS/Android 默认显示数字+符号键盘)
autocomplete 和 autocapitalize 必须显式关掉
现代浏览器对密码字段有强干预,但默认行为未必符合预期:
-
autocomplete="off"不一定生效,更可靠的是autocomplete="new-password"(用于注册页)或autocomplete="current-password"(用于登录页) -
autocapitalize="none"防止 iOS 自动大写首字母(否则用户输错大小写还发现不了) - 别漏掉
spellcheck="false",避免下划红线干扰视觉
完整示例:
<input type="password" name="pwd" autocomplete="new-password" autocapitalize="none" spellcheck="false">
立即学习“前端免费学习笔记(深入)”;
服务端校验前,前端也要做基础长度和字符限制
前端限制不是为了替代后端校验,而是减少无效提交和提升体验:
- 用
minlength="8"和maxlength="64"控制合理范围(太短不安全,太长可能被爆破或拖慢哈希) - 如果业务要求含大小写字母+数字+符号,可用
pattern做实时提示(但别用它阻止提交——正则兼容性和用户体验差) - 避免在
placeholder里写“请输入密码”,这会暴露字段用途;用空字符串或模糊提示如“●●●●●●●●”更稳妥
autocomplete 的取值和移动端 autocapitalize 行为——这两项不设对,用户在 iPhone 上输密码就可能反复失败。



















