自定义input[type="file"]的样式

input[type="file"]的样式在各个浏览器中的表现不尽相同:

1. chrome:



2. firefox:



3. opera:



4. ie:



5. edge:



另外,当我们规定 input[type="file"] 的高度,并把它的行高设置成与其高度相等后,chrome中难看的样式出现了:



“未选择任何文件”这一行并没有竖直居中。

似乎在 firefox 中好看一些,嗯,我比较喜欢用 firefox。但是这些浏览器中的表现不一致,我们必须做兼容处理。

思路:

1. 自定义与其中一个浏览器表现类似的样式,将其放在下层;

2. 将浏览器本身的表现出来的样式“隐藏掉”, opacity:  0; 置于上层,这样我们点击的才是 input[type="file"] 响应的事件;

3. 选择文件或改变文件后,改变显示 file 的值。

代码:


1

2

3

4

5

6

7

8

9

10

11

html:

<form action="" class="activityForm">

  <div class="file">

    <label for="file">文件:</label>

    <div class="userdefined-file">

      <input type="text" name="userdefinedFile" id="userdefinedFile" value="未选择任何文件">

      <button type="button">上传</button>

    </div>

    <input type="file" name="file" id="file">        

  </div>

</form>


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

css:

.file {

  positionrelative;

  height40px;

  line-height40px;

}

.file label {

  display: inline-block;

}

.userdefined-file {

  positionabsolute;

  top0;

  left60px;

  z-index2;

  width300px;

  height40px;

  line-height40px;

  font-size0;  /*应对子元素为 inline-block 引起的外边距*/

}

.userdefined-file input[type="text"] {

  display: inline-block;

  vertical-alignmiddle;

  padding-right14px;

  padding-left14px;

  width220px;

  box-sizing: border-box;

  border1px solid #ccc;

  height40px;

  line-height40px;

  font-size14px;

  overflowhidden;

  text-overflow: ellipsis;

  white-spacenowrap;

}

.userdefined-file button {

  display: inline-block;

  vertical-alignmiddle;

  width80px;

  text-aligncenter;

  height40px;

  line-height40px;

  font-size14px;

  background-color#f54;

  bordernone;

  color#fff;

  cursorpointer;

}

.file input[type="file"] {

  positionabsolute;

  top0;

  left60px;

  z-index3;

  opacity: 0;

  width300px;

  height40px;

  line-height40px;

  cursorpointer;

}


1

2

3

4

js:

document.getElementById("file").onchange = function() {

    document.getElementById("userdefinedFile").value = document.getElementById("file").value;

}

这样处理后,就在各个浏览器中表现一致了:

1. 未选择任何文件时,在 chrome 中:



2. 在选择文件后,在 firefox 中:

  

时间: 2024-10-25 02:18:55

自定义input[type="file"]的样式的相关文章

html中,文件上传时使用的&lt;input type=&quot;file&quot;&gt;的样式自定义

Web页面中,在需要上传文件时基本都会用到<input type="file">元素,它的默认样式: chrome下: IE下: 不管是上面哪种,样式都比较简单,和很多网页的风格都不太协调. 根据用户的需求,设计风格,改变其显示样式的场合就比较多了. 如果,要像下面一样做一个bootstrap风格的上传按钮该如何实现. 搭建上传按钮所需的基本元素 <span class=""> <span>上传</span> <

&lt;input type=&quot;file&quot;&gt;的样式自定义

<!DOCTYPE html> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <link rel="stylesheet" href="bootstrap/bootstrap.css"> <l

自定义input[type=&quot;radio&quot;]的样式

对于表单,input[type="radio"] 的样式总是不那么友好,在不同的浏览器中表现不一. 为了最大程度的显示出它们的差别,并且为了好看,首先定义了一些样式: html: <form action=""> <div class="sex"> <div class="female"> <label for="female">女</label>

html input[type=file] css样式美化【转藏】

相信做前端的都知道了,input[type=file]和其他输入标签不一样,它的事件必须是在触发自身元素上,而不能是其他元素.所以不能简单的把input隐藏,放个button上去. <a href="javascript:;" class="a-upload"> <input type="file" name="" id="">点击这里上传文件 </a> /*a uplo

自定义input[type=&quot;checkbox&quot;]的样式

对复选框自定义样式,我们以前一直用的脚本来实现,不过现在可以使用新的伪类 :checkbox 来实现. 如果直接对复选框设置样式,那么这个伪类并不实用,因为没有多少样式能够对复选框起作用.不过,倒是可以基于复选框的勾选状态借助组合选择符来给其他元素设置样式. 很多时候,无论是为了表单元素统一,还是为了用户体验良好,我们都会选择 label 元素和 input[type="checkbox"] 一起使用.当<label>元素与复选框关联之后,也可以起到触发开关的作用. 思路:

自定义上传按钮 &lt;input type=&quot;file&quot; name = &quot;file&quot;/&gt; (将file隐藏在button下)

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>定义input type="file" 的样式</title><style type="text/css">body{ font-size:

[预]input type=file 样式自定义

input type=file 样式自定义:http://www.haorooms.com/post/css_input_uploadmh input type=file 上传类型控制:http://www.haorooms.com/post/input_file_leixing

&lt;input type=&quot;file&quot;&gt;如何实现自定义样式

利用样式覆盖来实现效果:先看下原本和改变后的样式 1 <!doctype html> 2 <html> 3 <head> 4 <title>file自定义上传样式</title> 5 <style> 6 * 7 { 8 margin: 0; 9 padding: 0; 10 } 11 /*蓝色按钮,绝对定位*/ 12 .btn 13 { 14 position: absolute; 15 width: 100px; 16 height

jquery-fileupload IE8IE9无法上传图片的BUG及如何给input[type=file]自定义样式

先说IE9,点击上传后,浏览器会提示下载内容. 原因:IE9及以下上传文件的响应头的contentType 如果是json,浏览器会以为是文件下载. 处理方法:找后台GG,把contentType改为text/html. 再修改done方法,获得地址 done: function(e, data){ var result = data.result[0].body ? data.result[0].body.innerHTML : data.result; result = JSON.parse