input:-webkit-autofill 导致chrome的输入框背景颜色变成黄色

文章部分来自:https://www.cnblogs.com/garfieldzhong/p/4759690.html

填写form表单时发现chrome的一个好坑啊!

当你之前有填写过表单,获取焦点时,input会有一个记录之前填写过的文本的下拉列表式的东东,就像这样:(抱歉丑了点,隐私问题打上了马赛克)

按理说,这没什么问题,很多时候为了方便,也需要它记录输入,但是,同时也发现,文本框变成了屎黄色了!而且当你选择其中的文本时它依然还是屎黄色!

真是卧槽了…… 这完全不是我想要的效果啊,谁愿意面对着一坨坨屎黄的东西啊!为什么会这样?为什么呢?我也不知道,其他浏览器不会呀~ 一向以良好形象示人的chrome怎么就变成这样了呢?

好吧,只能到百度里谷歌一下了!还真不是只有我一个人遇到这样的问题的!

原来是因为:

看看,不仅input, textarea、select也一样有,而且只有是“-webkit”啊!看到这个你一定会想到设置background-color来覆盖它,于是开始巧代码……折腾几秒钟之后,信心满满的刷新,你会发现…这并没有什么卵用啊啊啊~

先不管它他为什么要这样,大公司的要这么干,你不服能去揍他吗?!来看看解决办法!

方法一:

因为这玩意出现只有在之前有输入记录的情况下才会出现的,所以只有禁用input的记录就能ok!比如:<input type=”text” autocomplete=”off”>,如此当你点击了input时它就不会有那一列表了!整个世界也就干净了!当然,如果你能忍受那屎黄色,也可以把它给“on”了,或者不设置,因为autocomplet默认就是’on’的!

不过,很多时候可能需求不允许你去掉简单方便的记录!那可咋整?

于是,

以下部分来自:

作者:Katherine_Lisa

来源:CSDN

原文:https://blog.csdn.net/qq_36671474/article/details/77980502

情景一:input文本框是纯色背景的

可以对input:-webkit-autofill使用足够大的纯色内阴影来覆盖input输入框的黄色背景,如:

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0px 1000px white inset;
    border: 1px solid #CCC!important;
}

如果你有使用圆角等属性,或者发现输入框的长度高度不太对,可以对其进行调整,除了chrome默认定义的background-color,
background-image,color不能用!important
提升其优先级以外,其他的属性均可使用!important提升其优先级,如:

input:-webkit-autofill {
   -webkit-box-shadow: 0 0 0px 1000px white inset;
   border: 1px solid #CCC!important;
   height: 27px!important;
   line-height: 27px!important;
   border-radius: 0 4px 4px 0;
}

情景二:input文本框是使用图片背景的

方法一:

因为这个样式的出现只有在之前有输入记录的情况下才会出现的,所以只有禁用input的记录就能ok!比如:<input type="text"  autocomplete="off">,这样当你点击了input时它就不会有那一列表了!

autocomplete属性默认值为on,也就是设置为on的情况下,input才会有黄色的背景色哦!

方法二(js):

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

拓展(innerHTML与outerHTML):一张图一目了然!!!(这是在百度上找的一张图,觉得非常形象)!

outerHTML可以用来更改或获取元素内所有的html和文本内容,包含引用该方法元素自身的标签,比如:console.log($('#testdiv').outerHTML),打印出来的结果就是:<div id='testdiv'><p>Text in DIV</p></div>innerHTML可以用来获取元素内的html和文本内容;innerText只获取元素内的纯文本内容;

注意:outerHTML、innerHTML不是W3C的标准,使用时要注意浏览器兼容性!最后,希望大家多些建议,多些指点!!