Chromeオートコンプリートの入力背景色を削除しますか?


653

現在作業中のフォームで、Chromeはメールとパスワードのフィールドに自動入力しています。これは問題ありませんが、Chromeは背景色を淡黄色に変更します。

私が取り組んでいるデザインは、暗い背景に明るいテキストを使用しているので、これはフォームの外観を本当に混乱させます-真っ黄色なボックスとほとんど見えない白いテキストがあります。フィールドがフォーカスされると、フィールドは通常に戻ります。

これらのフィールドの色を変更するChromeを停止することはできますか?


2
ここでは、より広い情報を持っている:stackoverflow.com/questions/2338102/...
DASM

同様の投稿への私の回答をご覧ください:stackoverflow.com/a/13691346/336235
Ernests Karlsons

回答:


1170

これは正常に機能します。入力ボックスのスタイルと入力ボックス内のテキストスタイルを変更できます。

ここでは、例えば、任意の色を使用することができwhite#DDDrgba(102, 163, 177, 0.45)

しかし、transparentここでは機能しません。

/* Change the white to any color ;) */
input:-webkit-autofill,
input:-webkit-autofill:hover, 
input:-webkit-autofill:focus, 
input:-webkit-autofill:active  {
    -webkit-box-shadow: 0 0 0 30px white inset !important;
}

さらに、これを使用してテキストの色を変更できます。

/*Change text in autofill textbox*/
input:-webkit-autofill {
    -webkit-text-fill-color: yellow !important;
}

アドバイス:数百または数千の過度のぼかし半径を使用しないでください。これには利点がなく、弱いモバイルデバイスにプロセッサの負荷がかかる可能性があります。(実際の外の影にも当てはまります)。高さが20ピクセルの通常の入力ボックスの場合、30ピクセルの「ぼかし半径」で完全にカバーされます。


1
クロームでは今、ユーザーエージェントスタイルシートのショー:-internal-autofill-previewed:-internal-autofill-selectedpseudoclasses代わりに-webkit-autofill...不思議しかし、-webkit-autofillまだ動作します。個人的には必要ありませんでした!important
アンディ

ホバー/フォーカス/アクティブの疑似セレクターは必要ありませんでした
antoine129

318

ボックスシャドウを追加するこれまでの解決策は、無地の背景が必要なユーザーに適しています。トランジションを追加する他の解決策は機能しますが、期間/遅延を設定する必要があることは、ある時点で再び表示される可能性があることを意味します。

私の解決策は、代わりにキーフレームを使用することです。これにより、常に選択した色が表示されます。

@-webkit-keyframes autofill {
    0%,100% {
        color: #666;
        background: transparent;
    }
}

input:-webkit-autofill {
    -webkit-animation-delay: 1s; /* Safari support - any positive time runs instantly */
    -webkit-animation-name: autofill;
    -webkit-animation-fill-mode: both;
}

コードペンの例:https ://codepen.io/-Steve-/pen/dwgxPB


魅力のように機能します。
Lalnuntluanga Chhakchhuak

1
これは間違いなく動作します!(Chrome 79)
Lashae

3
私はこれが受け入れられた答えよりも優れていると思います...ボックスシャドウ方式は賢く機能しますが、ユーザーが自動入力する値を選択しているとき、デフォルトの色が入力フィールドで一瞬点滅し、問題が発生する可能性があります。入力の背景が暗い場合。このソリューションにはそのような問題はありません。乾杯!
skwidbreth

パーフェクト!それでも、思ったよりうまくいきました。
sdlins

2
これは、特に設定した場合、Vuetify 2で機能しますcolor: inherit
Marc

275

より良い解決策があります。

背景を以下のような別の色に設定しても、透明な入力フィールドが必要だったため、問題は解決しませんでした

-webkit-box-shadow: 0 0 0px 1000px white inset;

だから私は他のことをいくつか試し、これを思いつきました:

input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active {
    transition: background-color 5000s ease-in-out 0s;
}

7
すごい、私も透明な背景が必要です。PS:-webkit-text-fill-color: yellow !important;forテキストの色を忘れないでください。
gfpacheco

これにより、入力がで非表示/表示されている場合でも、自動入力の背景が表示されdisplayます。フィドル-それをチェックしてください
マーティン

27
途方もなくtransition-duration高い値を設定する代わりに、代わりに設定することをお勧めしtransition-delayます。そうすれば、色が変化する可能性をさらに減らすことができます。
シャギー

transition入力は、ブラウザによって記録されたデフォルトのエントリを自動入力されていない場合、ハックは、そうでない場合は、黄色の背景はまだあるだろう、のみ動作します。
guari

1
素晴らしい解決法....しかし、なぜこれが機能するのですか?そして、なぜ設定が機能しbackground-colorないのですか?Chromeはこれを修正する必要があります!!
TetraDev 2016

60

これが私の解決策です。遷移と遷移遅延を使用したので、入力フィールドの背景を透明にすることができます。

input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active {
    -webkit-transition: "color 9999s ease-out, background-color 9999s ease-out";
    -webkit-transition-delay: 9999s;
}

6
入力フィールドの背景として画像を設定しましたが、このソリューションでは黄色の影が取り除かれますが、背景画像はまだ非表示です
Matteo Tassinari

これまでのところ最高のソリューションは、既存box-shadowの検証でうまく機能します
Yoann

chrome "color 9999s ease-out, background-color 9999s ease-out";は有効な表現ではありません。私は、コードを使用し、-webkit-transition: background-color 9999s ease-out;そして-webkit-text-fill-color: #fff !important;
naanace

1
動作しましたが、二重引用符はありませんでした;)
Jon

@Yoannは、既存のbox-shadow検証でどのように機能しましたか?私の場合、このcssルールが原因で、カスタムの赤いボックスの影(入力エラーを示す)が遅れ、実際には問題ないのに、最新の入力が無効であるとユーザーに思わせる。
Paul Razvan Berg、

50

このカラーリング動作はWebKitからのものであるため、これは設計どおりです。これにより、ユーザーはデータが事前に入力されていることを理解できます。バグ1334

オートコンプリートをオフにするには、次のようにします(または特定のフォームコントロールをオンにします:

<form autocomplete="off">
...
</form

または、次のようにして自動入力の色を変更できます。

input:-webkit-autofill {
    color: #2a2a2a !important;
}

これが再び機能するように追跡されているバグがありますhttp : //code.google.com/p/chromium/issues/detail?id=46543

これはWebKitの動作です。


22
おかげで、そのwebkit CSSルールが機能していません。ユーザーエージェントスタイルシートは、(a)に設定され!important、(b)より具体的にIDでターゲット設定されている場合でも、常に背景色を無効にします。Chromeは常にそれを上書きするようです。オートコンプリートの削除は機能するように見えますが、それは本当に私がやりたいことではありません。
DisgruntledGoat

1
一部の人々は同じ問題を抱えていますが、バグの投稿を確認しましたか?code.google.com/p/chromium/issues/detail?id=1334
Mohamed Mansour

6
Chromeは、CSSがその黄色を上書きしようとする試みをブロックします。設定autocomplete="off"は確かにアクセシビリティの問題を引き起こします。とにかくこの回答が正しいとマークされているのはなぜですか?
ジョアン・

2
これは良い解決策ですが、Reactを使用している場合、オートコンプリートが不明なDOMプロパティであると文句を言うでしょう。したがって、それは実際にはオートコンプリートです(キャメルケースに注意)。
Tim Scollick、2015年

2
オートコンプリートをオフにすることは解決策ではなくハックです
Paullo

30

当面の可能な回避策は、シャドウ内に「強い」を設定することです。

input:-webkit-autofill {
    -webkit-box-shadow:0 0 0 50px white inset; /* Change the color to your own background color */
    -webkit-text-fill-color: #333;
}

input:-webkit-autofill:focus {
    -webkit-box-shadow: /*your box-shadow*/,0 0 0 50px white inset;
    -webkit-text-fill-color: #333;
}  

2
これが受け入れられた答えはでつながるとして、実際に働いているソリューションは、我々は、唯一のいくつかの回黄色の背景をスキップしたくないです。
davidkonrad

22

自動入力スタイルを非表示にするには、これを試してください

input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:active,
input:-webkit-autofill:focus {
    background-color: #FFFFFF !important;
    color: #555 !important;
    -webkit-box-shadow: 0 0 0 1000px white inset !important;
    -webkit-text-fill-color: #555555 !important;
    }

好奇心が強いので、background-colorは効果がありません。-webkit-box-shadowは、Chromeの黄色の背景をオーバーライドする賢いビットです
Geuis

19

上記の答えはすべて機能しましたが、欠点がありました。以下のコードは、上記の2つの回答を組み合わせたもので、点滅することなく完璧に機能します。

input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active {
    transition: background-color 5000s ease-in-out 0s;
    -webkit-box-shadow: 0 0 0px 1000px #fff inset;
}

入力フィールドの背景として画像を設定しましたが、このソリューションでは黄色の影が取り除かれますが、背景画像は非表示のままです
Matteo Tassinari

これは、クロム83で私のための唯一の作業は、ほとんどが1はクローム82まで」働いていた投票で
sdlins

19

SASS

input:-webkit-autofill

  &,
  &:hover,
  &:focus,
  &:active
    transition-delay: 9999s
    transition-property: background-color, color

1
受け入れられた回答が淡い黄色に点滅するので、これは実際に私のために働きました。
CleoR 2015

最高のソリューションimho
Jan Paepke

15

検索の2時間後、Googleはまだ黄色をオーバーライドしているようですが、私はその修正を求めています。そのとおり。ホバー、フォーカスなどにも使用できます。あなたがしなければならないすべてはそれに重要な追加です!

 input:-webkit-autofill,
 input:-webkit-autofill:hover,
 input:-webkit-autofill:focus,
 input:-webkit-autofill:active {
 -webkit-box-shadow: 0 0 0px 1000px white inset !important;
  }

これにより、入力フィールドから黄色が完全に削除されます


11

1時間の遅延を追加すると、入力要素のcssの変更が一時停止します。
これは、遷移アニメーションや内側の影を追加するよりも優れています。

input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill{
  transition-delay: 3600s;
}

10

それに加えて:

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

追加することもできます

input:-webkit-autofill:focus{
-webkit-box-shadow: 0 0 0px 1000px white inset, 0 0 8px rgba(82, 168, 236, 0.6);
}

それ以外の場合は、入力をクリックすると黄色が戻ります。フォーカスについて、ブートストラップを使用している場合、2番目の部分はボーダーを強調表示するためのものです0 0 8px rgba(82、168、236、0.6);

ブートストラップ入力のように見えるように。


10

入力フィールドを透明にする必要があるため、ボックスシャドウを使用できないという問題がありました。これは少しハックですが、純粋なCSSです。トランジションを非常に長い時間に設定します。

input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active {
transition: background-color 50000s ease-in-out 0s, color 5000s ease-in-out 0s;
}

現在の最新のChrome 50.xxでは、ITは完全に正常に動作しています。どうもありがとう!
vivekkupadhyay

2
途方もなくtransition-duration高い値を設定する代わりに、代わりに設定することをお勧めしtransition-delayます。そうすれば、色が変化する可能性をさらに減らすことができます。
シャギー

@Shaggyありがとう、遅延に切り替えました。ずっといい。
アレックス

9

これを試してください:上記の@ Nathan-whiteと同じですが、微調整を加えます。

/* For removing autocomplete highlight color in chrome (note: use this at bottom of your css file). */

input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active {
    transition: all 5000s ease-in-out 0s;
    transition-property: background-color, color;
}

これは、すべての回答を試した後の最良の回答です。
gfcodix

8

オートコンプリート機能をそのまま維持したい場合は、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);
    });
});}

これは、Kicksendのメールチェックをブロックしますが、最善の解決策のようです。これを回避する方法に関するアイデアはありますか?
ジョアン

google chromeのパスワード自動補完が機能しなくなるため、これは良い解決策ではありません。つまり、最初に名前を入力し、Google Chromeがパスワードを自動入力します。ただし、上記のJavaScriptが実行されると、名前が削除されて再度設定され、自動入力されたパスワードが失われます
vanval

6

JQueryなしでJavaScriptを使用する別のソリューションを開発しました。これが便利であるか、私の解決策を再投稿する場合は、私の名前を含めるようにお願いします。楽しい。– Daniel Fairweather

var documentForms = document.forms;

for(i = 0; i < documentForms.length; i++){
    for(j = 0; j < documentForms[i].elements.length; j++){
        var input = documentForms[i].elements[j];

        if(input.type == "text" || input.type == "password" || input.type == null){
            var text = input.value;
            input.focus();
            var event = document.createEvent('TextEvent');
            event.initTextEvent('textInput', true, true, window, 'a');
            input.dispatchEvent(event);
            input.value = text;
            input.blur();
        }
    }
}

このコードは、追加のテキストが入力されるとすぐにGoogle ChromeがWebkitスタイルを削除するという事実に基づいています。入力フィールドの値を変更するだけでは不十分で、Chromeではイベントが必要です。各入力フィールド(テキスト、パスワード)に注目することで、キーボードイベント(文字「a」)を送信し、テキスト値を以前の状態(自動入力されたテキスト)に設定できます。このコードはすべてのブラウザーで実行され、Webページ内のすべての入力フィールドをチェックし、必要に応じて調整することに注意してください。


まあ、それはほとんどの部分で機能しました..残念ながら私のパスワードをクリアします。最初にパスワードを保存し、forループの後でパスワードをリセットするために取得しようとしていますが、Chromeにはいくつか問題があるようです。mmmm
ダスティンシルク

6

CSSフィルターを使用する純粋なCSSソリューションがあります。

filter: grayscale(100%) brightness(110%);

グレースケールフィルターは黄色を灰色に置き換え、明るさは灰色を取り除きます。

コーデックを見る


これは私にはうまくいきませんか?
Ikechukwu Eze

5

これは、入力、テキストエリア、および通常、ホバー、フォーカス、アクティブ状態の選択で機能します。

input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active,
textarea:-webkit-autofill,
textarea:-webkit-autofill:hover,
textarea:-webkit-autofill:focus,
textarea:-webkit-autofill:active,
select:-webkit-autofill,
select:-webkit-autofill:hover,
select:-webkit-autofill:focus,
select:-webkit-autofill:active,
{
    -webkit-box-shadow: 0 0 0px 1000px white inset !important;
}

これは、SASS / SCSSで作業している人のための上記のソリューションのSCSSバージョンです。

input:-webkit-autofill,
textarea:-webkit-autofill,
select:-webkit-autofill
{
    &, &:hover, &:focus, &:active
    {
        -webkit-box-shadow: 0 0 0px 1000px white inset !important;
    }
}

いいですね、SASSコードに感謝します!
ベルヌーイIT

4

コンパスを使用している人のために:

@each $prefix in -webkit, -moz {
    @include with-prefix($prefix) {
        @each $element in input, textarea, select {
            #{$element}:#{$prefix}-autofill {
                @include single-box-shadow(0, 0, 0, 1000px, $white, inset);
            }
        }
    }
}

3

あきらめる!

オートコンプリートで入力の色を変更する方法はないので、webkitブラウザーのjQueryですべての入力を無効にすることにします。このような:

if (/webkit/.test(navigator.userAgent.toLowerCase())) {
    $('[autocomplete="on"]').each(function() {
        $(this).attr('autocomplete', 'off');
    });
}

3

自動入力をGoogle Chromeから防ぎたいが、少し「マチェーテ」したい場合の解決策があります。GoogleChromeがこれらの入力フィールドに追加するクラスを削除し、表示する必要がない場合は値を「」に設定しますロード後にデータを保存します。

$(document).ready(function () {
    setTimeout(function () {
            var data = $("input:-webkit-autofill");
            data.each(function (i,obj) {
            $(obj).removeClass("input:-webkit-autofill");
                    obj.value = "";
            });
    },1);           
});

3

Daniel Fairweatherの解決策(Chromeオートコンプリートの入力背景色を削除しますか?)(私は彼の解決策に賛成したいのですが、それでも15人の担当者が必要です)は本当にうまくいきます。最も支持されている解決策には本当に大きな違いがあります:背景画像を保持できます!しかし、少し変更しました(Chromeチェックのみ)

そして、あなたは覚えておく必要があります、それは目に見えるフィールドでのみ機能します

したがって、フォームに$ .show()を使用している場合は、show()イベントの後にこのコードを実行する必要があります。

私の完全な解決策(ログインフォームの表示/非表示ボタンがあります):

 if (!self.isLoginVisible()) {
        var container = $("#loginpage");
        container.stop();
        self.isLoginVisible(true);
        if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) {

            var documentForms = document.forms;
            for (i = 0; i < documentForms.length; i++) {
                for (j = 0; j < documentForms[i].elements.length; j++) {
                    var input = documentForms[i].elements[j];

                    if (input.type == "text" || input.type == "password" || input.type == null) {
                        var text = input.value;
                        input.focus();
                        var event = document.createEvent('TextEvent');
                        event.initTextEvent('textInput', true, true, window, 'a');
                        input.dispatchEvent(event);
                        input.value = text;
                        input.blur();
                    }
                }
            }
        }

    } else {
        self.hideLogon();
    }

申し訳ありませんが、コメントでお願いします。

必要に応じて、使用したサイトへのリンクを張ることができます。


3

そしてこれは私のために働きました(テストされたChrome 76)

input:-internal-autofill-selected {
    background-color: transparent;
}

3

上記のソリューションのほとんどすべてを試しました。何もうまくいきません。最後にこのソリューションで動作しました。誰かがこれを助けてくれることを願っています。

/* 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;
}

これは(もう)機能せず、CSS Tricks BTWからコピーされました
Bernoulli IT

1
これでうまくいきました。
AzizStark

2

ベンジャミン、ありがとう!

を使用してフィールドを取得できないため、Mootoolsソリューションはもう少しトリッキーです $('input:-webkit-autofill')。したがって、私が使用したのは次のとおりです。

if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) {

  window.addEvent('load', function() {
    setTimeout(clearWebkitBg, 20);
    var elems = getElems();
    for (var i = 0; i < elems.length; i++) {
      $(elems[i]).addEvent('blur', clearWebkitBg);
    }
  });
}
function clearWebkitBg () {
  var elems = getElems();
  for (var i = 0; i < elems.length; i++) {
    var oldInput = $(elems[i]);
    var newInput = new Element('input', {
      'name': oldInput.get('name'),
      'id': oldInput.get('id'),
      'type': oldInput.get('type'),
      'class': oldInput.get('class'),
      'value': oldInput.get('value')
    });
    var container = oldInput.getParent();
    oldInput.destroy();
    container.adopt(newInput);
  }
}
function getElems() {
  return ['pass', 'login']; // ids
}

2

解決策のどれも私にとってはうまくいきませんでした。入力の背景がページの背景の上に半透明の背景がオーバーレイされているため、インセットシャドウは私にとってはうまくいきません。

そこで、「Chromeは特定のページで自動入力する内容をどのように決定するのですか?」と自問しました。

「入力ID、入力名を探しますか?フォームID?フォームアクション?」

ユーザー名とパスワードの入力を試してみたところ、自動入力する必要のあるフィールドをChromeが見つけられない原因は2つしかありませんでした。

1)パスワード入力をテキスト入力の前に置きます。2)それらに同じ名前とIDを付けます...または名前とIDをまったく付けません。

ページが読み込まれた後、JavaScriptを使用すると、ページ上の入力の順序を動的に変更したり、動的に名前とIDを指定したりできます...

そして、Chromeは何がヒットしたかを認識していません...オートコンプリートが壊れています!

クレイジーなハックだと思います。しかし、それは私のために働いています。

Chrome 34.0.1847.116、OSX 10.7.5


2

残念ながら、厳密には上記の解決策のどれも私にとって2016年には機能しませんでした(質問から2年後)

だからここに私が使用する積極的な解決策があります:

function remake(e){
    var val = e.value;
    var id = e.id;
    e.outerHTML = e.outerHTML;
    document.getElementById(id).value = val;
    return true;
}

<input id=MustHaveAnId type=text name=email autocomplete=on onblur="remake(this)">

基本的には、値の保存中にタグを削除し、再作成してから値を元に戻します。


有料namroutiによるソリューションは、Chrome 51.0.2704.106 / OSX 10.11.5では正常に機能します。
2016

2

私はこれを使います。私のために働きます。フィールドの黄色の背景を削除します。

input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active,
input:-webkit-autofill:valid,
select:-webkit-autofill,
select:-webkit-autofill:hover,
select:-webkit-autofill:focus
{
    -webkit-transition-delay: 99999s;
    -webkit-text-fill-color:#D7D8CE;
}

1

前述のように、私にとっては、インセット-webkit-box-shadowが最適です。

/* Code witch overwrites input background-color */
input:-webkit-autofill {
     -webkit-box-shadow: 0 0 0px 1000px #fbfbfb inset;
}

また、テキストの色を変更するコードスニペット:

input:-webkit-autofill:first-line {
     color: #797979;
}

1

これは私のために働きました:

padding: 5px;
background-clip: content-box;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.