Por que não existe um botão de upload de elemento de arquivo sofisticado para a inicialização do Twitter? Seria bom se o botão principal azul fosse implementado para o botão de upload. É ainda possível aperfeiçoar o botão de upload usando CSS? (parece um elemento nativo do navegador que não pode ser manipulado)
css
forms
twitter-bootstrap
input-type-file
jkushner
fonte
fonte
Respostas:
Aqui está uma solução para o Bootstrap 3 e 4.
Para criar um controle de entrada de arquivo funcional que se parece com um botão, você precisa apenas de HTML:
HTML
Isso funciona em todos os navegadores modernos, incluindo o IE9 +. Se você também precisar de suporte para o IE antigo, use a abordagem herdada mostrada abaixo.
Esta técnica depende do
hidden
atributo HTML5 . O Bootstrap 4 usa o seguinte CSS para ajustar esse recurso em navegadores não compatíveis. Pode ser necessário adicionar se você estiver usando o Bootstrap 3.Abordagem herdada para o IE antigo
Se você precisar de suporte para o IE8 e abaixo, use o seguinte HTML / CSS:
HTML
CSS
Observe que o IE antigo não aciona a entrada do arquivo quando você clica em um
<label>
, então o CSS "inchaço" faz algumas coisas para contornar isso:<span>
Comentários e leituras adicionais
Publiquei mais detalhes sobre esse método, bem como exemplos de como mostrar ao usuário quais / quantos arquivos estão selecionados:
http://www.abeautifulsite.net/whipping-file-inputs-into-shape-with-bootstrap-3/
fonte
<label>
elemento Como a melhor solução :)Estou surpreso que não houve menção ao
<label>
elemento.Solução:
Não há necessidade de qualquer JS, ou CSS funky ...
Solução para incluir o nome do arquivo:
A solução acima requer jQuery.
fonte
for
se estiver agrupando o elemento de destino com o rótulo.Sem nenhum plug-in adicional necessário, esta solução de inicialização funciona muito bem para mim:
demo:
http://jsfiddle.net/haisumbhatti/cAXFA/1/ (inicialização 2)
http://jsfiddle.net/haisumbhatti/y3xyU/ (inicialização 3)
fonte
Está incluído no garfo de inicialização de Jasny.
Um simples botão de upload pode ser criado usando
Com o plugin fileupload, você pode criar widgets mais avançados. Dê uma olhada em http://jasny.github.io/bootstrap/javascript/#fileinput
fonte
Os botões de upload são muito difíceis de estilizar, porque estilizam a entrada e não o botão.
mas você pode usar este truque:
http://www.quirksmode.org/dom/inputfile.html
Resumo:
Pegue um normal
<input type="file">
e coloque-o em um elemento composition: relative
.Para esse mesmo elemento pai, adicione uma imagem normal
<input>
e uma com os estilos corretos. Posicione esses elementos absolutamente, de modo que eles ocupem o mesmo lugar que o<input type="file">
.Defina o índice z de
<input type="file">
como 2 para que fique na parte superior da entrada / imagem estilizada.Por fim, defina a opacidade
<input type="file">
como 0. O<input type="file">
agora se torna efetivamente invisível e os estilos de entrada / imagem brilham, mas você ainda pode clicar no botão "Procurar". Se o botão estiver posicionado na parte superior da imagem, o usuário parece clicar na imagem e obter a janela de seleção de arquivo normal. (Observe que você não pode usar a visibilidade: oculto, porque um elemento verdadeiramente invisível também é clicável e precisamos permanecer clicáveis)fonte
Funciona para mim:
Atualizar
Estilo de plugin jQuery :
fonte
Resposta simplificada usando partes de outras respostas, principalmente user2309766 e dotcomsuperstar.
Recursos:
split
para remover o caminho do arquivo, use regex e delimitadores '\' e '/'.Código:
fonte
Com alguma inspiração de outras postagens acima, aqui está uma solução completa que combina o que parece um campo de controle de formulário com um complemento de grupo de entrada para um widget de entrada de arquivo limpo que inclui um link para o arquivo atual.
fonte
Isso funciona perfeitamente para mim
fonte
Confira a Entrada de arquivo do Twitter Bootstrap . Ele usa uma solução muito simples, basta adicionar um arquivo javascript e colar o seguinte código:
fonte
Uma solução simples com resultado aceitável:
E o estilo:
fonte
Solução para upload múltiplo
Ajustei duas respostas anteriores para incluir vários uploads. Dessa forma, o rótulo mostra o nome do arquivo, se apenas um estiver selecionado, ou
x files
no caso oposto.Também pode ser aplicado para alterar o texto e a classe do botão.
fonte
Criei um botão de upload personalizado para aceitar apenas imagens, que podem ser modificadas conforme sua exigência.
Espero que isto ajude!! :)
(Estrutura usada do Bootstrap)
Codepen-link
HTML
CSS
JS
fonte
este é o melhor estilo de upload de arquivo que eu gosto:
você pode obter demo e mais estilos em:
http://www.jasny.net/bootstrap/javascript/#fileinput
mas usando isso, você deve substituir a inicialização do twitter por arquivos de inicialização jasny.
Saudações.
fonte
Baseado na solução absolutamente brilhante @claviska, a quem todo o crédito é devido.
Entrada de arquivo Bootstrap 4 com todos os recursos com validação e texto de ajuda.
Com base no exemplo do grupo de entrada , temos um campo de texto de entrada fictício usado para exibir o nome do arquivo para o usuário, que é preenchido a partir do
onchange
evento no campo real do arquivo de entrada escondido atrás do botão de rótulo. Além de incluir o suporte à validação do bootstrap 4 , também foi possível clicar em qualquer lugar da entrada para abrir a caixa de diálogo do arquivo.Três estados da entrada do arquivo
Os três estados possíveis são não validados, válidos e inválidos com o
required
conjunto de atributos da marca de entrada html dummy .Marcação HTML para a entrada
Introduzimos apenas duas classes personalizadas
input-file-dummy
einput-file-btn
modelamos e conectamos adequadamente o comportamento desejado. Tudo o resto é a marcação padrão do Bootstrap 4.Disposições comportamentais JavaScript
A entrada fictícia precisa ser apenas de leitura, conforme o exemplo original, para impedir que o usuário altere a entrada que só pode ser alterada através da caixa de diálogo de arquivo aberto. Infelizmente, a validação não ocorre nos
readonly
campos, portanto, alternamos a editabilidade da entrada em foco e desfoque ( eventos jqueryonfocusin
eonfocusout
) e garantimos que ela se torne validável novamente quando um arquivo for selecionado.Além de tornar o campo de texto clicável, acionando o evento de clique do botão, o restante da funcionalidade de preenchimento do campo fictício foi visualizado por @claviska.
Ajustes de estilo personalizado
Mais importante ainda, não queremos que o
readonly
campo pule entre fundo cinza e branco, para garantir que ele permaneça branco. O botão span não possui um cursor de ponteiro, mas precisamos adicionar um para a entrada de qualquer maneira.nJoy!
fonte
Eu uso http://gregpike.net/demos/bootstrap-file-input/demo.html :
ou
fonte
/ * * Bootstrap 3 filestyle * http://dev.tudosobreweb.com.br/bootstrap-filestyle/ * * Copyright (c) 2013 Markus Vinicius da Silva Lima * Atualize o bootstrap 3 de Paulo Henrique Foxer * Versão 2.0.0 * Licenciado sob a licença do MIT. * * /
fonte
Modifiquei a resposta @claviska e funciona como eu gosto (Bootstrap 3, 4 não testado):
fonte
O código a seguir faz como acima da imagem
Html
Javascript
fonte
Eu tenho o mesmo problema e tento assim.
O CSS
O JS
Espero que você tenha encontrado a melhor solução ...
fonte
Tente seguir no Bootstrap v.3.3.4
fonte
Aqui está um truque alternativo, não é a melhor solução, mas apenas oferece uma escolha
Código HTML:
Javascript:
fonte
Em relação à resposta claviska - se você quiser mostrar o nome do arquivo carregado em um upload básico de arquivo, você pode fazê-lo no
onchange
evento de entradas . Basta usar este código:Esse código jquery JS é responsável pela recuperação do nome do arquivo carregado:
Ou com baunilha JS:
fonte
Eu pensei em adicionar meu valor de três centavos, apenas para dizer como os arquivos padrão
.custom-file-label
ecustom-file-input
BS4 são inseridos e como isso pode ser usado.A última classe está no grupo de entrada e não é visível. Enquanto o primeiro é o rótulo visível e possui um pseudoelemento: after que se parece com um botão.
Você não pode adicionar classes aos elementos psuedo, mas pode estilizá-las em CSS (ou SASS).
fonte
Não é necessário um truque sofisticado:
HTML:
JS:
CUIDADO: Os três elementos do formulário em questão DEVEM ser irmãos um do outro (arquivo de imagem escolhido, botão de arquivo de imagem, arquivo de imagem)
fonte
http://markusslima.github.io/bootstrap-filestyle/
OU
fonte