如何将Font Awesome图标添加到文件输入字段

时间:2016-04-06 14:12:07

标签: css twitter-bootstrap css3 font-awesome

我有一个文件输入按钮,而不是浏览我想在那里显示Font Awesome上传图标,但无论我尝试什么都没有给我结果。

以下是我尝试的内容:

.select-wrapper {
  background: url(http://s10.postimg.org/4rc0fv8jt/camera.png) no-repeat;
  background-size: cover;
  display: block;
  position: relative;
  width: 33px;
  height: 26px;
}
#image_src {
  width: 26px;
  height: 26px;
  margin-right: 100px;
  opacity: 0;
  filter: alpha(opacity=0); /* IE 5-7 */
}
<div class="container">
  <span class="select-wrapper">
    <input type="file" name="image_src" id="image_src" />
  </span>
</div>

通过上面的代码我只得到一张图片而不是浏览按钮,但我想使用Font Awesome图标。

4 个答案:

答案 0 :(得分:13)

您可以使用input隐藏文件display: none并创建自定义按钮,或者在这种情况下,将触发输入的font-awesome图标。您还可以使用span显示输入值更改时输入的值。

$("i").click(function () {
  $("input[type='file']").trigger('click');
});

$('input[type="file"]').on('change', function() {
  var val = $(this).val();
  $(this).siblings('span').text(val);
})
.element {
  display: inline-flex;
  align-items: center;
}
i.fa-camera {
  margin: 10px;
  cursor: pointer;
  font-size: 30px;
}
i:hover {
  opacity: 0.6;
}
input {
  display: none;
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="element">
  <i class="fa fa-camera"></i><span class="name">No file selected</span>
  <input type="file" name="" id="">
</div>

答案 1 :(得分:2)

由于您使用的是Bootstrap - 如果您愿意使用小插件,那么有一个可以满足您的需求。该插件是Bootstrap Filestyle - http://markusslima.github.io/bootstrap-filestyle/

您只需在input中添加一些属性,然后在Bootstrap的JS之后下载/包含插件的JS。

<input type="file" class="filestyle" name="image_src" id="image_src" data-input="false" data-iconName="fa fa-upload" data-buttonText="Upload File" />

您的font-awesome图标类将会显示在data-iconName中,您的详细信息将会显示在data-buttonText

此外,您可以使用data-input添加或删除文本输入部分。如果为真,则显示它并将其隐藏(如下面的演示中所示)以隐藏它。

Working Demo Here

答案 2 :(得分:0)

还有另一种方法可以使用CSS和FontAwesome来处理这种情况。如果您访问FontAwesome的网站并查看示例,我将使用“fa fa-asterisk”作为此示例,您将注意到一旦您单击该图标并将它带到页面,它将为您提供UNICODE fontawesome图标的价值。例如,星号的UNICODE值为“f069”。

在这种情况下,您可以在CSS中使用“之前或之后”伪类,如下所示:

[input]#img_src::before {
font-family: 'FontAwesome';
content: '\f069'
}

这将放置一个fontawesome星号BEFORE(在这种情况下)任何输入按钮文本。如果您希望按钮仅显示图标,只需不输入任何输入文本,只需使用伪类来处理仅使用CSS的fontawesome图标的分发。

希望这有帮助。

答案 3 :(得分:0)

.select-wrapper {
  background: url(http://s10.postimg.org/4rc0fv8jt/camera.png) no-repeat;
  background-size: cover;
  display: block;
  position: relative;
  width: 33px;
  height: 26px;
}
#image_src {
  width: 26px;
  height: 26px;
  margin-right: 100px;
  opacity: 0;
  filter: alpha(opacity=0); /* IE 5-7 */
}
<div class="container">
  <span class="select-wrapper">
    <input type="file" name="image_src" id="image_src" />
  </span>
</div>

.select-wrapper {
  background: url(http://s10.postimg.org/4rc0fv8jt/camera.png) no-repeat;
  background-size: cover;
  display: block;
  position: relative;
  width: 33px;
  height: 26px;
}
#image_src {
  width: 26px;
  height: 26px;
  margin-right: 100px;
  opacity: 0;
  filter: alpha(opacity=0); /* IE 5-7 */
}
<div class="container">
  <span class="select-wrapper">
    <input type="file" name="image_src" id="image_src" />
  </span>
</div>