You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Django开发:IOS Safari输入框光标错位故障求助

iOS Safari中Django项目输入框光标错位问题修复方案

我之前也踩过iOS Safari输入框光标错位的坑,结合你提供的HTML和CSS代码,大概率是以下几个原因导致的,给你几个实用的修复思路:

1. 自定义样式与Safari默认样式冲突

看你的CSS里针对.form-field有多处媒体查询下的padding、border和字体大小设置,而且Safari对input的盒模型、内边距和字体的组合处理经常有兼容性问题,尤其是用rem作为字体单位时。

修复方案

  • 给目标输入框强制重置Safari的默认样式,替换掉现有的-webkit-appearance: textfield;-webkit-appearance: none;,避免浏览器自带的样式干扰;
  • 合并重复的媒体查询规则,避免padding等属性被多次覆盖导致计算混乱;
  • 确保line-height和字体大小匹配,让光标位置和文本对齐。

示例代码:

#id_phone {
  -webkit-appearance: none; /* 重置Safari默认样式 */
  line-height: 1.2; /* 与字体大小匹配,确保光标垂直居中 */
  padding: 5px 12px; /* 统一内边距,避免多个媒体查询重复设置 */
  border: 3px solid #dfecf5;
  border-radius: 10px;
  font-size: 2.083333333333333rem;
  box-sizing: border-box; /* 确保padding和border不会扩大元素宽度 */
}

2. 手机号掩码指令的兼容性问题

你使用了bad-gentlemen-mask这个Angular指令实现手机号格式化,部分掩码插件在iOS Safari中会因为动态修改输入值或DOM结构,导致光标位置偏移。

修复方案

  • 先临时注释掉bad-gentlemen-mask="+7 (***) ***-**-**"这一属性,测试光标是否恢复正常;
  • 如果确认是掩码导致的问题,可以更换为更兼容iOS的掩码插件,或者修改该指令的逻辑,在输入完成后手动调整光标位置,避免动态修改文本时的偏移。

3. scroll-on-focus指令的干扰

mobile==True时添加的scroll-on-focus指令,可能在iOS Safari触发焦点时执行了滚动操作,导致输入框和光标位置不同步。

修复方案

  • 暂时移除scroll-on-focus属性,验证光标是否正常;
  • 如果问题解决,修改该指令的逻辑,添加iOS Safari的判断条件,仅在非Safari浏览器中执行滚动逻辑,或者调整滚动触发的时机,避免影响光标定位。

4. 父元素硬件加速的影响

你的.top-menu_mobile使用了transform: translate3d开启硬件加速,虽然不是输入框本身,但父容器的硬件加速可能导致子元素渲染异常。

修复方案

  • 给输入框添加-webkit-transform: translateZ(0);,强制开启自身的硬件加速,让渲染和光标位置同步;
  • 或者尝试移除父容器的transform: translate3d属性,看是否能解决问题。

调试建议

建议你按顺序逐步禁用上述可能的影响因素,先从样式重置开始,再到指令,一步步定位具体原因,这样能更高效地解决问题。

内容的提问来源于stack exchange,提问作者Alexander Bolzhatov

火山引擎 最新活动