如何阻止Chrome将网站的输入框泛黄?


151

在表单提交,验证后的其他文本和视觉辅助工具中,我将输入框涂成红色以表示需要注意的交互式区域。

在Chrome(针对Google工具栏用户)上,自动填充功能将我的输入表单重新着色为黄色。这是一个复杂的问题:我希望在表单上允许自动完成,因为这可以加快用户登录的速度。如果/当触发错误时,我将检查是否可以将自动完成属性关闭,但是这很复杂一点编码以编程方式关闭页面上单个受影响输入的自动完成功能。简而言之,这将是一个严重的头痛。

因此,为避免发生该问题,有没有更简单的方法可以阻止Chrome重新为输入框重新着色?

[edit]我尝试了下面的!重要建议,但没有任何效果。我尚未检查Google工具栏,以查看!important属性是否适用于此。

据我所知,除了使用autocomplete属性(确实起作用)之外,没有任何其他方法。


1
这不仅仅是Chrome中的问题。其他浏览器的Google工具栏对输入字段的作用相同。
卡尔顿·詹克

2
我已经为您提供了下面的答案。
约翰·莱德格伦

8
我不明白为什么每个人都在谈论大纲:没有,问题是关于yello背景,而不是大纲。并且将autocomplete属性设置为off不能解决该问题,因为davebug表示他希望autocomplete可以正常工作,而不是黄色背景。

Answers:


74

我知道在Firefox中,您可以使用属性autocomplete =“ off”禁用自动完成功能。如果此方法在Chrome中有效(未经测试),则在遇到错误时可以设置此属性。

这可以用于单个元素

<input type="text" name="name" autocomplete="off">

...以及整个表格

<form autocomplete="off" ...>

“如果发生错误,我将检查是否可以关闭自动完成功能,但是要编程地关闭页面上单个有效输入的自动完成功能,这是很复杂的编码。”
Dave Rutledge,

嘿...是的,谢谢,尽管我想我仍然需要签入Chrome,对吗?
戴夫·鲁特里奇

2
对于使用rails简单形式的人<%= simple_form_for @user, html: { autocomplete: 'off' } do |f| %>
carbonr

抱歉地说这对我没有帮助
-M.Islam

136

将CSS outline属性设置为none。

input[type="text"], input[type="password"], textarea, select { 
    outline: none;
}

如果浏览器也可以添加背景色,则可以通过以下方式解决此问题:

:focus { background-color: #fff; }

9
背景?我不知道Chrome也添加了背景色吗?如果是这样,可以通过以下方式解决此问题:focus { background-color: #fff; }
约翰·莱德格伦

使用CSS杀死轮廓可能会阻止泛黄,但不会阻止实际的自动填充。如果要这样做,使用autocomplete属性(是否为非标准属性)很重要。
汤姆·布德

2
@pestaa正确,这不是正确的答案,但肯定可以解决类似的问题
David Lawson

在处理平板电脑和其他东西时请多加注意,如果没有大纲,默认的Android浏览器将很难使用。足够容易地应用于非移动浏览器:)
Tim Post

一个小改进: input[type=text], input[type=password], input[type=email], textarea, select { outline: none; }
Felipe Lima

56

这正是您要寻找的!

// Just change "red" to any color
input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0px 1000px red inset;
}

这是一个很棒的技巧。谢谢
杰森

我也将重点放在这上:Dinput:-webkit-autofill, input:focus:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px #FFF inset; }
StephanieQ

嗨,@ JStormThaKid,我用过这个……,但是对于正确的输入却没有用……请回答这个……
mithu

感谢您回答他实际提出的问题!我几乎开始失去希望了。
BVernon

最好的答案在这里,我仍然希望谷歌自动完成,所以谢谢
Spangle

14

通过使用一些jQuery,您可以删除Chrome的样式,同时保持自动完成功能不变。我在这里写了一篇简短的文章:http : //www.benjaminmiles.com/2010/11/22/fixing-google-chromes-yellow-autocomplete-styles-with-jquery/

if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) {
$(window).load(function(){
    $('input:-webkit-autofill').each(function(){
        var text = $(this).val();
        var name = $(this).attr('name');
        $(this).after(this.outerHTML).remove();
        $('input[name=' + name + ']').val(text);
    });
});}

感谢您的提示!但是,在发布表单后,单击“后退”按钮,黄色高亮显示又回来了。我已经扩展了您的代码段(请参见我的答案)以解决此问题。
321X 2013年

+1 @Benjamin不错的解决方案,它闪烁一点点黄色,但最终修复了;)
itsme 2013年

7

要删除所有字段的边框,可以使用以下命令:

*:focus { outline:none; }

要删除选择字段的边框,只需将此类应用于所需的输入字段:

.nohighlight:focus { outline:none; }

当然,您也可以根据需要更改边框:

.changeborder:focus { outline:Blue Solid 4px; }

(摘自Bill Beckelman:使用CSS覆盖Chrome在活动字段周围的自动边框


2

是的,这将是一个严重的头痛,我认为这不值得再次回报。也许您可以稍微调整一下UI策略,而不是将方框涂成红色,而可以将边框变成红色,或者在边框旁边放一个红色的小胶带(例如gmails“ Loading”胶带),当盒子在里面时,它就会消失焦点。


1

jQuery简直就是小菜一碟:

if ($.browser.webkit) {
    $("input").attr('autocomplete','off');
}

或者,如果您想更具选择性,请为选择器添加一个类名。



1

在应用@Benjamin他的解决方案后,我发现按下后退按钮仍然会给我黄色突出显示。

以某种方式防止此黄色突出显示的解决方案是应用以下jQuery javascript:

<script type="text/javascript">
    $(function() {
        if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) {
        var intervalId = 0;
            $(window).load(function() {
                intervalId = setInterval(function () { // << somehow  this does the trick!
                    if ($('input:-webkit-autofill').length > 0) {
                        clearInterval(intervalId);
                        $('input:-webkit-autofill').each(function () {
                            var text = $(this).val();
                            var name = $(this).attr('name');
                            $(this).after(this.outerHTML).remove();
                            $('input[name=' + name + ']').val(text);
                        });
                    }
                }, 1);
            });
        }
    });
</script>

希望它能帮助任何人!


1

这可行。最棒的是,您可以使用rgba值(box-shadow inset hack不适用于rgba)。这是@Benjamin的答案的细微调整。我正在使用$(document).ready()而不是$(window).load()。它对我来说似乎更好,因为现在的FOUC更少了。我认为使用$(document).ready()没有缺点。

if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) {
    $(document).ready(function() {
        $('input:-webkit-autofill').each(function(){
            var text = $(this).val();
            var name = $(this).attr('name');
            $(this).after(this.outerHTML).remove();
            $('input[name=' + name + ']').val(text);
        });
    });
};

1

对于今天的版本,如果将其放置在两个登录输入之一中,则也可以使用。还要修复40+版本和较晚的Firefox问题。

<input readonly="readonly" onfocus="this.removeAttribute('readonly');" />

0
input:focus { outline:none; }

这对我来说非常有效,但更有可能使您网站上的内容保持一致,您还想在CSS中将其包含在textareas中:

textarea:focus { outline:none; }

对于大多数人来说,它似乎也很明显,但对于初学者,您也可以将其设置为如下颜色:

input:focus { outline:#HEXCOD SOLID 2px ; }

-1

如果我没记错的话,样式表中关于输入背景色的!important规则会覆盖Google工具栏的自动完成功能-大概Chrome也是如此。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.