autocapitalize="none"是关闭自动大写的正确写法,但需配合autocorrect="off"、spellcheck="false"及inputmode="text"等属性才能在密码等敏感字段中可靠生效,且数字类inputmode会使其失效。

autocapitalize="none" 是关闭自动大写的正确写法
不是 off,也不是 false 或空字符串——标准且兼容性最好的值是 none。iOS Safari 和 Chrome for Android 都明确识别它,语义也比 off 更清晰。写成 autocapitalize="off" 虽然部分旧版 iOS 也认,但 W3C 文档和现代浏览器实现都倾向 none。
为什么加了 autocapitalize="none" 还是大写
90% 的“没生效”不是属性写错,而是被更高优先级行为覆盖:
-
inputmode="numeric"、inputmode="tel"或type="number"下,该属性完全失效——数字键盘没有大小写切换能力 - JS 里写了
e.target.value = e.target.value.toLowerCase(),键盘刚输的大写立刻被转小写,光标还乱跳 - 用了封装组件(如 Vant 的
<van-field></van-field>),但没透传属性::input-props="{ autocapitalize: 'none' }"才有效 - 设在
<form></form>上想“继承”,但 iOS Safari 不支持继承,必须每个<input>单独写
密码、邮箱等字段要配齐三件套
单靠 autocapitalize="none" 不够稳妥,尤其对密码、验证码、用户名这类敏感字段:
- 必须同步加
autocorrect="off":否则拼写纠正可能把 “pass” 改成 “Pass” - 加上
spellcheck="false":去掉红色波浪线,避免干扰用户判断 - 对密码输入框,再补
inputmode="text":防止某些安卓 WebView 错误触发数字键盘
完整写法示例:<input type="password" autocapitalize="none" autocorrect="off" spellcheck="false" inputmode="text">
Android 和 iOS 行为差异很实际
别假设“写了就一致”:
- iOS Safari 对
characters支持稳定,words能识别英文单词边界;Android Chrome(90+)只可靠识别sentences和none,其余值常被降级为sentences - 中文句号「。」在 Android 多数 WebView 中不触发
sentences的句首大写逻辑,仅识别英文. ? ! - 桌面端浏览器基本忽略该属性,测试务必用真机或 iOS Simulator + Chrome DevTools 的 Device Mode
真正影响数据的只有输入时的键盘行为,粘贴进来的文本不会被转换——需要强制大写时,服务端或 JS 校验不能省。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











