文章目錄
將不同瀏覽器的上傳元件(input type=‘file’)樣式統一
最近在公司舊系統上做了一個 Excel 上傳用來新增資料的功能,公司 QA 測試時發現不同瀏覽器有不一樣的顯示。聽到這樣的描述,大家一定也馬上聯想到是瀏覽器預設樣式所造成的,解法就是載入Reset css
,搞定?!立馬找個 CDN 加到專案確認一下,果然我的上傳元件統一樣式了,但網站其他東西卻大跑版@@”
馬上理解到系統上原本就沒用 Reset css
,連 Reset css
都沒有,果然也沒有 bootstrap
,只能手刻,立馬來回味一下全手工 html 與 css 的傳統風格吧
原本樣式不同
線上範例:jsbin
<div class="x-form-item"> <label class="inputlabel">Choose a file:</label> <div class="x-form-element"> <input id="file" name="file" class="x-form-text x-form-field inputtext {required:true}" size="40" type="file"> <button id="submitForm" style="vertical-align:middle;">Submit</button> </div> </div>
IE 11
Chrome
firefox
修改後樣式
客製不是好解法,但我想以後要遇到這樣問題的機會應該也不多,個人覺得應該複用經過公開驗證的元件比自己刻來得好
- 在畫面上放個透明的
<input type="file"/>
再來用textbox
跟button
來統一畫面 線上範例:jsbin
<style> .filediv{ width:500px; height:25px; position:relative;} #filetxt{position:absolute;right:100px;height:19px!important;width:173px} #filebtn{ position:absolute; left:155px;width:70px;height:25px; } #file{ width:245px; position:absolute; left:155px; top:0px; opacity:0; outline: none;height: 25px;} #submitForm{position:absolute;right:40px;width:60px;height:25px;} </style> <div class="x-form-item filediv"> <label class="inputlabel fileContainer">Choose a file:</label> <button id="filebtn" >SELECT</button> <input id="filetxt" type="text" value=" please choose a file" /> <input id='file' type="file" name="file" onfocus="this.blur()" class="x-form-text x-form-field inputtext {required:true}" size="40"/> <button id="submitForm" style="vertical-align:middle;">Submit</button> </div> <script type="javascript/text"> $('#file').change(function(){ $('#filetxt').val($('#file').val()); }); </script>
IE 11
Chrome
firefox
參考資料
文章作者 Yowko Tsai
上次更新 2021-11-03
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。