1. 程式人生 > >當表單自動填充_去除chrome瀏覽器自動新增的預設樣式

當表單自動填充_去除chrome瀏覽器自動新增的預設樣式

  事實是,並不能一勞永逸去除谷歌在自動填充表單時的預設樣式。對於瀏覽器工具自動新增的樣式,這裡採取算是一種比較怪異的方法。除非你關閉它的表單自動填充功能,那姑且這篇文章可以不看了。
  
  今天在寫賬號登入頁面時,給input表單添加了背景圖片和圖示,看起來小清新了不少。可是當用chrome登入自動填充,淡黃色輸入框代替了背景樣式,看起來有些怪異。

在自動填充之後,chrome自動填充的樣式如下圖(空白部分背景沒有加上):
              這裡寫圖片描述
              
  按照以往使用各種外掛經驗::>_<:: ,嗯,應該可以用!important提升優先順序之後覆蓋掉瀏覽器的預設樣式吧。事實上,這種方式在使用外掛的時候想要改變某些屬性雖然屢試不爽,但是在這裡是不行的。顯然瀏覽器預設新增的樣式優先順序更高。

  這裡介紹這種方法不算太麻煩,對於有圖示的輸入框也同樣適用。侷限性是輸入框背景必須是純色的。

這裡是更改完之後的樣式:

              這裡寫圖片描述

來一個簡單點的程式碼:

這是原本的表單及樣式,自動填充樣式很怪異。
html

<form>
    <input type="text" name="telno" placeholder="請輸入手機號" />
    <input type="password" name="pwd" placeholder="請輸入密碼" />
</form>

css

form input{
    display
: block
; width: 355px; height: 57px; margin-bottom: 30px; border: 0; padding-left: 60px; outline:none
} form{ input:first { background: url('@{imgBaseUrl}/input-account.png') no-repeat; } input:last { background: url('@{imgBaseUrl}/input-pwd.png') no-repeat
; }

解決方法:
  方法還是那種,覆蓋掉原本的樣式。但是谷歌的預設樣式三個屬性是不能更改的,所以只能從別的地方下手。

input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill {                   background-color: #FFFFFF;  
  background-image: none;  
  color: #333; 
} 

  ^_^。首先在input外套一個div塊,將原來input的樣式更改到外層div上,所以背景和圖片也都加在了外層元素中。這樣背景和圖示有了,可是剩下的input單獨顯示一片蛋黃,好像更醜了。
html

<form id="merchant-login">
    <div class = "clear_auto" id = "clear_auto">
        <input type="text" name="account" placeholder="請輸入手機號" />
    </div>
    <div class = "clear_auto">
        <input type="password" name="pwd" placeholder="請輸入密碼" />
    </div>
</form>

  所以再對內層的input標籤進行樣式的更改。邊框設為0,高度和行高設為與父元素也就是外層div都相等(這裡我加了margin並且高度比原來小2px是因為原本的背景包含邊框各1px)。接下來是針對谷歌自動填充的樣式了,屬性前加私有字首僅對谷歌生效:
  -webkit-box-shadow: 0 0 0px 1000px #d3d3d3 inset; 盒子陰影屬性,設定盒子內陰影顏色,用取色器取原來背景色,1000px直接覆蓋掉原來的背景,網上有很多工具,可以自己搜一下。
  -webkit-text-fill-color: #000; 設定文字顏色為黑,這個不多說。
  
  多說一句:first和:last偽元素選擇器,因為加了div之後,兩個input框不屬於同一個父元素,因此兩個分開要在父元素下寫。

less程式碼:

form .clear_auto {
    display: block;
    width: 267px;
    height: 45px;
    margin-bottom: 30px;
    border: 0;
    padding-left: 60px;
    outline: none;
    input {
        border: 0;
        height: 43px;
        line-height: 43px;
        outline: none;
        background-color: transparent;
        margin-top: 1px;
    }   
}
form {
    .clear_auto: nth-child(1){
        background: url('@{imgBaseUrl}/input-account.png') no-repeat;
        input: -webkit-autofill {  
            -webkit-box-shadow: 0 0 0px 1000px #d3d3d3 inset;
            -webkit-text-fill-color: #000;
        }
    }
    .clear_auto:nth-child(2) {
        background: url('@{imgBaseUrl}/input-pwd.png') no-repeat;
        input: -webkit-autofill {  
            -webkit-box-shadow: 0 0 0px 1000px #DBD7D4 inset;
            -webkit-text-fill-color: #000;
        }
    }
}

所以,對於背景色為純色的表單,這種解決方案,親測,完美。

更多精彩內容請訪問:前端部落格