Utilisez Bootstrap FileStyle , qui est utilisé pour styliser les champs de fichier des formulaires. Il s'agit d'un plugin pour une bibliothèque de composants basée sur jQuery appelée Twitter Bootstrap
Ne semble pas fonctionner pour moi. Il montre toujours les boutons par défaut du brorser. De plus, la démo sur github.com/markusslima/bootstrap-filestyle.git ne fonctionne pas non plus - tous les exemples montrent les boutons par défaut. Suis-je en train de manquer quelque chose?
Ouais.
7
@Tony Uhh .... qu'est-ce qui vous fait penser que Bootstrap n'utilise pas non plus le "hack farfelu <img />" en dessous? :-)
Andz
@Ya pouvez-vous dire quel navigateur et quelle version? Testé maintenant sur Chrome Version 43.0.2357.130 (64 bits) sur Linux et tous les exemples fonctionnent parfaitement.
Fernando Kosh
20
Lancer une bibliothèque javascript (avec un plugin!) Sur un si petit problème est une exagération inélégante.
MKaama
3
Voté. Ce n'est même pas une réponse, seulement une solution de contournement qui nécessite une bibliothèque supplémentaire. La réponse devrait viser à modifier le comportement de rendu des navigateurs.
wdetac
108
Vous pouvez mettre une image à la place et le faire comme ceci:
CAVEAT : Dans IE9 et IE10 si vous déclenchez le onClick dans une entrée de fichier via javascript, le formulaire sera marqué comme «dangereux» et ne pourra pas être envoyé avec javascript, vous ne savez pas s'il peut être soumis de manière traditionnelle.
Ceci est une solution intelligente. Ne pourriez-vous pas également faire cela avec un élément <button>?
Code Commander
1
@Code Commander -Merci, et oui, vous pouvez le faire avec tous les éléments que vous voulez, mais le plus courant est l'élément <image>. Débarrassez-vous simplement du bouton + champ de texte de la "saisie de fichier" ...
ParPar
2
Juste pour prévenir quiconque utilise ce qui précède, certains navigateurs mobiles désactivent le déclenchement des clics d'entrée de fichier par programme. Plus précisément, Android 4 pour le Galaxy S III
newshorts
J'utilise à l' <input type="file" intérieur de la ligne gridview asp.net, dont les lignes peuvent être ajoutées dynamiquement .. il sera donc très difficile d'appeler le déclencheur de clic d'entrée correspondant (de la même ligne) tout en cliquant sur une image! : /
sohaiby
votre solution ne fonctionne pas. Vous n'avez pas défini la bordure, la marge, le rembourrage et la couleur d'arrière-plan ou bien ce serait évident
yan bellavance
88
Masquez l'entrée du fichier. Créez une nouvelle entrée pour capturer un événement de clic et transférez-le à l'entrée cachée:
jetant dans un fichier HTA avec le mode ie7 j'ai dû supprimer le ;à la fin.
ATek
génial, vous ne voulez pas inclure bootstrap juste pour changer deux mots de texte, mais comment feriez-vous si l'entrée de fichier était créée dynamiquement?
asparisme
@asparism utilise JavaScript pour manipuler le DOM, le cacher en définissant son style et l'utiliser avant () et ajouter le nouvel élément d'entrée?
MushyPeas
3
@MushyPeas c'est le moyen le plus simple. essayé de jouer avec css mais cette solution est beaucoup plus rapide et plus facile. merci
Mara
2
C'était aussi le moyen le plus simple pour moi! Cela m'a également permis de STYLE le bouton de fichier "maquette" comme l'une des autres options de bouton de formulaire - sans avoir à se soucier d'afficher le bouton de fichier "Parcourir".
Harry Mantheakis du
47
Le texte "upload file ..." est prédéfini par le navigateur et ne peut pas être modifié. La seule façon de contourner ce problème est d'utiliser un composant de téléchargement basé sur Flash ou Java comme swfupload .
Pouvez-vous prouver qu'il ne peut pas être changé?
user198729
Ou en parcourant les codes sources des navigateurs, au moins pour ceux Open Source.
Pekka
Cela pourrait être par la réponse (à une autre question, quelque chose comme "Pourquoi le contenu de la valeur, 'VALUE =" C: \ someFile.txt "' pour un champ de saisie de type fichier, 'TYPE =" FILE "', ignoré par le navigateur? "): stackoverflow.com/questions/1342039
Peter Mortensen
23
Fonctionne parfaitement sur tous les navigateurs J'espère que cela fonctionnera aussi pour vous.
<labelclass="btn btn-primary"><iclass="fa fa-image"></i> Your text here<inputtype="file"style="display: none;"name="image"></label>
[Modifier avec l'extrait]
<linkhref="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"rel="stylesheet"/><linkhref="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"rel="stylesheet"/><labelclass="btn btn-primary"><iclass="fa fa-image"></i> Your text here<inputtype="file"style="display: none;"name="image"></label>
<buttonstyle="display:block;width:120px;height:30px;"onclick="document.getElementById('getFile').click()">Your text here</button><inputtype='file'id="getFile"style="display:none">
EDIT : Je vois maintenant par les commentaires que vous demandez sur le texte du bouton, et non sur le chemin du fichier. Ma faute. Je laisse ma réponse originale ci-dessous au cas où quelqu'un d'autre qui tomberait sur cette question l'interpréterait comme je l'ai fait à l'origine.
2ème EDIT : J'avais supprimé cette réponse car j'ai décidé que j'avais mal compris la question et ma réponse n'était pas pertinente. Cependant, les commentaires dans une autre réponse ont indiqué que les gens voulaient toujours voir cette réponse, donc je la supprime.
MA RÉPONSE ORIGINALE (je pensais que l'OP demandait le chemin, pas le texte du bouton):
Ce n'est pas une fonctionnalité prise en charge pour des raisons de sécurité . Le navigateur Web Opera le supportait mais il a été supprimé. Réfléchissez à ce qui serait possible si cela était soutenu; Vous pouvez créer une page avec une entrée de téléchargement de fichier, la pré-remplir avec un chemin d'accès à un fichier sensible, puis soumettre automatiquement le formulaire en utilisant javascript déclenché par l' onloadévénement. Cela se produirait trop rapidement pour que l'utilisateur puisse faire quoi que ce soit à ce sujet.
<formenctype='multipart/form-data'action='/uploads.php'method=post><labelfor=b1><u>Your</u> caption here
<inputstyle='width:0px'type=filename=upfileid=b1onchange='optionalExtraProcessing(b1.files[0])'accept='image/png'></label></form>
Cela fonctionne sans javascript . Vous pouvez décorer l'étiquette à n'importe quel degré de complexité, à votre guise. Lorsque vous cliquez sur l'étiquette, le clic est automatiquement redirigé vers l'entrée du fichier. L'entrée de fichier elle-même peut être rendue invisible par n'importe quelle méthode. Si vous souhaitez que l'étiquette apparaisse comme un bouton, il existe de nombreuses solutions, par exemple:
si vous utilisez des rails et que vous rencontrez des problèmes pour l'appliquer, je voudrais ajouter quelques conseils de la réponse originale publiée par @Fernando Kosh
Téléchargez le fichier zip et copiez le fichier bootstrap-filestyle.min.js ke app / assets / javascripts /
ouvrez votre application.js et ajoutez cette ligne ci-dessous
Vous pouvez simplement ajouter une astuce css. vous n'avez pas besoin de javascript ou de plusieurs fichiers d'entrée et je conserve l' attribut de valeur existant . vous devez ajouter uniquement css . vous pouvez essayer cette solution.
pour moi, cela ne fonctionne pas avec le texte personnalisé avec bootstrap-filestyle . Cela aide à la décoration des boutons mais le texte est bizarre à changer, avant d'entrer dans la lutte avec CSS, j'essaie ce qui suit:
bootstrap-filestyle rend le composant comme span avec une classe nommée butonText, donc lorsque le document se charge, changez simplement le texte. facile à droite et il doit fonctionner sur tous les navigateurs.
Il s'agit d'une solution alternative qui peut vous être utile. Cela masque le texte qui apparaît hors du bouton, le mélangeant avec la couleur d'arrière-plan du div. Ensuite, vous pouvez donner au div un titre que vous aimez.
Dans Chrome 39, je vois à la fois le texte UPLOAD IMAGE et le bouton <input>. Peut-être que la gestion des entrées de fichiers par Chrome a changé depuis que vous avez publié cela?
EricP
@ yan-bellavance qu'est-ce que tu fais? Si vous pensez qu'une réponse est incorrecte ou pas utile, votez contre, mais ne la défigurez en aucune façon!
Réponses:
Utilisez Bootstrap FileStyle , qui est utilisé pour styliser les champs de fichier des formulaires. Il s'agit d'un plugin pour une bibliothèque de composants basée sur jQuery appelée Twitter Bootstrap
Exemple d'utilisation:
Comprendre:
Via JavaScript:
Via les attributs de données:
la source
Vous pouvez mettre une image à la place et le faire comme ceci:
HTML:
JQuery:
CAVEAT : Dans IE9 et IE10 si vous déclenchez le onClick dans une entrée de fichier via javascript, le formulaire sera marqué comme «dangereux» et ne pourra pas être envoyé avec javascript, vous ne savez pas s'il peut être soumis de manière traditionnelle.
la source
<input type="file"
intérieur de la ligne gridview asp.net, dont les lignes peuvent être ajoutées dynamiquement .. il sera donc très difficile d'appeler le déclencheur de clic d'entrée correspondant (de la même ligne) tout en cliquant sur une image! : /Masquez l'entrée du fichier. Créez une nouvelle entrée pour capturer un événement de clic et transférez-le à l'entrée cachée:
la source
;
à la fin.Le texte "upload file ..." est prédéfini par le navigateur et ne peut pas être modifié. La seule façon de contourner ce problème est d'utiliser un composant de téléchargement basé sur Flash ou Java comme swfupload .
la source
Fonctionne parfaitement sur tous les navigateurs J'espère que cela fonctionnera aussi pour vous.
HTML:
<input type="file" class="custom-file-input">
CSS:
Changez
content: 'Select some files';
avec le texte que vous voulez à l'intérieur''
SI NE FONCTIONNE PAS AVEC firefox, utilisez ceci au lieu de saisir:
la source
Il s'agit d'un plugin JQuery pour modifier le texte du bouton d'un élément de fichier d'entrée.
Exemple HTML:
Exemple JS:
Résultat:
la source
JS
plus http://geniuscarrier.com/how-to-style-a-html-file-upload-button-in-pure-css/
la source
Simplement
[Modifier avec l'extrait]
la source
Je pense que c'est ce que vous voulez:
la source
EDIT : Je vois maintenant par les commentaires que vous demandez sur le texte du bouton, et non sur le chemin du fichier. Ma faute. Je laisse ma réponse originale ci-dessous au cas où quelqu'un d'autre qui tomberait sur cette question l'interpréterait comme je l'ai fait à l'origine.
2ème EDIT : J'avais supprimé cette réponse car j'ai décidé que j'avais mal compris la question et ma réponse n'était pas pertinente. Cependant, les commentaires dans une autre réponse ont indiqué que les gens voulaient toujours voir cette réponse, donc je la supprime.
MA RÉPONSE ORIGINALE (je pensais que l'OP demandait le chemin, pas le texte du bouton):
Ce n'est pas une fonctionnalité prise en charge pour des raisons de sécurité . Le navigateur Web Opera le supportait mais il a été supprimé. Réfléchissez à ce qui serait possible si cela était soutenu; Vous pouvez créer une page avec une entrée de téléchargement de fichier, la pré-remplir avec un chemin d'accès à un fichier sensible, puis soumettre automatiquement le formulaire en utilisant javascript déclenché par l'
onload
événement. Cela se produirait trop rapidement pour que l'utilisateur puisse faire quoi que ce soit à ce sujet.la source
Utiliser
<label>
pour la légendeCela fonctionne sans javascript . Vous pouvez décorer l'étiquette à n'importe quel degré de complexité, à votre guise. Lorsque vous cliquez sur l'étiquette, le clic est automatiquement redirigé vers l'entrée du fichier. L'entrée de fichier elle-même peut être rendue invisible par n'importe quelle méthode. Si vous souhaitez que l'étiquette apparaisse comme un bouton, il existe de nombreuses solutions, par exemple:
la source
Seule classe CSS et bootstrap
la source
<input type="file">
, ajoutez une image et<input style="position:absolute">
elle occupera l'espace de<input type="file">
Utilisez le CSS suivant pour l'élément de fichier
la source
si vous utilisez des rails et que vous rencontrez des problèmes pour l'appliquer, je voudrais ajouter quelques conseils de la réponse originale publiée par @Fernando Kosh
ouvrez votre application.js et ajoutez cette ligne ci-dessous
// = nécessite bootstrap-filestyle.min
ouvrez votre café et ajoutez cette ligne
$ (": file"). filestyle ({buttonName: "btn-primary", buttonBefore: true, buttonText: "Votre texte ici", icône: false});
la source
Vous pouvez simplement ajouter une astuce css. vous n'avez pas besoin de javascript ou de plusieurs fichiers d'entrée et je conserve l' attribut de valeur existant . vous devez ajouter uniquement css . vous pouvez essayer cette solution.
la source
Voici un moyen de "changer" le texte d'une entrée avec un type de fichier, avec du HTML pur et du javascript:
la source
pour moi, cela ne fonctionne pas avec le texte personnalisé avec bootstrap-filestyle . Cela aide à la décoration des boutons mais le texte est bizarre à changer, avant d'entrer dans la lutte avec CSS, j'essaie ce qui suit:
bootstrap-filestyle rend le composant comme span avec une classe nommée butonText, donc lorsque le document se charge, changez simplement le texte. facile à droite et il doit fonctionner sur tous les navigateurs.
à votre santé
la source
Je l'ai fait comme ça pour mon projet:
la source
Il s'agit d'une solution alternative qui peut vous être utile. Cela masque le texte qui apparaît hors du bouton, le mélangeant avec la couleur d'arrière-plan du div. Ensuite, vous pouvez donner au div un titre que vous aimez.
la source