我们从 Lydia Dugger 通过电子邮件获得了一个很好的技巧,介绍了更改 WebKit 浏览器对已自动填充的表单字段应用的样式的方法。
我们所说的自动填充是什么
许多浏览器(包括 Chrome 和 Safari)提供了一种设置,允许用户自动填写常见表单字段的详细信息。当您填写要求填写姓名、地址和电子邮件等信息的表单时,您已经看到了这一点。
问题是,用户必须启用此设置,才能使此代码片段生效。如果启用此设置,那么 WebKit 浏览器将为用户自动填充的字段设置样式,如下所示

请注意自动填充的字段是否有黄色背景?这就是我们要谈论的,并且我们将使用此代码片段进行更改。
代码片段
我们可以使用 -webkit-autofill
伪选择器来定位这些字段并根据需要设置其样式。默认样式仅影响背景颜色,但大多数其他属性在此处适用,例如 border
和 font-size
。我们甚至可以使用 -webkit-text-fill-color
更改文本颜色,该颜色包含在下面的代码片段中。
/* Change Autocomplete styles in Chrome*/
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
textarea:-webkit-autofill,
textarea:-webkit-autofill:hover,
textarea:-webkit-autofill:focus,
select:-webkit-autofill,
select:-webkit-autofill:hover,
select:-webkit-autofill:focus {
border: 1px solid green;
-webkit-text-fill-color: green;
-webkit-box-shadow: 0 0 0px 1000px #000 inset;
transition: background-color 5000s ease-in-out 0s;
}
演示
查看 CodePen 上 CSS-Tricks (@css-tricks) 的笔 在 WebKit 中更改自动填充样式。
我怎样才能让自动填充生效?我尝试提交表单,但没有任何反应。
这是一个浏览器设置。它非常古怪。例如,如果您以前在字段中取消了自动填充建议,那么它将不再提供这些建议——至少,目前就是这样。
我现在明白了。在我的 Chrome 设置中,我只需要选中“启用自动填充以单次点击填写网页表单”并在我“管理自动填充设置”中添加一个街道地址。太酷了!
我只能说这太棒了!
此外,CSS 中第 4 行结尾处缺少一个逗号,示例中第 5 行多了一个
input:-webkit-autofill
声明。或者,您实际上不必分别指定
select
、input
、textarea
。您可以这样做
我肯定会在我的项目中使用它!
有没有办法也设置下拉菜单的样式?如果能给它添加一些样式会很酷。我还遇到了一个问题,它与一个模态框重叠了,我想调整下拉部分的 Z 轴索引。
我认为不行,因为菜单是由浏览器处理的。
谢谢!我整天都在为这个问题苦恼。
非常感谢!这个问题困扰了我将近两年了。
通过将 :-webkit-autofill 样式与默认状态匹配,我能够使两种状态看起来完全相同。这对我来说至关重要,因为默认的黄色在我的深色主题网站上看起来很糟糕。
干杯 :)
我需要那种糟糕的黄色(或琥珀色)背景来阅读报纸,因为默认的纯白色背景会灼伤我的视网膜。多年前,OS/2 的原生浏览器提供了易于使用的页面背景选择。这里需要一些提示。
你好!
我也用这种方法解决了这个问题——谢谢。但我仍然在游标方面遇到了问题——实际上,您可以在页面上的演示中看到它——即使您设置了与自动填充不同的样式——在使用它之后,您的游标会变成黑色,而它应该变成绿色,但它是黑色的——http://joxi.ru/Vrwn36QH96NGAX
有人知道如何解决这个问题吗?
嗯,这对我来说不起作用。
有什么想法吗?我在使用 Chrome 61
我在使用 Chrome 63,也不起作用。我对此进行了研究,Mozilla 的开发人员网站上说,这是一个非标准功能,并且“实现之间也可能存在很大的不兼容性,并且行为在将来可能会发生变化”。我想行为在 Chrome 的新版本中发生了变化
是的,Chrome 自创建此代码片段以来已经更新。它仍然可以在 Safari 11 中使用。
好的,这很棒,但是输入字段下方出现的建议列表呢?我们还可以自定义它在 WebKit 中的外观吗?我想自定义它,使其像使用 CSS 框架的项目的一部分一样无缝。
值得一提的是,颜色和背景颜色无法覆盖——因此出现了
-webkit-text-fill-color
和 box-shadow 技巧。我推测,在用户代理默认值中为该选择器指定的任何值(目前还包括背景图像)都无法覆盖。实际上,我找到了使用关键帧覆盖它的解决方案
https://stackoverflow.com/questions/2781549/removing-input-background-colour-for-chrome-autocomplete
@Tiago Coelho: 效果非常好——你真棒!=D
@Tiago Coelho: 谢谢,它可以工作!
Romain Mascia 提出了一个方法
https://codepen.io/romulusmaxia/pen/aKKbPm
我可以看到“transition”可以完美地工作,即使没有“box-shadow”,也可以禁用 Chrome 自动填充样式的黄色背景,但我并不真正理解它是怎么工作的/为什么,有人可以解释一下吗?
有人知道如何通过 HTML 完全禁用自动填充弹出窗口吗?
你的示例如果滚动,会让自动填充字段停留在屏幕上,看起来不太好。Chrome 做的这个自动填充功能简直是**最糟糕**的。我简直不敢相信你无法禁用它。我已经尝试了所有方法,包括在任何聚焦的空白字段中以编程方式添加一个零宽度非打印字符。但然后,Chrome 弹出一个空白窗口(覆盖了我的标签)Chrome 真的需要解决这个问题。真是乱七八糟。
感谢你的帮助。
在 Chrome、FF 和 Midori 中效果很好!我们是否需要关心 - 或者添加一些行 - 用于其他浏览器?
谢谢!不错的代码
为什么要将 spread 设置为 1000px? -webkit-box-shadow: 0 0 0px 1000px #000 inset;
自本文发布以来,WebKit 中的自动填充样式已更改。如果我没记错的话,这是抵消其默认样式的一种方法。
我来到这里是因为我想避免用户选择自动填充选项后字体大小发生跳跃。但是,它似乎没有任何效果,你有没有通过更改 WebKit 样式来实现这一点?
我遇到了类似的问题。将鼠标悬停在演示中的选择上会将其显示为输入中的小文本,然后选择该选项会导致文本变得更大。
有人找到解决方法了吗?
我尝试了动画解决方法,但无法使其正常工作。
我还尝试了来自“wojtekmaj”的建议(见下文),但它也不起作用。
谢谢,这篇文章非常有用!不过我有一个建议:当自动填充样式处于活动状态时,如果自动填充字段的背景颜色很深,手动设置
caret-color=#ffffff
(或任何所需的对比色)非常有用。现在,随着最新的 Chrome 更新,它已经过时了。
我刚尝试以更简洁的方式重写这个结果。顺便说一下,这在我的浏览器中仍然有效。
transition: background-color 0s;
transition-delay: 600s;
我尝试了这个,但是如何更改自动填充的
font-size
?对于 -webkit-autofill,这对我有用
如果你尝试设置背景颜色,此代码不起作用,例如:
background-color: red
有人知道如何做到这一点吗?
需要覆盖 WebKit 的默认
-webkit-box-shadow
属性值,这就是我在自动填充上更改背景颜色的方法:-webkit-box-shadow: 0 0 0px 1000px #000 inset;
将
#000
值更改为另一种颜色,你应该没问题!有人在 chrome+iOS 上遇到这个问题吗?
有趣的是,它在 Safari+iOS 上运行良好。
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
textarea:-webkit-autofill,
textarea:-webkit-autofill:hover,
textarea:-webkit-autofill:focus,
select:-webkit-autofill,
select:-webkit-autofill:hover,
select:-webkit-autofill:focus {
border: 1px solid transparent !important;
-webkit-box-shadow: 0 0 0px 1000px transparent inset !important;
transition: background-color 5000s ease-in-out 0s !important;
}
这里透明不起作用。我确信你试图使输入字段透明,这意味着它不会向输入字段添加任何颜色。