表單元素在網(wǎng)頁(yè)設(shè)計(jì)中使用的非常頻繁矾缓,如文本輸入框怀酷、單選框、復(fù)選框嗜闻、選擇列表蜕依、上傳文件,它們?cè)跒g覽器中的展現(xiàn)有自帶的外觀琉雳,為了在視覺上取得更好的產(chǎn)品體驗(yàn)样眠,保持客戶端的統(tǒng)一,通常產(chǎn)品經(jīng)理會(huì)提出需要改變它的外觀翠肘,使用自定義的檐束,對(duì)于產(chǎn)品本身來說這樣的要求是加分項(xiàng),開發(fā)在力所能及的范圍內(nèi)應(yīng)該大力支持束倍。做H5移動(dòng)開發(fā)被丧,并沒有原生APP開發(fā)那樣盟戏,大部分內(nèi)容都可以自定義,移動(dòng)端H5頁(yè)面受手機(jī)系統(tǒng)的影響甥桂,不同的瀏覽廠商對(duì)表單元素的渲染效果差異很大柿究。
下圖為 iphone4s 、魅族 android4.4 黄选、諾基亞 winphone8 三部測(cè)試機(jī)下4種不同表單元素的默認(rèn)外觀展現(xiàn)蝇摸。

從上圖我們可以看出:
表單輸入框有默認(rèn)的內(nèi)陰影
單選框和復(fù)選框有默認(rèn)的邊框和選中狀態(tài)
選擇列表有默認(rèn)下拉箭頭
那么,如何改變表單元素的外觀呢办陷,由于瀏覽器廠商不同貌夕,對(duì) webkit 和 IE10 的處理方式也不同~
一、使用 appearance 改變 webkit 瀏覽器的默認(rèn)外觀
webkit 內(nèi)核瀏覽器具備私有屬性" -webkit-appearance "可以改變?cè)氐耐庥^民镜,該屬性非常強(qiáng)大蜂嗽,適合大部分標(biāo)簽,這對(duì)于 webkit 的頁(yè)面優(yōu)化帶來極大的幫助殃恒。
禁用表單input植旧、select元素的默認(rèn)外觀
input,select{-webkit-appearance:none; appearance:none; }
更多 -webkit-appearance 的介紹,這里推薦這篇文章《使用CSS3的appearance屬性改變?cè)氐耐庥^》离唐,對(duì)它有詳細(xì)的講解病附。
二、使用偽元素改變 IE10 表單元素默認(rèn)外觀
上個(gè)月亥鬓,為了適配微信 winphone 5.0 版本的 IE10 瀏覽器完沪,我做了一些對(duì) IE10 兼容的測(cè)試,并寫了《迎接微信winphone 5.0 版本的IE10樣式兼容》一文嵌戈,之前處理 IE10 表單元素的默認(rèn)外觀是采用透明度為 opacity:0 的寫法來重置表單的外觀覆积,這個(gè)辦法使用起來有點(diǎn)復(fù)雜,對(duì)表單內(nèi)容的輸入熟呛,需要做額外的處理宽档。近期瀏覽IE開發(fā)人員指南的官網(wǎng),了解到 IE10 對(duì)表單元素的默認(rèn)外觀也新增了偽元素來處理庵朝,也算是向前看齊吗冤,可能是因?yàn)?winphone 用戶少,大家目前只做好 webkit 做兼容九府,對(duì) winphone 兼容缺少了關(guān)注椎瘟,今天分享下 3 個(gè)常用的偽類元素。
禁用 select 默認(rèn)下拉箭頭

::-ms-expand 適用于表單選擇控件下拉箭頭的修改侄旬,有多個(gè)屬性值肺蔚,設(shè)置它隱藏 (display:none) 并使用背景圖片來修飾可得到我們想要的效果。
select::-ms-expand {display: none;}
禁用 radio 和 checkbox 默認(rèn)樣式

::-ms-check 適用于表單復(fù)選框或單選按鈕默認(rèn)圖標(biāo)的修改儡羔,同樣有多個(gè)屬性值宣羊,設(shè)置它隱藏 (display:none) 并使用背景圖片來修飾可得到我們想要的效果声旺。
input[type=radio]::-ms-check,
input[type=checkbox]::-ms-check{
display: none;
}
禁用PC端表單輸入框默認(rèn)清除按鈕
當(dāng)表單文本輸入框輸入內(nèi)容后會(huì)顯示文本清除按鈕,::-ms-clear 適用于該清除按鈕的修改段只,同樣設(shè)置使它隱藏 (display:none) 并使用背景圖片來修飾可得到我們想要的效果。

input[type=text]::-ms-clear,
input[type=tel]::-ms-clear,
input[type=number]::-ms-clear{
display: none;
}
關(guān)于 IE10 偽元素的介紹鉴扫,大家可以關(guān)注IE10官網(wǎng)偽元素 (Pseudo-elements)赞枕,講得非常詳細(xì)~
實(shí)例代碼
通過以上的3項(xiàng)優(yōu)化后,告別了矮齪窮坪创,適當(dāng)錦上添花炕婶,得到炫酷的視覺效果~

代碼:
<!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默認(rèn)下拉箭頭 */
select::-ms-expand{display:none;}
/* 禁用PC端表單輸入框默認(rèn)清除按鈕 */
input[type=text]::-ms-clear,input[type=tel]::-ms-clear,input[type=number]::-ms-clear{display:none}
/* 禁用radio和checkbox默認(rèn)樣式 */
input[type=radio]::-ms-check,input[type=checkbox]::-ms-check{display: none;}
</style>
</head>
<body style="padding: 10px;">
<form class="form">
<fieldset>
<legend>表單標(biāo)題</legend>
<div class="form-line">
<label for="" class="label">文本輸入框</label>
<div class="input show-clear"><!-- 表單輸入內(nèi)容后,添加class:show-clear 可顯示清除按鈕 -->
<input type="tel" class="text" placeholder="信用卡卡號(hào)">
<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">復(fù)選按鈕1</label>
<label for="checkbox2" class="label"><input type="checkbox" class="checkbox" id="checkbox2" name="radio">復(fù)選按鈕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>
測(cè)試demo請(qǐng)進(jìn)入
結(jié)束語(yǔ)
由于電腦沒有安裝 IE11莱预,不知道微軟在 IE11 的版本有無支持 apprearance 柠掂,如果有,那么標(biāo)準(zhǔn)也算是出來啦依沮,對(duì)全世界都好涯贞,如果say no,只能說:呵呵危喉,你妹的K斡妗!辜限!
如今手機(jī)瀏覽器廠商前綴無非 -webkit 和 -ms 皇拣,webkit 很明顯占據(jù)了的優(yōu)勢(shì),雖然這樣薄嫡,但我們也不能忽視了微軟的 winphone 氧急,畢竟有一定的用戶就不可忽視它的價(jià)值,只希望它們?cè)缛者_(dá)成一致毫深,向標(biāo)準(zhǔn)靠齊~