2009-07-03 7 views
1

Je voudrais créer une entrée de texte avec un bouton d'effacement dans un espace confiné. Comme l'iPhone, je veux placer le bouton (une petite image x) 'à l'intérieur' de l'entrée à l'extrême droite afin qu'un utilisateur puisse simplement cliquer dessus pour effacer la valeur, au lieu de devoir gaspiller de l'espace à côté de l'entrée. À l'heure actuelle, j'utilise une image d'arrière-plan sur l'entrée et une portée invisible planant au-dessus. Cela accomplit ce que je veux, mais il y a des problèmes: si l'utilisateur tape trop de texte, il ne fait que survoler l'image, et IE ne semble pas supporter les éléments au-dessus des images. Pour résoudre le premier problème, j'ai essayé de régler la marge de l'entrée sur la droite, mais cela rétrécit le tout plutôt que de garder l'entrée de la même taille et de limiter le texte à une zone.Comment puis-je placer un bouton inter-navigateur à l'intérieur (en haut) d'une entrée de texte?

Savez-vous de quelque manière que je peux créer cette combinaison compacte d'entrée et de bouton d'effacement et l'ai-je l'air et la fonction identique sur tous les navigateurs modernes?

Merci!

+0

J'ai utilisé un remplissage au lieu d'une marge ... – mpen

Répondre

3

Si vous voulez bouton sur le dessus du texte:

<span><input><button>X</button></span> 

span {display:inline-block; position:relative;} 
button {position:absolute; right:0; top:0;} 

Si vous voulez bouton ne pas interférer avec le texte:

span {border:2px inset gray; background:white; color:black;} 
input {border:0; color:inherit; background:transparent;} 
+0

Je pensais à faire quelque chose comme ça, mais il y a d'autres entrées de style par défaut sur la page, pensez-vous que cela dérangera les utilisateurs? différent? Sinon, c'est tout, merci! – hornairs

+0

Il pourrait sembler étrange en effet. Je crains que la seule façon de le rendre cohérent est de styler toutes les entrées. – Kornel

0

Vous pouvez faire une entrée de texte avec right-marging: 0; puis mettre la image juste à côté (inline), dans un div/span avec un arrière-plan simulant une extension d'entrée. De cette façon, l'entrée fait défiler juste avant d'atteindre l'image et vous obtenez toujours l'effet d'entrée d'image souhaité.

Je ne suis pas tester ce, mais ce serait quelque chose comme ceci:

<input /><span><img /><span/> 

input{margin-right: 0; border: 1px solid black; border-right: 0; background-color: white; color: black;} 
span{background-image: url('xxx.png');width:20px;} 
img{margin-left:0;border:1px solid black;border-left: 0;} 

Vous pouvez même étendre l'entrée sans arrière-plan image, tout en utilisant css plaine.

+0

A l'effet que je veux, mais l'image serait difficile à faire parce que les entrées ne sont pas les mêmes sur les différents navigateurs, je pense. Safari ajoute des ombres internes et les iPhones (que certains utilisateurs vont utiliser) sont juste fous. – hornairs

+0

C'est exactement pourquoi vous devriez utiliser css pour forcer un style dans votre entrée. Je ne peux pas garantir que tous ces navigateurs rendront le CSS pour l'entrée. – Spidey

Questions connexes