如何改變表單元素的外觀(for Webkit and IE10)

表單元素在網頁設計中使用的非常頻繁,如文本輸入框、單選框、復選框、選擇列表、上傳文件,它們在瀏覽器中的展現有自帶的外觀,為了在視覺上取得更好的產品體驗,保持客戶端的統一,通常產品經理會提出需要改變它的外觀,使用自定義的,對于產品本身來說這樣的要求是加分項,開發在力所能及的范圍內應該大力支持。做H5移動開發,并沒有原生APP開發那樣,大部分內容都可以自定義,移動端H5頁面受手機系統的影響,不同的瀏覽廠商對表單元素的渲染效果差異很大。

下圖為 iphone4s 、魅族 android4.4 、諾基亞 winphone8 三部測試機下4種不同表單元素的默認外觀展現。

從上圖我們可以看出:
表單輸入框有默認的內陰影
單選框和復選框有默認的邊框和選中狀態
選擇列表有默認下拉箭頭

那么,如何改變表單元素的外觀呢,由于瀏覽器廠商不同,對 webkit 和 IE10 的處理方式也不同~

一、使用 appearance 改變 webkit 瀏覽器的默認外觀

webkit 內核瀏覽器具備私有屬性" -webkit-appearance "可以改變元素的外觀,該屬性非常強大,適合大部分標簽,這對于 webkit 的頁面優化帶來極大的幫助。

禁用表單input、select元素的默認外觀

input,select{-webkit-appearance:none; appearance:none; }

更多 -webkit-appearance 的介紹,這里推薦這篇文章《使用CSS3的appearance屬性改變元素的外觀》,對它有詳細的講解。

二、使用偽元素改變 IE10 表單元素默認外觀

上個月,為了適配微信 winphone 5.0 版本的 IE10 瀏覽器,我做了一些對 IE10 兼容的測試,并寫了《迎接微信winphone 5.0 版本的IE10樣式兼容》一文,之前處理 IE10 表單元素的默認外觀是采用透明度為 opacity:0 的寫法來重置表單的外觀,這個辦法使用起來有點復雜,對表單內容的輸入,需要做額外的處理。近期瀏覽IE開發人員指南的官網,了解到 IE10 對表單元素的默認外觀也新增了偽元素來處理,也算是向前看齊,可能是因為 winphone 用戶少,大家目前只做好 webkit 做兼容,對 winphone 兼容缺少了關注,今天分享下 3 個常用的偽類元素。

禁用 select 默認下拉箭頭


::-ms-expand 適用于表單選擇控件下拉箭頭的修改,有多個屬性值,設置它隱藏 (display:none) 并使用背景圖片來修飾可得到我們想要的效果。

select::-ms-expand {display: none;}

禁用 radio 和 checkbox 默認樣式



::-ms-check 適用于表單復選框或單選按鈕默認圖標的修改,同樣有多個屬性值,設置它隱藏 (display:none) 并使用背景圖片來修飾可得到我們想要的效果。

input[type=radio]::-ms-check,
input[type=checkbox]::-ms-check{
display: none;
}

禁用PC端表單輸入框默認清除按鈕
當表單文本輸入框輸入內容后會顯示文本清除按鈕,::-ms-clear 適用于該清除按鈕的修改,同樣設置使它隱藏 (display:none) 并使用背景圖片來修飾可得到我們想要的效果。


input[type=text]::-ms-clear,
input[type=tel]::-ms-clear,
input[type=number]::-ms-clear{
display: none;
}

關于 IE10 偽元素的介紹,大家可以關注IE10官網偽元素 (Pseudo-elements),講得非常詳細~
實例代碼
通過以上的3項優化后,告別了矮齪窮,適當錦上添花,得到炫酷的視覺效果~


代碼:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<title>自定義表單元素的外觀</title>

<style type="text/css" media="all">
{padding:0;margin:0;}
input,select,textarea,button{outline:none;}
.form{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;}
.form input::-webkit-input-placeholder,.form textarea::-webkit-input-placeholder{color:#AAAAAA;}
.form input:focus::-webkit-input-placeholder,.form textarea:focus::-webkit-input-placeholder{color:#EEEEEE;}
.form fieldset{border:none;}
.form legend{display:none;}
.form-line{padding-bottom:10px;}
.form-line .info{padding-left:10px;font-size:12px;color:#999999;margin-top:6px;}
.form-line .label{display:block;padding-left:10px;font-size:12px;color:#666666;margin-bottom:6px;}
.form-line .element{padding-bottom:6px;}
.form-btn{margin-top:30px;}
.ico-clear{display:inline-block;width:22px;height:22px;padding:11px;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAYAAAAehFoBAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAM7SURBVFhH1ZnNbhoxEMfpuXmL9l2a3qrk0DR9nYi8QA99hJJTlWM4cOFDAg4E8VFAXBBwCpWKUFELwp3/xouWrT/GaycRK1nZsGPPz7Mz47E3l/O4Wq3W60ql8q5Wq+Wr1ep3aj26X9DfP2jyvodnUuYUfTxUuncVQrwigFMCKFD7TU04NvQpYAyM5U7g0IMUnZGiliOgdkIYi97QBwcEnmi5XH5Dg9+FAk2Pg7Ghg0djkaLBP9KAv54KNh5X6rjIDC199eqpQRXWvnL2bQn75blhE/q+OkHT67l+QdgoSMHAcg8Svnhp2Fg/ZZBPRmiZDbQBRklftNtt17zrI780Zg9T6hqPx+RWj9dkMvGB2PcdDAZitVqJ6XRqytV3SitjUdC5QrPZFLvdbg8cAno0Gh2MOZvNTEY4O4CWWUG7gtXrdbHZbA6AfaDTsBgLltYZjN78/UHWkAWM8TV3Oh2x3W69oVWweHtwD1Owo/bYW5n++cbJDL7QOlj8btMPxggY5R4Jr20d4udZoX1gpe51VJpy3CE9GVfoALDRGwBrjm7yXOsm5bjQoWCl7jyAb7MAo48NOjAsrHwL4H5WYBP0YrH4L3cjG3ACzMDTz1H0PfgAm6CTOTAALAqiBwBjs2hNKzYZnXsAOgQs9IM1GDAGRE2guuAetglznsfA3i4BZaoAS8KHKJgil/ANOg5swCqv75XWdLDwWbhHiNoj5SpRWsu0cJhg49Rly9Mcv03J5BF0OMVxDgruohASOqrYXIsfjmXTBggE/Vj84OKWl1lgY/gA0IVkPcxyC64b6FzME/r9Hlhuke5NvjwcDoPUBjrobrfL3yKBnGC1m1BMBHuuULWBCrrX65kC/1y5czZt85PLbojaANDxxnY+n5tgi9rDFBxakDWXOtcANCxt2zBy02Sj0RA4nDHIL8mIb42nP9T5eI6q4pkc1WEgoI/uuDUBfRwH2kknJ/e4fK5PBqTnM+tM2CaESKVgLHKjP4Nc0ZoNbJCq5wRyjoO5DEDK1CU/oakXhSyAqj4yIFF73FBbZ4BHnxuUik7fMUJMoFQqnch6GpsAHMj0qf2k3/6i4Z7aDzxDqoQs+vjo/gcu5hKkyDDBRAAAAABJRU5ErkJggg==") center center no-repeat;background-size:22px 22px;text-indent:-9999px;}
.form .ico-clear{position:absolute;top:1px;right:0;z-index:1;display:none;}
.form .show-clear .ico-clear{display:inline-block;}
.input{border:1px solid #BBBBBB;border-radius:4px;position:relative;}
.input .text{-webkit-appearance:none;appearance:none;border:none;font-size:18px;padding:12px 10px;display:block;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;background-color: #FFFFFF;border-radius:4px;}
.select{border:1px solid #BBBBBB;border-radius:4px;position:relative;}
.select .text{-webkit-appearance:none;appearance:none;border:none;font-size:18px;padding:12px 10px;display:block;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;background-color: #FFFFFF;color:#333333;border-radius:4px;}
.arrow-down{display:inline-block;cursor:pointer;width:13px;height:9px;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAASCAYAAABFGc6jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAC7SURBVEhLtdPdEUAwDABgK9jJClawgj61r1awghXsZAUS19JfkRR3jtMmXzVp03iX1no0xkz+N8k75JkhT5eNtcgOE/AWYxbBHFuCRYgY8xCX48YKCBvLICGG22S3yw3ET3IbIX55ygGLWM96EX/1WLM3iFKqvRpDgrERp3EwMcLBqhEGVmqcHQsf1IQ68bDqgejGBLu6i0oejzOxhZs/mP8Sq0OcSGDfIAT2LVLA/kG81u/xHFUV/s/gAw305R72o0XTAAAAAElFTkSuQmCC") 0 0 no-repeat;background-size:13px 9px;text-indent:-9999px;}
.select .arrow-down{position:absolute;right:12px;top:20px;}
.checkbox,.radio{width:10px;height:10px;background-color:#CCCCCC;margin-right:4px;-webkit-appearance:none;}
.radio{-webkit-border-radius: 5px;border-radius: 5px;}
.checkbox{vertical-align:-4px;}
.checkbox:checked,.radio:checked{background-color:#333333;}

/* 禁用select默認下拉箭頭 */
select::-ms-expand{display:none;}
/* 禁用PC端表單輸入框默認清除按鈕 */
input[type=text]::-ms-clear,input[type=tel]::-ms-clear,input[type=number]::-ms-clear{display:none}
/* 禁用radio和checkbox默認樣式 */
input[type=radio]::-ms-check,input[type=checkbox]::-ms-check{display: none;}
</style>
</head>
<body style="padding: 10px;">
<form class="form">
<fieldset>
<legend>表單標題</legend>

<div class="form-line">
    <label for="" class="label">文本輸入框</label>
    <div class="input show-clear"><!-- 表單輸入內容后,添加class:show-clear 可顯示清除按鈕 -->
        <input type="tel" class="text" placeholder="信用卡卡號">
        <a href="javascript:" class="ico-clear">清除</a>
    </div>
</div>

<div class="form-line">
    <label for="radio1" class="label"><input type="radio" class="radio" id="radio1" name="radio">單選按鈕1</label>
    <label for="radio2" class="label"><input type="radio" class="radio" id="radio2" name="radio">單選按鈕2</label>
</div>

<div class="form-line">
    <label for="checkbox1" class="label"><input type="checkbox" class="checkbox" id="checkbox1" name="radio">復選按鈕1</label>
    <label for="checkbox2" class="label"><input type="checkbox" class="checkbox" id="checkbox2" name="radio">復選按鈕2</label>
</div>

<div class="form-line">
    <label for="" class="label">下拉列表框</label>
    <div class="select">
        <select name="" id="" class="text">
            <option value="">所在省份</option>
            <option value="">廣東</option>
            <option value="">北京</option>
        </select>
        <a href="javascript:" class="arrow-down"></a>
    </div>
</div>

</fieldset>
<form/>

</body>
</html>

測試demo請進入

結束語

由于電腦沒有安裝 IE11,不知道微軟在 IE11 的版本有無支持 apprearance ,如果有,那么標準也算是出來啦,對全世界都好,如果say no,只能說:呵呵,你妹的!!!
如今手機瀏覽器廠商前綴無非 -webkit 和 -ms ,webkit 很明顯占據了的優勢,雖然這樣,但我們也不能忽視了微軟的 winphone ,畢竟有一定的用戶就不可忽視它的價值,只希望它們早日達成一致,向標準靠齊~

轉摘自:http://www.cnblogs.com/PeunZhang/p/3522603.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容