Comment changer une image de bouton d'entrée en utilisant CSS?

184

Ainsi, je peux créer un bouton d'entrée avec une image en utilisant

<INPUT type="image" src="/images/Btn.PNG" value="">

Mais, je ne peux pas obtenir le même comportement en utilisant CSS. Par exemple, j'ai essayé

<INPUT type="image" class="myButton" value="">

où "myButton" est défini dans le fichier CSS comme

.myButton {
    background:url(/images/Btn.PNG) no-repeat;
    cursor:pointer;
    width: 200px;
    height: 100px;
    border: none;
}

Si c'est tout ce que je voulais faire, je pourrais utiliser le style d'origine, mais je veux changer l'apparence du bouton en survol (en utilisant une myButton:hoverclasse). Je sais que les liens sont bons, car j'ai pu les charger pour une image d'arrière-plan pour d'autres parties de la page (juste pour vérifier). J'ai trouvé des exemples sur le Web de la façon de le faire en utilisant JavaScript, mais je recherche une solution CSS.

J'utilise Firefox 3.0.3 si cela fait une différence.

Baltimark
la source

Réponses:

118

Si vous souhaitez styliser le bouton en utilisant CSS, faites-en un bouton type = "soumettre" au lieu de type = "image". type = "image" attend un SRC, que vous ne pouvez pas définir dans CSS.

Notez que Safari ne vous permettra pas de styliser un bouton de la manière que vous recherchez. Si vous avez besoin du support Safari, vous devrez placer une image et disposer d'une fonction onclick qui soumet le formulaire.

ceejayoz
la source
1
Merci. En utilisant "soumettre" au lieu de l'image, l'image est chargée.
Baltimark
16
Safari 3 et versions ultérieures vous permettent de personnaliser les boutons comme vous le souhaitez. Et pour être plus compatible, utilisez plutôt un <button>.
paupière
3
re pour être plus compatible / <button> peut vous acheter d'autres problèmes de compatibilité.
eglasius
les gars, vérifiez la réponse par SI Web Design ci-dessous. Veuillez voter si cette réponse est meilleure.
deval
112

Vous pouvez utiliser la <button>balise. Pour une soumission, ajoutez simplement type="submit". Utilisez ensuite une image d'arrière-plan lorsque vous souhaitez que le bouton apparaisse sous forme de graphique.

Ainsi:

<button type="submit" style="border: 0; background: transparent">
    <img src="/images/Btn.PNG" width="90" height="50" alt="submit" />
</button>

Plus d'infos: http://htmldog.com/reference/htmltags/button/

Dimitry
la source
21
N'oubliez pas que IE (5, 6, 7 et 8 (en mode non standard) soumettra le .innerHTML du bouton, pas l'attribut de valeur que vous avez défini sur le bouton!
scunliffe
Mais la bordure du bouton <Remains inf Image est couverte.
BJ Patel
@scunlife, Dimitry en plus de publier le fichier innerHtml fait que la plupart des serveurs Web n'acceptent pas les données publiées, car cela sent comme une attaque par injection
Cohen
73

HTML

<div class="myButton"><INPUT type="submit" name="" value=""></div>

CSS

div.myButton input {
    background:url(/images/Btn.PNG) no-repeat;
    cursor:pointer;
    width: 200px;
    height: 100px;
    border: none;
}

Cela fonctionnera n'importe où, même dans Safari.

Conception Web SI
la source
5
C'est la meilleure réponse. Merci
Byron Whitlock
25

Cet article sur le remplacement d'image CSS pour les boutons d'envoi pourrait vous aider.

"En utilisant cette méthode, vous obtiendrez une image cliquable lorsque les feuilles de style sont actives, et un bouton standard lorsque les feuilles de style sont désactivées. L'astuce consiste à appliquer les méthodes de remplacement d'image à une balise de bouton et à l'utiliser comme bouton d'envoi, au lieu de à l'aide de l'entrée.

Et comme les bordures des boutons sont effacées, il est également recommandé de changer le curseur du bouton en un curseur en forme de main utilisé pour les liens, car cela fournit un conseil visuel aux utilisateurs.

Le code CSS:

#replacement-1 {
  width: 100px;
  height: 55px;
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent url(image.gif) no-repeat center top;
  text-indent: -1000em;
  cursor: pointer; /* hand-shaped cursor */
  cursor: hand; /* for IE 5.x */
}

#replacement-2 {
  width: 100px;
  height: 55px;
  padding: 55px 0 0;
  margin: 0;
  border: 0;
  background: transparent url(image.gif) no-repeat center top;
  overflow: hidden;
  cursor: pointer; /* hand-shaped cursor */
  cursor: hand; /* for IE 5.x */
}
form>#replacement-2 { /* For non-IE browsers*/
  height: 0px;
}
splattne
la source
Le problème avec cette méthode est que, si le client désactive les images dans son navigateur, il ne voit pas du tout de bouton!
Scott
13

Voici une solution plus simple mais sans div supplémentaire autour:

<input type="submit" value="Submit">

Le CSS utilise une technique de remplacement d'image de base. Pour les points bonus, il s'affiche à l'aide d'un sprite d'image:

<style>
    input[type="submit"] {
        border: 0;
        background: url('sprite.png') no-repeat -40px left;
        text-indent: -9999em;
        line-height:3000;
        width: 50px;
        height: 20px;
    }
</style>

Source: http://work.arounds.org/issue/21/using-css-sprites-with-input-type-submit-buttons/

Philoye
la source
Je cliquerais sur +2 s'il y avait un bouton pour cette réponse pour l'attribut CSS selector (type = "submit") et recommandation pour les sprites
Dylan Valade
2
Je ne contrôle pas ce site. Heureusement que j'ai mis la solution dans ma réponse.
philoye
Dernière version enregistrée du lien: web.archive.org/web/20140112085651/http://work.arounds.org/…
Bernhard Wagner
3

Voici ce qui a fonctionné pour moi sur Internet Explorer, une légère modification de la solution par Philoye.

>#divbutton
{
    position:relative;
    top:-64px;
    left:210px;
    background: transparent url("../../images/login_go.png") no-repeat;
    line-height:3000;
    width:33px;
    height:32px;
    border:none;
    cursor:pointer;
}
user545376
la source
2

Vous pouvez utiliser blank.gif (image transparente 1px) comme cible dans votre tag

<input type="image" src="img/blank.gif" class="button"> 

puis stylisez l'arrière-plan en css:

.button {border:0;background:transparent url("../img/button.png") no-repeat 0 0;}
.button:hover {background:transparent url("../img/button-hover.png") no-repeat 0 0;}
dafyk
la source
2

Une variante des réponses précédentes. J'ai trouvé que l'opacité doit être définie, bien sûr, cela fonctionnera dans IE6 et autres. Il y avait un problème avec la solution de hauteur de ligne dans IE8 où le bouton ne répondait pas. Et avec cela, vous obtenez également un curseur de main!

<div id="myButton">
  <input id="myInputButton" type="submit" name="" value="">
</div>

#myButton {
 background: url("form_send_button.gif") no-repeat;
 width: 62px;
 height: 24px;
 }

#myInputButton { 
 background: url("form_send_button.gif") no-repeat;
 opacity: 0;
 -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
 filter: alpha(opacity=0);
 width: 67px;
 height: 26px;
 cursor: pointer;
 cursor: hand;
}
Reed Richards
la source
2

Je pense que ce qui suit est la meilleure solution:

css:

.edit-button {
    background-image: url(edit.png);
    background-size: 100%;
    background-repeat:no-repeat;
    width: 24px;
    height: 24px;
}

html:

<input class="edit-button" type="image" src="transparent.png" />
inf3rno
la source
1

Ma solution sans js et sans images est la suivante:

* HTML:

<input type=Submit class=continue_shopping_2 
name=Register title="Confirm Your Data!" 
value="confirm your data">

* CSS:

.continue_shopping_2:hover{
background-color:#FF9933;
text-decoration:none;
color:#FFFFFF;}


.continue_shopping_2{
padding:0 0 3px 0;
cursor:pointer;
background-color:#EC5500;
display:block;
text-align:center;
margin-top:8px;
width:174px;
height:21px;
border-radius:5px;
border-width:1px;
border-style:solid;
border-color:#919191;
font-family:Verdana;
font-size:13px;
font-style:normal;
line-height:normal;
font-weight:bold;
color:#FFFFFF;}
John
la source
2
Il n'est pas approprié de publier des liens aléatoires vers votre site Web de cette manière. Je n'y vois aucun «exemple» de cela. Si vous souhaitez faire un exemple à montrer, veuillez en créer un qui serve d'exemple en soi - pas dans le contexte d'un site entier en direct.
Andrew Barber
c'est correct ... le fait est qu'il n'est pas possible d'accéder directement à la bonne page ... en ajoutant seulement 1 article au panier et en passant à la caisse.
John
0

Peut-être pourriez-vous simplement importer un fichier .js et y faire remplacer l'image, en JavaScript.


la source
7
C'est sérieusement au-dessus de le faire.
Reed Richards
0

Supposons que vous ne puissiez pas changer le type d'entrée, ni même le src. Vous avez UNIQUEMENT des CSS pour jouer.

Si vous connaissez la hauteur souhaitée et que vous avez l'URL d'une image d'arrière-plan que vous souhaitez utiliser à la place, vous avez de la chance.

Réglez la hauteur sur zéro et le haut du rembourrage sur la hauteur souhaitée. Cela mettra l'image originale hors de vue, vous donnant un espace parfaitement propre pour montrer votre image d'arrière-plan css.

Fonctionne dans Chrome. Aucune idée si cela fonctionne dans IE. Rien d'intelligent ne le fait, donc probablement pas.

#daft {
  height: 0;
  padding-top: 100px;
  width: 100px;
  background-image: url(clever.jpg);
}
<input type="image" src="daft.jpg" id="daft">

Colin James Firth
la source