如何创建自定义文件上传按钮

2025-06-05

如何创建自定义文件上传按钮

我觉得默认的 HTML 文件上传按钮太丑了。更烦人的是,好像没办法直接给它设置样式。下面是我创建自定义文件上传按钮的方法。

1. 使用标签标签并将其for属性指向默认 HTML 文件上传按钮的id

<!--default html file upload button-->
<input type="file" id="actual-btn"/>

<!--our custom file upload button-->
<label for="actual-btn">Choose File</label>
Enter fullscreen mode Exit fullscreen mode

通过这样做,单击浏览器中的标签元素将切换默认的 HTML 文件上传按钮(就像我们直接单击它一样)。

上述代码的输出如下。如您所见,我们只有一个“选择文件”文本(来自标签元素),位于实际上传按钮右侧几个像素处。

我们可以点击选择文件文本,它将切换上传窗口(点击它查看)

2. 设置标签元素的样式并隐藏默认的 HTML 文件上传按钮

我们通过在标签中添加隐藏属性来隐藏浏览器中的默认 HTML 文件上传按钮,如下所示

<input type="file" id="actual-btn" hidden/>
Enter fullscreen mode Exit fullscreen mode

现在我们将标签元素的样式设计得更像一个按钮。

label {
  background-color: indigo;
  color: white;
  padding: 0.5rem;
  font-family: sans-serif;
  border-radius: 0.3rem;
  cursor: pointer;
  margin-top: 1rem;
}
Enter fullscreen mode Exit fullscreen mode

现在我们有了这个漂亮的自定义按钮,它实际上就像原始文件上传按钮一样工作:

至此,我们已经完成了。但还有一个问题需要解决。

默认文件上传按钮旁边会显示“未选择文件”的文本(向上滚动到第一个 Codepen 窗口),它会被替换成我们要上传的文件的名称。可惜的是,自定义按钮上看不到这个文本。该怎么做呢?

我所做的是在我们的自定义文件上传按钮之后立即包含一个span 标签(带有 file-chosen 的 id) 。

在JavaScript文件中,我监听了原始文件上传按钮(我们已将其隐藏)的change事件。返回一个文件对象,其中包含已上传文件的详细信息(例如名称、文件大小等)。

然后,我将span 元素(id 为 file-chosen)文本内容设置为返回的文件对象的name属性。最终结果如下。测试一下。

请在下方留下您的评论和问题

文章来源:https://dev.to/faddalibrahim/how-to-create-a-custom-file-upload-button-using-html-css-and-javascript-1c03
PREV
如何正确使用 index.js 文件
NEXT
构建可扩展的电子商务数据模型