autocapitalize="none"是唯一可靠写法,必须显式设置;"off"、"NONE"等均无效。失效主因是被inputmode/JS/封装组件覆盖,且需配合autocorrect="off"和spellcheck="false"才彻底禁用首字母大写与拼写纠正。

autocapitalize="none" 是唯一可靠写法
想彻底禁用英文输入时的首字母大写,必须显式设置 autocapitalize="none"。写成 autocapitalize="off" 虽然部分旧文档提过,但 iOS Safari 和 Chrome for Android 都只认 "none";大小写敏感,"NONE" 或 "None" 会被当作无效值降级为默认行为(即 "sentences")。
为什么加了 none 还是大写?先查这三处
90% 的“失效”不是属性写错,而是被更高优先级机制覆盖:
-
inputmode="numeric"、inputmode="tel"或type="number"下,autocapitalize完全被忽略——数字键盘没有大小写切换逻辑 - JS 里写了类似
e.target.value = e.target.value.toLowerCase()的 input 监听器,会立刻把键盘刚输的大写字母转小写,且光标位置可能跳变 - 用了 React/Vue 封装组件(如
<van-field>或<el-input>),但没把autocapitalize透传到原生<input>;React 中必须写成autocapitalize="none",不能驼峰写成autoCapitalize
密码、用户名、邮箱本地部分必须配 autocorrect="off"
单设 autocapitalize="none" 不够:iOS 上即使首字母不自动大写,autocorrect 仍可能把 “user” 改成 “User” 或 “Usr”。必须同步关闭拼写纠正:
<input type="text" autocapitalize="none" autocorrect="off" spellcheck="false">
注意:autocorrect="off" 在 iOS 上比 spellcheck="false" 更早生效,且兼容性更好;spellcheck="false" 单独使用在某些 Android WebView 中会被忽略。
立即学习“前端免费学习笔记(深入)”;
别指望 form 上设一次就全局生效
<form autocapitalize="none"> 在 iOS Safari 中**不支持继承**——这是最常被误信的点。每个可编辑元素(<input>、<textarea>、contenteditable="true")都得单独写 autocapitalize="none"。尤其注意:contenteditable 区域在部分 iOS 版本中压根不响应该属性,必须改用原生 <textarea>。



















