autocapitalize 是非标准 HTML 属性,仅提示键盘首字母行为,不强制转换文本;支持 off/none、on、sentence、words、characters 值,效果因 iOS/Android 输入法而异,需 JS 或后端配合确保格式。

autocapitalize 是什么,它真能控制首字母大写?
autocapitalize 是 HTML 表单输入框的布尔型属性(实际是枚举值),但它**不是标准规范属性**,而是 Safari 和部分 Android 浏览器(如 Chrome 71+)支持的非标准扩展。它的作用是向系统键盘提示“期望的大小写行为”,最终是否生效取决于操作系统和输入法——iOS 键盘响应最一致,Android 则差异极大。
注意:autocapitalize 不会强制转换输入内容,只影响键盘首字母状态;真正做大小写转换得靠 JS 或后端处理。
可用值有哪些,各自对应什么场景?
autocapitalize 接受以下字符串值(大小写敏感):
-
off 或 none:禁用自动大写,键盘始终小写(适合密码、URL 等)
-
on:等价于 sentence(Safari 中),但不推荐用,语义模糊
-
sentence:句首大写(输入完句号/问号/感叹号后,下一句首字母自动大写)
-
words:每个单词首字母大写(适合姓名、标题等)
-
characters:全部大写(适合缩写、代码输入等)
off 或 none:禁用自动大写,键盘始终小写(适合密码、URL 等)on:等价于 sentence(Safari 中),但不推荐用,语义模糊sentence:句首大写(输入完句号/问号/感叹号后,下一句首字母自动大写)words:每个单词首字母大写(适合姓名、标题等)characters:全部大写(适合缩写、代码输入等)例如:<input type="text" autocapitalize="words"> 在 iOS 上输入 “john doe” 会变成 “John Doe”,但 Android 大部分输入法(如 Gboard)默认忽略 words,仍按用户习惯出键盘。
为什么设置了 autocapitalize 却没效果?
常见失效原因:
- iOS 微信内置浏览器(WKWebView)有时会忽略该属性,尤其在
textarea 或动态插入的 input 上
- Android 上仅部分输入法支持(如三星键盘支持
sentence,Gboard 对 words 响应弱)
- 未配合
autocomplete 或 inputmode 使用,导致浏览器降级处理
- 设置了
type="password" 或 type="search" 时,部分浏览器强制禁用大小写提示
textarea 或动态插入的 input 上sentence,Gboard 对 words 响应弱)autocomplete 或 inputmode 使用,导致浏览器降级处理type="password" 或 type="search" 时,部分浏览器强制禁用大小写提示实操建议:对关键字段(如姓名),同时加 autocapitalize="words" + spellcheck="false"(避免拼写检查干扰首字母逻辑);但别依赖它做数据校验。
更可靠的替代方案有哪些?
如果业务要求严格首字母大写(比如注册姓名),不能只靠 autocapitalize:
- 用 JS 监听
input 事件,对值做 .replace(/(^|\s)\w/g, c => c.toUpperCase()) 处理(注意中文、标点兼容性)
- 服务端统一格式化(更稳妥,避免客户端差异)
- 搭配
inputmode="text" 明确告知需要文本键盘,提升 autocapitalize 被识别的概率
input 事件,对值做 .replace(/(^|\s)\w/g, c => c.toUpperCase()) 处理(注意中文、标点兼容性)inputmode="text" 明确告知需要文本键盘,提升 autocapitalize 被识别的概率移动端输入体验碎片化严重,autocapitalize 是个“尽力而为”的提示,不是开关。真要控制输出格式,得在 JS 或后端补一手。
立即学习“前端免费学习笔记(深入)”;



















