Existe-t-il un moyen de styliser (ou de script) un <input type=file />
élément pour n'avoir que le bouton "Parcourir" visible sans champ de texte?
Merci
Edit : Juste pour clarifier pourquoi j'ai besoin de cela. J'utilise le code de téléchargement multi-fichier de http://www.morningz.com/?p=5 et il n'a pas besoin de champ de texte d'entrée car il n'a jamais de valeur. Le script ajoute simplement le fichier nouvellement sélectionné à la collection sur la page. Cela aurait l'air beaucoup mieux sans champ de texte, si c'est possible.
javascript
html
css
Andrija
la source
la source
J'avais beaucoup de mal à essayer d'accomplir cela. Je ne voulais pas utiliser de solution Flash et aucune des bibliothèques jQuery que j'ai examinées n'était fiable sur tous les navigateurs.
J'ai proposé ma propre solution, qui est entièrement implémentée en CSS (à l'exception du changement de style onclick pour faire apparaître le bouton «cliqué»).
Vous pouvez essayer un exemple fonctionnel ici: http://jsfiddle.net/VQJ9V/307/ (Testé dans FF 7, IE 9, Safari 5, Opera 11 et Chrome 14)
Cela fonctionne en créant un gros fichier d'entrée (avec la taille de la police: 50px), puis en l'enveloppant dans un div qui a une taille fixe et un débordement: caché. L'entrée n'est alors visible qu'à travers cette "fenêtre" div. Le div peut recevoir une image ou une couleur d'arrière-plan, du texte peut être ajouté et l'entrée peut être rendue transparente pour révéler l'arrière-plan du div:
HTML:
CSS:
Faites-moi savoir s'il y a des problèmes avec cela et j'essaierai de les résoudre.
la source
J'ai perdu ma journée aujourd'hui pour que cela fonctionne. Je n'ai trouvé aucune des solutions ici fonctionnant dans chacun de mes scénarios.
Ensuite, je me suis souvenu que j'avais vu un exemple pour le téléchargement de fichier JQuery sans zone de texte. Donc ce que j'ai fait, c'est que j'ai pris leur exemple et je l'ai réduit à la partie pertinente.
Cette solution fonctionne au moins pour IE et FF et peut être entièrement stylisée. Dans l'exemple ci-dessous, l'entrée de fichier est masquée sous le bouton fantaisie "Ajouter des fichiers".
la source
Cachez l'élément de fichier d'entrée et créez un bouton visible qui déclenchera l'événement de clic de ce fichier d'entrée.
Essaye ça:
CSS
HTML:
JAVASCRIPT (jQuery):
la source
Masquez la balise du fichier d'entrée avec css, ajoutez une étiquette et attribuez-la au bouton d'entrée. l'étiquette sera cliquable et lorsque vous cliquez dessus, la boîte de dialogue de fichier sera ouverte.
Ajoutez le style à l'étiquette sous forme de bouton.
Démo en direct
la source
onchange
gestionnaire auinput
pour permettre à du code JS de récupérer les informations du fichier téléchargé.Ça va être très dur. Le problème avec le type d'entrée de fichier est qu'il se compose généralement de deux éléments visuels, tout en étant traité comme un seul élément DOM. Ajoutez à cela que plusieurs navigateurs ont leur propre aspect et leur propre interface pour l'entrée de fichier, et vous êtes prêt pour le cauchemar. Consultez cet article sur quirksmode.org sur les bizarreries du fichier d'entrée. Je vous garantis que cela ne vous rendra pas heureux (je parle d'expérience).
[ÉDITER]
En fait, je pense que vous pourriez vous en sortir en mettant votre entrée dans un élément conteneur (comme un div) et en ajoutant une marge négative à l'élément. Cacher efficacement la partie zone de texte hors de l'écran. Une autre option serait d'utiliser la technique de l'article que j'ai lié, pour essayer de le styliser comme un bouton.
la source
Correctif pour fonctionner dans tous les navigateurs RÉSOLU:
J'ai testé dans FF, Chrome et IE - fonctionne bien, styles appliqués aussi: D
la source
J'ai essayé de mettre en œuvre les deux meilleures solutions et cela a fini par être une énorme perte de temps pour moi. En fin de compte, l'application de cette classe .css a résolu le problème ...
Terminé! super propre et super simple ...
la source
Une autre façon simple de faire cela. Créez une balise "fichier de type d'entrée" en html et cachez-la. Cliquez ensuite sur un bouton et formatez-le en fonction des besoins. Après cela, utilisez javascript / jquery pour cliquer par programme sur la balise d'entrée lorsque vous cliquez sur le bouton.
HTML: -
JavaScript: -
jQuery: -
CSS: -
Voici un violon JS fonctionnel pour le même: - http://jsfiddle.net/32na3/
la source
J'ai utilisé une partie du code recommandé ci-dessus et après de nombreuses heures à perdre mon temps, je suis finalement arrivé à une solution sans sac css.
Vous pouvez l'exécuter ici - http://jsfiddle.net/WqGph/
mais ensuite trouvé une meilleure solution - http://jsfiddle.net/XMMc4/5/
la source
onchange
événement n'est pas déclenché pour l'input
élément masqué .Voici mon bon vieux remède:
Au moins, cela a fonctionné dans Safari.
Clair et simple.
la source
Vous pouvez étiqueter une image afin que lorsque vous cliquez dessus, l'événement de clic du bouton soit déclenché. Vous pouvez simplement rendre le bouton normal invisible:
Cela a fonctionné pour moi sur tous les navigateurs et est très facile à utiliser.
la source
Vous pouvez envoyer l'événement de clic sur une entrée de fichier cachée comme ceci:
la source
var ev = document.createEvent('HTMLEvents');
changer HTMLEvents en MouseEventsvar ev = document.createEvent('MouseEvents');
HTML:
JQUERY
J'espère que cela fonctionne :)
la source
Vous pouvez donner à l'élément d'entrée une opacité de police de 0. Cela masquera le champ de texte sans masquer le bouton «Choisir les fichiers».
Aucun javascript requis, effacez le navigateur croisé depuis IE 9
Par exemple,
la source
J'ai une solution vraiment pirate avec ça ...
Le problème est que l'attribut width qui masque le champ de texte varie évidemment d'un navigateur à l'autre, varie d'un thème Windows XP à l'autre, etc. Peut-être que c'est quelque chose avec lequel vous pouvez travailler? ...
la source
Je sais que c'est un ancien message, mais un moyen simple de faire disparaître le texte consiste simplement à définir la couleur du texte sur celle de votre arrière-plan.
Par exemple, si l'arrière-plan de votre saisie de texte est blanc, alors:
Cela n'affectera pas le texte Choose File qui restera noir en raison du navigateur.
la source
Cela fonctionne pour moi:
la source
ma solution est juste de le définir dans un div comme "druveen" dit, mais j'ajoute mon propre style de bouton au div (le faire ressembler à un bouton avec un: hover) et je viens de définir le style "opacity: 0;" à l'entrée. Fonctionne un charme pour moi, j'espère qu'il en fera de même pour vous.
la source
Je viens de styliser un fichier d'entrée avec une largeur: 85px, et le champ de texte a disparu du tout
la source
Ce code HTML s'affiche uniquement sur le bouton Télécharger le fichier
la source
la source
Pour moi, le moyen le plus simple consiste à utiliser une couleur de police comme la couleur d'arrière-plan. Simple, pas élégant, mais utile.
la source
Voici donc la meilleure façon de procéder POUR TOUS LES NAVIGATEURS:
Oubliez CSS!
la source
Toutes ces réponses sont mignonnes, mais CSS ne fonctionnera pas car ce n'est pas la même chose sur tous les navigateurs et appareils, la première réponse que j'ai écrite fonctionnera dans tout sauf Safari. Pour qu'il fonctionne sur tous les navigateurs tout le temps, il doit être créé dynamiquement et recréé chaque fois que vous souhaitez effacer le texte d'entrée:
la source
La réponse de tmanthey est plutôt bonne, sauf que vous ne pouvez pas jouer avec la largeur de la bordure dans Firefox v20. Si vous voyez le lien (démo, je ne peux pas vraiment le montrer ici), ils ont résolu le problème en utilisant font-size = 23px, transform: translate (-300px, 0px) scale (4) pour Firefox pour agrandir le bouton.
D'autres solutions utilisant .click () sur un div différent sont inutiles si vous voulez en faire une zone de saisie glisser-déposer.
la source
Il existe plusieurs options valides ici, mais j'ai pensé que je donnerais ce que j'ai trouvé en essayant de résoudre un problème similaire. http://jsfiddle.net/5RyrG/1/
la source
Résolu avec le code suivant:
<div style="overflow: hidden;width:83px;"> <input style='float:right;' name="userfile" id="userfile" type="file"/> </div>
la source
J'ai écrit ceci:
Fonctionne bien dans tous les navigateurs, pas de jQuery, pas de CSS.
la source
Voici une version simplifiée de la solution populaire de @ ampersandre qui fonctionne dans tous les principaux navigateurs. Balisage Asp.NET
Code JQuery
code css
Utilise un déclencheur de clic "UploadButton" caché pour la publication de serveur avec standard. Le texte avec "Upload File" pousse le contrôle d'entrée hors de vue dans le div wrapper lorsqu'il déborde, il n'est donc pas nécessaire d'appliquer des styles pour le contrôle div "file input". Le sélecteur $ ([id $ = "FileInput"]) autorise la section d'ID avec les préfixes ASP.NET standard appliqués. La valeur de la zone de texte FilePath dans l'ensemble à partir du code serveur derrière hdnFileName.Value une fois le fichier téléchargé.
la source