如何避免应用“-internal-autofill-selected”样式?

jst*_*rdo 3 css google-chrome

我有一个包含 2 个字段、用户名和密码的登录表单。用户名字段由 chrome 自动完成。当我提交表单时(当它有效时),这种样式神秘地应用:

input:-internal-autofill-selected {s ñ
    background-color: rgb(232, 240, 254) !important;
    background-image: none !important;
    color: -internal-light-dark-color(black, white) !important;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法避免这种情况?表单是使用 Ajax 提交的,所以如果用户名字段应用样式会有点难看,但密码字段不是。

我注意到只有当字段被 chrome 建议列表中的元素填充时才会发生这种情况。如果字段填充的值不在列表中,则不会应用该样式。

问候海梅

Kos*_*nko 125

为了摆脱不良行为,这个技巧“有效”(tm):

  input:-webkit-autofill,
  input:-webkit-autofill:focus {
    transition: background-color 0s 600000s, color 0s 600000s !important;
  }
Run Code Online (Sandbox Code Playgroud)

编辑:正如 @Spock 在评论中提到的,您可能希望增加此样式的特异性,以防存在来自另一个库的竞争设置。因此,添加!important到上面的代码片段以确保它按原样适用于更广泛的受众。

  • 有人可以在博客上谈论...为什么yyyiiieee吗?注意事项?有一天 Chrome 更新会消除这一点吗?为什么你们都高兴地复制/粘贴然后走开?啦啦啦帮助我们。 (7认同)
  • 不适用于新版本的 Chrome (7认同)
  • 但我想知道,为什么将背景颜色和颜色设置为“未设置”不起作用? (3认同)
  • @RonGilchrist,我们一直掌握在 Blink(Chrome 背后的渲染引擎)开发人员手中,这次也不例外。上述解决方案将 Blink 在我们的特定情况下应用的任何样式推迟 10000 分钟。它可能会在未来停止工作,但我个人认为这种可能性很小。更有可能的是,在某个时候会出现适当的(而非权宜之计)解决方案。 (2认同)
  • @agon024 我无法确认 - 它在我刚刚更新的 Chrome 中仍然有效,没有问题 (2认同)
  • 你可能想交换大数字和零数字: ```transition: background-color 0s 600000s, color 0s 600000s ;``` 这不是动画应该花费 600'000 秒,而是延迟,https:// developer.mozilla.org/en-US/docs/Web/CSS/transition。另外,您可能希望避免动画引擎运行并浪费这些不必要的周期! (2认同)
  • @Ruben我发现我也有旧的样式,我尝试以其他方式设置颜色。尝试删除之前尝试操纵它的所有样式代码。这对我来说很有效。还要添加 !important 到规则中 (2认同)

nun*_*uda 21

如果您对浅色主题的默认样式感到满意-internal-autofill-selected,并且只想让它在深色主题中看起来更好,那么您可能只需要:

input {
  color-scheme: dark;
}
Run Code Online (Sandbox Code Playgroud)


小智 8

答案并不直观。这比其他任何东西都更像是一种技巧,但看起来它是唯一有效的方法:

input:-webkit-autofill {
  -webkit-box-shadow: 0 0 0px 1000px yellow inset;
}
Run Code Online (Sandbox Code Playgroud)

这将为yellow您的输入设置背景样式。它基本上是一个非常不透明和压倒性的内部阴影。他们在@ravb79 发送的链接中使用了相同的技巧。


小智 8

我尝试覆盖样式,但由于某种原因它根本不起作用。Webkit 或至少 chrome 忽略了这种风格。

当我将 !important 添加到 webkit / chrome 样式中时,我完全将其从等式中删除了。在元素检查器中无处可见。

我尝试的所有内容要么被忽略,要么被删除。

苏,我想出了这个可怕的废话。但到目前为止它有效。

// Fix autocomplete shit
function fix_autocomplete_shit() {
    setTimeout(() => {
        if ($(this).is(':-internal-autofill-selected')) {
            var clone = $(this).clone(true, true);
            $(this).after(clone);
            $(this).remove();
        }
    }, 10);
}
$('.form-control').on('input', fix_autocomplete_shit);
Run Code Online (Sandbox Code Playgroud)

我正在使用引导程序,我想以背景图像的形式保留验证图标。

只有上帝知道为什么 webkit 的创建者认为他们绝对必须将背景图像设置为无,但如果他们想要战争,他们可以拥有它。

  • 虽然这不是我最喜欢的答案,但它是我最喜欢的函数名称。有+1 (4认同)

小智 7

您可以添加一个框阴影来删除蓝色背景

box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0), inset 0 0 0 100px rgba(255, 255, 255,1);
Run Code Online (Sandbox Code Playgroud)