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

pgky5nke  于 2022-12-15  发布在  其他
关注(0)|答案(7)|浏览(97)

我有一个登录表单,有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;
}

有什么方法可以避免这种情况吗?表单是使用 AJAX 提交的,所以如果对用户名字段应用了这种样式,那么会有点难看,但对密码字段则没有。
我注意到只有当field被chrome sugggestions列表中的一个元素填充时才会发生这种情况,如果field被一个不在列表中的值填充,样式就不会被应用。
问候Jaime

nfs0ujit

nfs0ujit1#

为了摆脱不希望的行为,这个技巧“只是工作”(tm):

input:-webkit-autofill,
  input:-webkit-autofill:focus {
    transition: background-color 600000s 0s, color 600000s 0s;
  }
f1tvaqid

f1tvaqid2#

答案并不直观,它更像是一个小把戏,但看起来它是唯一有效的方法:

input:-webkit-autofill {
  -webkit-box-shadow: 0 0 0px 1000px yellow inset;
}

这将根据你的输入设置一个yellow背景。它基本上是一个非常不透明和压倒性的内部阴影。他们在发送link@ravb79时使用了相同的技巧。

zbq4xfa0

zbq4xfa03#

如果你可以接受浅色主题的默认-internal-autofill-selected样式,只是想让它在深色主题中看起来更漂亮,那么你可能只需要:

input {
  color-scheme: dark;
}
vmjh9lq9

vmjh9lq94#

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

box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0), inset 0 0 0 100px rgba(255, 255, 255,1);
jmo0nnb3

jmo0nnb35#

你可以添加你自己的CSS,这样更新后的状态就可以匹配你的常规输入状态。在声明中添加一个额外的类和!important属性应该可以覆盖它。
因此:

input.my-input {
    background-color: rgb(255, 255, 255) !important;
    background-image: none !important;
    color: rgb(0, 0, 0) !important;
}

input.my-input:-internal-autofill-selected {
    background-color: rgb(255, 255, 255) !important;
    background-image: none !important;
    color: rgb(0, 0, 0) !important;
}

我还发现了这个btw:https://css-tricks.com/snippets/css/change-autocomplete-styles-webkit-browsers/

wgeznvg7

wgeznvg76#

我试过覆盖样式,但是由于某种原因,它根本不起作用。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);

我正在使用 Bootstrap ,我想保持背景图像形式的验证图标。
只有上帝知道为什么webkit的创建者认为他们绝对必须设置背景图像为无,但如果他们想要战争,他们可以有它。

vdzxcuhz

vdzxcuhz7#

我稍微调整了@kostiantyn-ko的答案,使其仅适用于无效输入。
分类:

input {
  &:is(:invalid, [aria-invalid=true]) {
    // your error styles
    background-color: var(--color-background-critical-subdued);
    border: 1px solid var(--color-border-critical-subdued);

    // hack needed to get rid of autofill styles only on invalid forms
    &:is(:-webkit-autofill, :-webkit-autofill:focus) {
      transition: background-color 600000s 0s, color 600000s 0s;
    }
  }
}

CSS:

/* your error styles */
input:is(:invalid, [aria-invalid=true]) {
  background-color: var(--color-background-critical-subdued);
  border: 1px solid var(--color-border-critical-subdued);
}

/* hack needed to get rid of autofill styles only on invalid forms */
input:is(:invalid, [aria-invalid=true]):is(:-webkit-autofill, :-webkit-autofill:focus) {
  transition: background-color 600000s 0s, color 600000s 0s;
}

相关问题