Chrome 自动填充样式产生的原因
通过查看标签的样式发现,自动填充的 input 标签新增了样式,并且该样式无法被覆盖。
1 2 3 4 5 6
| input:-internal-autofill-selected { appearance: menulist-button; background-image: none !important; background-color: -internal-light-dark(rgb(232, 240, 254), rgba(70, 90, 126, 0.4)) !important; color: fieldtext !important; }
|
解决方案
目前(当前:2023/03/20),解决方式有如下几种:
关闭自动填充功能
因为自动填充功能产生的问题,那么直接关闭即可解决问题。
1
| <input autocomplete="off">
|
适合信息敏感的情况(例如:密码),可以使用这种方法。
使用 CSS 动画解决
通过使用 CSS 动画延迟,使自动填充样式延迟生效,只要时间足够长,页面停留足够短,相当于样式没变化。
1 2 3 4 5 6 7 8 9
| input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:focus, input:-webkit-autofill:active { transition-delay: 360000s; transition: color 360000s ease-out, background-color 360000s ease-out; -webkit-transition-delay: 360000s; -webkit-transition: color 360000s ease-out, background-color 360000s ease-out; }
|
适合用户停留短暂页面,例如登录页面。
使用内阴影覆盖
通过阴影将背景覆盖掉。
1 2 3
| input { box-shadow: 0 0 0px 1000px white inset; }
|
适合非透明背景的情况。
利用 background-clip 背景裁剪
利用 background-clip 属性,将背景裁剪掉。
背景颜色默认渲染到 padding-box 中,可以设置 background-clip: centent-box
渲染到 content-box 中。
1 2 3 4 5
| input { height: 0; padding: .75em 0; background-clip: content-box; }
|
Chrome 自动填充样式除了背景以外,还有字体相关样式,可以通过 ::first-line
伪类解决。
1 2 3
| input:first-line { color: #555; }
|
除此以外,当鼠标悬浮在自动输入列表元素时,还会产生字体样式的变化,可以通过 CSS 动画解决。
1 2 3 4 5 6 7 8 9
| input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:focus, input:-webkit-autofill:active { transition-delay: 360000s; transition: color 360000s ease-out; -webkit-transition-delay: 360000s; -webkit-transition: color 360000s ease-out; }
|
这种方法相对而言比较通用,可以比较好地应用各种场景。
参考资料
__END__