当前位置:  开发笔记 > 编程语言 > 正文

设置输入类型="文件"按钮的样式

如何解决《设置输入类型="文件"按钮的样式》经验,为你挑选了17个好方法。

如何设置输入type="file"按钮的样式.



1> Josh Crozier..:

你不需要JavaScript!这是一个跨浏览器的解决方案:

看这个例子! - 适用于Chrome/FF/IE - (IE10/9/8/7)

最好的方法是使自定义标签元素的for属性附加到隐藏文件输入元素.(标签的for属性必须与文件元素相匹配id才能使其生效).



作为替代方案,您也可以直接使用标签包装文件输入元素:( 示例)


在样式方面,只需使用属性选择器隐藏1输入元素.

input[type="file"] {
    display: none;
}

然后,您需要做的就是设置自定义label元素的样式.(例子).

.custom-file-upload {
    border: 1px solid #ccc;
    display: inline-block;
    padding: 6px 12px;
    cursor: pointer;
}

1 - 值得注意的是,如果使用隐藏元素display: none,它将无法在IE8及以下版本中使用.另请注意,jQuery validate 默认情况下不验证隐藏字段.如果任这些东西都是你的一个问题,这里有两个不同的方法来隐藏输入(1,2在这种情况下)的工作.


我确实对这个问题有疑问,在选择文件时我们将如何进行显示文件名?
很棒的解决方案,但你确实需要javascript.如果要像其他人一样要显示文件名,则需要在标签和隐藏输入之间添加范围: .然后更新change事件的span:$('#file-upload').bind('change',function(){var fileName =''; fileName = $(this).val(); $('# file-selected').html(fileName);})
如果为`input [type = file]`设置`display:none`,如何显示所选文件的名称?
你应该使用`position:absolute; 由于可访问性原因,左:-99999rem`而不是`display:none`.大多数情况下,如果使用`display:none`方法隐藏元素,屏幕阅读器将不会读取元素.
我很惊讶地发现似乎没有人考虑过键盘的可访问性.`label`元素不是键盘可访问的,不像`button`s和`input`s.添加`tabindex`不是一个解决方案,因为`label`在有焦点并且用户按下回车时仍然不会被操作.我通过*在视觉上隐藏输入来解决这个问题,所以它仍然可以聚焦,然后在`label`父级上使用`:focus-within`:http://jsbin.com/fokexoc/2/edit?html, CSS,输出
要添加到@Sam的注释中,以避免出现“ fakepath”问题,请将最后一行更改为'$('#file-selected')。html(fileName.replace(/^.*\\/,“”))); '

2> Jonathan Mof..:

造型文件输入是众所周知的困难,因为大多数浏览器不会改变css或javascript的外观.

即使输入的大小也不会响应:


相反,您将需要使用size属性:


对于任何比这更复杂的样式(例如,更改浏览按钮的外观),您将需要查看在原生文件输入顶部覆盖样式按钮和输入框的狡猾方法.rm在www.quirksmode.org/dom/inputfile.html上已经提到过的文章是我见过的最好的文章.


对于任何对现代方法感兴趣的人,我建议看[**这个答案**](http://stackoverflow.com/questions/572768/styling-an-input-type-file-button/25825731#25825731 ).它也不像其他一些答案那样需要JavaScript.
刚刚在这里找到了一个基于这个脚本的jquery解决方案:http://blog.vworld.at/2008/08/21/styling-an-input-typefile-using-jquery/
这里解释了一个比quirksmode更简单的解决方案[http://stackoverflow.com/a/21842275/1256925].只是把这个链接放在这里,因为这个答案基本上只是一个链接答案.
@JoshCrozier发布了一个非常好的解决方案.甚至打败假鼠标解决方案:)

3> teshguru..:

按照这些步骤,您可以为文件上载表单创建自定义样式:

1.)这是简单的html表格(请阅读我在下面写的html评论)

Click to upload!

2.)然后使用这个简单的脚本将click事件传递给文件输入标记.

function getFile(){
     document.getElementById("upfile").click();
}

现在,您可以使用任何类型的样式,而无需担心如何更改默认样式.我非常清楚这一点,因为我一直试图改变一个半月的默认样式.相信我这很难,因为不同的浏览器有不同的上传输入标签.所以使用这个来构建自定义文件上传表单.这是完整的AUTOMATED UPLOAD代码.

function getFile() {
  document.getElementById("upfile").click();
}

function sub(obj) {
  var file = obj.value;
  var fileName = file.split("\\");
  document.getElementById("yourBtn").innerHTML = fileName[fileName.length - 1];
  document.myForm.submit();
  event.preventDefault();
}

请享用!

祝你今天愉快,


在IE10(可能还有IE9等)中,如果您尝试通过javascript单击文件输入按钮后自动提交表单,您将获得"Access is Denied"(或jQuery没有响应).因此,只要用户仍然是提交表单的用户,此方法就可以用于样式化文件输入按钮.花了一些时间来找到这个,我看到其他人也有同样的问题.有关详细信息,请参阅此http://stackoverflow.com/a/4335390/21579.
我在IE9中提交表单时遇到了麻烦.我收到一个'Access is Denied'错误,尝试通过javascript提交表单.如果我通过UI单击提交按钮,它可以工作.有没有解决这个问题?
@ user1053263 - >感谢您的推荐..这里我使用了一个非常简单的java脚本,不需要使用像Jquery或PrototypeJS这样的框架.
适用于我尝试过的每一款浏览器,重量轻,容易.

4> Ryan..:

使用css隐藏它并使用带有$(selector).click()的自定义按钮来激活浏览按钮.然后设置一个间隔来检查文件输入类型的值.间隔可以显示用户的值,以便用户可以看到上传的内容.提交表单时间隔会清除[编辑]抱歉我一直很忙意思是更新这篇文章,这里有一个例子

$(window).load(function () {
    var intervalFunc = function () {
        $('#file-name').html($('#file-type').val());
    };
    $('#browse-click').on('click', function () { // use .live() for older versions of jQuery
        $('#file-type').click();
        setInterval(intervalFunc, 1);
        return false;
    });
});


请注意,如果您使用这种方式,它将在Internet Explorer中中断,因为它是一个安全例外.
这要聪明得多.希望我先读这个.我愚弄了其他解决方案,直到我自己想出来......太晚了.:)
尝试在jquery中使用trigger方法.另外.live在新的jquery中更改为.on()

5> 小智..:
HTML
SelectPicture


CSS
.new_Btn {
// your css propterties
}

#html_btn {
 display:none;
}
jQuery的
$('.new_Btn').bind("click" , function () {
        $('#html_btn').click();
    });
//edit: 6/20/2014: Be sure to use ".on" not ".bind" for newer versions of jQuery

小提琴:http://jsfiddle.net/M7BXC/

你可以在没有普通JavaScript的jQuery的情况下实现你的目标.

现在newBtn与html_btn链接,你可以像你想要的那样为你的新btn设置样式:D


@MehdiKaramosly甚至可以在IE 6上运行 - 但这是真的**只有jQuery 1.x**,jQuery 2.x +不支持旧的IE

6> Anselm..:

创建时,所有渲染引擎都会自动生成一个按钮.从历史上看,该按钮完全不具有风格.但是,Trident和WebKit通过伪元素添加了钩子.

三叉戟

从IE10开始,可以使用::-ms-browse伪元素设置文件输入按钮的样式.基本上,您应用于常规按钮的任何CSS规则都可以应用于伪元素.例如:

::-ms-browse {
  background: black;
  color: red;
  padding: 1em;
}


7> JDawg..:

如果您使用的是Bootstrap 3,这对我有用:

见http://www.abeautifulsite.net/whipping-file-inputs-into-shape-with-bootstrap-3/

.btn-file {
  position: relative;
  overflow: hidden;
}
.btn-file input[type=file] {
  position: absolute;
  top: 0;
  right: 0;
  min-width: 100%;
  min-height: 100%;
  font-size: 100px;
  text-align: right;
  filter: alpha(opacity=0);
  opacity: 0;
  outline: none;
  background: white;
  cursor: inherit;
  display: block;
}



    Browse...


8> Karthik..:

我可以使用下面的代码用纯CSS做到这一点.我使用过bootstrap和font-awesome.






9> kevcha..:

这里的工作示例使用本机拖放支持:https://jsfiddle.net/ms3bbazv/4/

在设置文件输入样式时,不应该破坏输入提供的任何本机交互.

display: none方法打破了本机拖放支持.

要不破坏任何内容,您应该使用opacity: 0方法进行输入,并使用包装中的相对/绝对模式对其进行定位.

使用此技术,您可以轻松地为用户设置单击/拖放区域的样式,并在dragenter事件的javascript中添加自定义类以更新样式并向用户提供反馈以让他看到他可以删除文件.

HTML:


CSS:

input[type="file"] {
  position: absolute;
  left: 0;
  opacity: 0;
  top: 0;
  bottom: 0;
  width: 100%;
}

div {
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #ccc;
  border: 3px dotted #bebebe;
  border-radius: 10px;
}

label {
  display: inline-block;
  position: relative;
  height: 100px;
  width: 400px;
}

这是一个工作示例(使用额外的JS来处理dragover事件和删除文件).

https://jsfiddle.net/ms3bbazv/4/

希望这有帮助!



10> 小智..:
 

您可以将输入类型="文件"包装在输入的标签内.根据您的喜好设置标签样式,并使用display:none隐藏输入;



11> TLK..:

使用jquery很简单.通过略微修改给出Ryan建议的代码示例.

基本的HTML:

准备就绪时,请务必在输入上设置样式:opacity: 0 您无法设置,display: none因为它需要可点击.但是如果你愿意的话,你可以将它放在"新"按钮下面,或者用z-index收集其他东西.

单击图像时,设置一些jquery以单击实际输入.

$('#image_icon').click(function() {
    $('#the_real_file_input').click();
});

现在你的按钮正常工作.只需在更改时剪切并粘贴值即可.

$('input[type=file]').bind('change', function() {
    var str = "";
    str = $(this).val();
    $("#filename").text(str);
}).change();

哇哇!您可能需要将val()解析为更有意义的内容,但您应该全部设置.


好主意,但这不适用于IE浏览器.$('#the_real_file_input').click()将触发打开的对话框,但不会将文件选入表单,上传将失败.

12> Satwik Nadka..:

这是一个解决方案,它没有真正设置元素的样式,而是在其他元素(可以设置样式)的顶部使用元素.该元素是不是真的可见的,因此,总的错觉是一个很好的样式文件上传控制.

我最近遇到了这个问题,尽管Stack Overflow上有很多答案,但似乎没有一个真的符合这个要求.最后,我最终定制了这个,以便有一个简单而优雅的解决方案.

我也在Firefox,IE(11,10和9),Chrome和Opera,iPad以及一些Android设备上进行了测试.

这是JSFiddle链接 - > http://jsfiddle.net/umhva747/

$('input[type=file]').change(function(e) {
    $in = $(this);
    $in.next().html($in.val());
    
});

$('.uploadButton').click(function() {
    var fileName = $("#fileUpload").val();
    if (fileName) {
        alert(fileName + " can be uploaded.");
    }
    else {
        alert("Please select a file to upload");
    }
});
body {
    background-color:Black;
}

div.upload {
    background-color:#fff;
    border: 1px solid #ddd;
    border-radius:5px;
    display:inline-block;
    height: 30px;
    padding:3px 40px 3px 3px;
    position:relative;
    width: auto;
}

div.upload:hover {
    opacity:0.95;
}

div.upload input[type="file"] {
    display: input-block;
    width: 100%;
    height: 30px;
    opacity: 0;
    cursor:pointer;
    position:absolute;
    left:0;
}
.uploadButton {
    background-color: #425F9C;
    border: none;
    border-radius: 3px;
    color: #FFF;
    cursor:pointer;
    display: inline-block;
    height: 30px;
    margin-right:15px;
    width: auto;
    padding:0 20px;
    box-sizing: content-box;
}

.fileName {
    font-family: Arial;
    font-size:14px;
}

.upload + .uploadButton {
    height:38px;
}


    
Select file..


13> Tigran Babaj..:

将上传文件按钮放在漂亮的按钮或元素上,然后将其隐藏。

非常简单,可以在任何浏览器上使用

款式

.upload-wrap {
    position: relative;
}

.upload-btn {
    position: absolute;
    left: 0;
    opacity: 0;
}



14> Gianluca Ghe..:
可见性:隐藏的TRICK

我经常去寻找visibility:hidden技巧

这是我的风格按钮

Upload

这是input type = file按钮.请注意visibility:hidden规则


这是将它们粘合在一起的JavaScript位.有用




15> roman m..:

我能想到的唯一方法是在渲染后使用javascript找到按钮并为其指定样式

你也可以看一下这篇文章



16> user2086641..:

我通常会使用简单的javascript来自定义文件输入标签.一个隐藏的输入字段,点击按钮,javascript调用隐藏字段,简单的解决方案,没有任何CSS或一堆jquery.




17> Abdallah Oka..:

在这里,我们使用一个span来触发文件类型的输入,并且我们只是自定义了span,因此我们可以使用这种方式添加任何样式。

请注意,我们将输入标签与“ visibility:hidden”选项一起使用,并在范围内触发它。

.attachFileSpan{
color:#2b6dad;
cursor:pointer;
}
.attachFileSpan:hover{
text-decoration: underline;
}

Customized input of type file

Attach file
推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有