J'aimerais ajouter une icône d'image à un espace réservé d'entrée, comme dans cette image:
Veuillez noter qu'il s'agit d'un espace réservé. Ainsi, lorsque l'utilisateur commence à taper, l'icône disparaît également.
Je suis arrivé avec la solution suivante pour webkit (Safari + Chrome) en utilisant ::-webkit-input-placeholder
et ::before
. Malheureusement, l’application directe à Mozilla ne semble pas fonctionner.
Ma question est donc la suivante: existe-t-il une solution multi-navigateur pour ajouter une icône d’image à un espace réservé d’entrée?
Solution pour webkit:
#myinput::-webkit-input-placeholder::before {
content: ' ';
position: absolute;
top: 2px; /* adjust icon position */
left: 0px;
width: 14px; /* size of a single icon */
height: 14px;
background-image: url("/path/to/icons.png"); /* all icons in a single file */
background-repeat: no-repeat;
background-position: -48px 0px; /* position of the right icon */
}
background-image
et utiliser text-indent
ou une padding
pour décaler le texte vers la droite.Honnêtement, j'éviterais d'utiliser HTML5/CSS3 sans un bon repli. Trop de personnes utilisant d'anciens navigateurs ne prennent pas en charge toutes les nouveautés sophistiquées. Cela prendra un certain temps avant que nous puissions abandonner le repli, malheureusement :(
La première méthode que j'ai mentionnée est la plus sûre et la plus simple. Javascript nécessite de cacher l’icône dans les deux sens.
CSS:
input#search {
background-image: url(bg.jpg);
background-repeat: no-repeat;
text-indent: 20px;
}
HTML:
<input type="text" id="search" name="search" onchange="hideIcon(this);" value="search" />
Javascript:
function hideIcon(self) {
self.style.backgroundImage = 'none';
}
Je n'arrive pas à croire que j'ai dit "JavaScript nécessite, dans les deux sens, de masquer l'icône", car ce n'est pas tout à fait vrai.
Le moment le plus courant pour masquer le texte d'espace réservé est le changement, comme suggéré dans cette réponse. Pour les icônes, il est toutefois correct de les masquer, ce qui peut être fait en CSS avec la pseudo-classe active
.
#search:active { background-image: none; }
Heck, en utilisant CSS3 vous pouvez le faire disparaître!
Bien sûr, il y a aussi les pseudo-éléments CSS3 :: before. Attention cependant au support du navigateur!
Chrome Firefox IE Opera Safari
:before (yes) 1.0 8.0 4 4.0
::before (yes) 1.5 9.0 7 4.0
`CSS:
input#search{
background-image: url(bg.jpg);
background-repeat: no-repeat;
text-indent: 20px;
}
input#search:focus{
background-image:none;
}
HTML:
<input type="text" id="search" name="search" value="search" />`
Je ne sais pas s’il existe une meilleure réponse avec le temps, mais c’est simple et cela fonctionne;
input[type='email'] {
background: white url(images/mail.svg) no-repeat ;
}
input[type='email']:focus {
background-image: none;
}
Donnez-lui un style.