Existe uma maneira de estilizar (ou script) o <input type=file />
elemento para ter apenas o botão "Procurar" visível sem o campo de texto?
obrigado
Edit : Apenas para esclarecer por que eu preciso disso. Estou usando o código de upload de vários arquivos em http://www.morningz.com/?p=5 e ele não precisa de um campo de texto porque nunca tem valor. O script apenas adiciona o arquivo recém-selecionado à coleção na página. Ficaria muito melhor sem o campo de texto, se possível.
javascript
html
css
Andrija
fonte
fonte
Eu estava passando um bom tempo tentando fazer isso. Eu não queria usar uma solução Flash, e nenhuma das bibliotecas jQuery que eu olhei era confiável em todos os navegadores.
Eu vim com minha própria solução, que é implementada completamente em CSS (exceto a alteração no estilo onclick para fazer o botão aparecer 'clicado').
Você pode tentar um exemplo de trabalho aqui: http://jsfiddle.net/VQJ9V/307/ (Testado no FF 7, IE 9, Safari 5, Opera 11 e Chrome 14)
Ele funciona criando uma entrada de arquivo grande (com tamanho da fonte: 50px) e, em seguida, agrupando-a em uma div que possui um tamanho fixo e o estouro: oculto. A entrada é visível apenas através desta div "janela". A div pode receber uma imagem ou cor de fundo, o texto pode ser adicionado e a entrada pode ser transparente para revelar o fundo da div:
HTML:
CSS:
Avise-me se houver algum problema e tentarei corrigi-los.
fonte
Eu perdi meu dia hoje fazendo isso funcionar. Não encontrei nenhuma das soluções aqui trabalhando em cada um dos meus cenários.
Lembrei-me de que vi um exemplo para o upload de arquivo JQuery sem caixa de texto. Então, o que fiz foi pegar o exemplo deles e reduzi-o à parte relevante.
Esta solução funciona pelo menos para IE e FF e pode ser totalmente estilizada. No exemplo abaixo, a entrada do arquivo está oculta sob o sofisticado botão "Adicionar arquivos".
fonte
Oculte o elemento do arquivo de entrada e crie um botão visível que acionará o evento de clique desse arquivo de entrada.
Tente o seguinte:
CSS
HTML:
JAVASCRIPT (jQuery):
fonte
Oculte a tag do arquivo de entrada com css, adicione um rótulo e atribua-o ao botão de entrada. o rótulo será clicável e, quando clicado, acionará a caixa de diálogo do arquivo.
Adicione o estilo ao rótulo como um botão.
Demonstração ao vivo
fonte
onchange
manipulador aoinput
para permitir que algum código JS capturasse as informações do arquivo carregado.Isso vai ser muito difícil. O problema com o tipo de entrada do arquivo é que ele geralmente consiste em dois elementos visuais, enquanto é tratado como um único elemento DOM. Acrescente a isso que vários navegadores têm sua aparência distinta para a entrada do arquivo e você está pronto para pesadelo. Consulte este artigo em quirksmode.org sobre as peculiaridades que a entrada do arquivo possui. Garanto-lhe que não o fará feliz (falo por experiência própria).
[EDITAR]
Na verdade, acho que você pode se safar colocando sua entrada em um elemento contêiner (como uma div) e adicionando uma margem negativa ao elemento. Ocultar efetivamente a parte da caixa de texto da tela. Outra opção seria usar a técnica no artigo que vinculei, para tentar estilizá-la como um botão.
fonte
Correção para funcionar em todos os navegadores RESOLVIDO:
Eu testei em FF, Chrome e IE - funcionando bem, estilos aplicados também: D
fonte
Tentei implementar as duas principais soluções e acabou sendo um enorme desperdício de tempo para mim. No final, a aplicação dessa classe .css resolveu o problema ...
Feito! super limpo e super simples ...
fonte
Outra maneira fácil de fazer isso. Crie uma tag "input type file" em html e oculte-a. Em seguida, clique em um botão e formate-o de acordo com a necessidade. Depois disso, use javascript / jquery para clicar programaticamente na tag de entrada quando o botão for clicado.
HTML: -
JavaScript: -
jQuery: -
CSS: -
Aqui está um violino JS funcional para o mesmo: - http://jsfiddle.net/32na3/
fonte
Eu usei alguns dos códigos recomendados acima e, depois de muitas horas de folga, finalmente cheguei a uma solução gratuita de css bag.
Você pode executá-lo aqui - http://jsfiddle.net/WqGph/
mas depois encontrei uma solução melhor - http://jsfiddle.net/XMMc4/5/
fonte
onchange
evento não é acionado para oinput
elemento oculto .Aqui está o meu bom e velho remédio:
Pelo menos funcionou no Safari.
Claro e simples.
fonte
Você pode rotular uma imagem para que, ao clicar nela, o evento de clique do botão seja acionado. Você pode simplesmente tornar o botão normal invisível:
Funcionou para mim em todos os navegadores e é muito fácil de usar.
fonte
Você pode despachar o evento click em uma entrada de arquivo oculta como esta:
fonte
var ev = document.createEvent('HTMLEvents');
alterar HTMLEvents para MouseEventsvar ev = document.createEvent('MouseEvents');
HTML:
JQUERY
Espero que isso funcione :)
fonte
Você pode dar ao elemento de entrada uma opacidade de fonte igual a 0. Isso ocultará o campo de texto sem ocultar o botão 'Escolher arquivos'.
Não é necessário javascript, limpe o navegador desde o IE 9
Por exemplo,
fonte
Eu tenho uma solução realmente hacky com isso ...
O problema é que o atributo de largura que está ocultando o campo de texto variará obviamente entre navegadores, entre temas do Windows XP e assim por diante. Talvez seja algo com o qual você possa trabalhar? ...
fonte
Eu sei que este é um post antigo, mas uma maneira simples de fazer o texto desaparecer é apenas definir a cor do texto para a do seu plano de fundo.
por exemplo, se o fundo da entrada de texto for branco, então:
Isso não afetará o texto Escolher arquivo, que ainda ficará preto devido ao navegador.
fonte
Isso funciona para mim:
fonte
minha solução é apenas configurá-lo dentro de uma div como "druveen", mas adoro meu próprio estilo de botão à div (faça com que pareça um botão com a: hover) e apenas defino o estilo "opacity: 0;" para a entrada. Funciona um charme para mim, espero que faça o mesmo por você.
fonte
Acabei de criar um arquivo de entrada com largura: 85px e o campo de texto desapareceu
fonte
Este código HTML mostra apenas o botão Upload File
fonte
fonte
Para mim, a maneira mais simples é usar uma cor de fonte como a cor de fundo. Simples, não elegante, mas útil.
fonte
Então, aqui está a melhor maneira de fazer isso PARA TODOS OS NAVEGADORES:
Esqueça CSS!
fonte
Todas essas respostas são engraçadas, mas o CSS não funcionará, pois não é o mesmo em todos os navegadores e dispositivos, a primeira resposta que escrevi funcionará em tudo, menos no Safari. Para que ele funcione em todos os navegadores o tempo todo, ele deve ser criado dinamicamente e recriado sempre que você desejar limpar o texto de entrada:
fonte
A resposta do tmanthey é bastante boa, exceto que você não pode brincar com a largura da borda no Firefox v20. Se você vir o link (a demo não pode realmente ser mostrada aqui), eles resolveram o problema usando o tamanho da fonte = 23px, transform: translate (-300px, 0px) scale (4) para que o Firefox aumentasse o botão.
Outras soluções usando .click () em uma div diferente são inúteis se você deseja torná-la uma caixa de entrada arrastar e soltar.
fonte
Existem várias opções válidas aqui, mas achei que eu daria o que descobri enquanto tentava corrigir um problema semelhante. http://jsfiddle.net/5RyrG/1/
fonte
Resolvido com o seguinte código:
<div style="overflow: hidden;width:83px;"> <input style='float:right;' name="userfile" id="userfile" type="file"/> </div>
fonte
Eu escrevi isto:
Funciona bem em todos os navegadores, sem jQuery, sem CSS.
fonte
Aqui está uma versão simplificada da solução popular do @ ampersandre que funciona em todos os principais navegadores. Marcação Asp.NET
Código JQuery
código css
Usa um gatilho de clique "UploadButton" oculto para postagem do servidor com o padrão. O texto com "Upload File" empurra o controle de entrada para fora da vista na div do wrapper quando ele excede o fluxo, portanto não há necessidade de aplicar nenhum estilo à div do controle "file input". O seletor $ ([id $ = "FileInput"]) permite a seção de identificações com os prefixos padrão do ASP.NET aplicados. O valor da caixa de texto FilePath é definido no código do servidor atrás de hdnFileName.Value após o upload do arquivo.
fonte