Come modificare un'immagine del pulsante di input utilizzando CSS?


184

Quindi, posso creare un pulsante di input con un'immagine usando

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

Ma non riesco a ottenere lo stesso comportamento usando i CSS. Ad esempio, ci ho provato

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

dove "myButton" è definito nel file CSS come

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

Se questo è tutto ciò che volevo fare, potrei usare lo stile originale, ma voglio cambiare l'aspetto del pulsante al passaggio del mouse (usando una myButton:hoverclasse). So che i collegamenti sono buoni, perché sono stato in grado di caricarli per un'immagine di sfondo per altre parti della pagina (proprio come un controllo). Ho trovato esempi sul web su come farlo utilizzando JavaScript, ma sto cercando una soluzione CSS.

Sto usando Firefox 3.0.3 se questo fa la differenza.

Risposte:


118

Se vuoi dare uno stile al pulsante usando CSS, rendilo un pulsante type = "submit" invece di type = "image". type = "image" prevede un SRC, che non è possibile impostare in CSS.

Tieni presente che Safari non ti consente di modellare alcun pulsante nel modo che stai cercando. Se hai bisogno del supporto di Safari, dovrai posizionare un'immagine e avere una funzione onclick che invia il modulo.


1
Grazie. Utilizzando "Invia" invece di immagine, l'immagine è stata caricata.
Baltimark,

16
Safari 3 e versioni successive ti consentono di personalizzare i pulsanti come preferisci. E per essere più compatibile, usa invece un <button>.
ciglia

3
per essere più compatibile / <button> può acquistare altri problemi di compatibilità.
Eglasio,

ragazzi, controllate la risposta di SI Web Design qui sotto. si prega di votare se la risposta è migliore.
deval

112

Puoi usare il <button>tag. Per un invio, aggiungi semplicemente type="submit". Quindi utilizzare un'immagine di sfondo quando si desidera che il pulsante appaia come immagine.

Così:

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

Maggiori informazioni: http://htmldog.com/reference/htmltags/button/


21
Ricorda solo che IE (5,6,7 e 8 (in modalità non standard) invierà il .innerHTML del pulsante, non l'attributo value che hai impostato sul pulsante!
scunliffe,

Ma il bordo del pulsante <Rimane inf. L'immagine è coperta.
BJ Patel,

@scunlife, Dimitry che aggiunge la pubblicazione di innerHtml fa sì che la maggior parte dei server web non accetti i dati pubblicati, dato che puzza come un attacco di iniezione
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;
}

Funzionerà ovunque, anche in Safari.


5
Questa è la risposta migliore Grazie
Byron Whitlock,

25

Questo articolo sulla sostituzione delle immagini CSS per i pulsanti di invio potrebbe essere d'aiuto.

"Usando questo metodo otterrai un'immagine cliccabile quando i fogli di stile sono attivi e un pulsante standard quando i fogli di stile sono disattivati. Il trucco è applicare i metodi di sostituzione dell'immagine a un tag pulsante e usarlo come pulsante di invio, anziché utilizzando input.

E poiché i bordi dei pulsanti vengono cancellati, è anche consigliabile cambiare il cursore del pulsante con quello a forma di mano utilizzato per i collegamenti, poiché ciò fornisce un suggerimento visivo per gli utenti. "

Il codice 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;
}

Il problema con questo metodo è che, se il client disabilita le immagini nel proprio browser, non vedono affatto un pulsante!
Scott,

13

Ecco una soluzione più semplice ma senza div extra circostante:

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

Il CSS utilizza una tecnica di sostituzione delle immagini di base. Per i punti bonus, mostra usando uno sprite di immagini:

<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>

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


Vorrei fare clic su +2 se c'era un pulsante per questa risposta per l'attributo selettore CSS (type = "submit") e raccomandazione per gli sprite
Dylan Valade,

2
Non controllo quel sito. Meno male che ho inserito la soluzione nella mia risposta.
Philoye,


3

Ecco cosa ha funzionato per me su Internet Explorer, una leggera modifica alla soluzione di 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;
}

2

Puoi usare blank.gif (immagine trasparente 1px) come target nel tuo tag

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

e poi stile lo sfondo in 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;}

2

Una variazione sulle risposte precedenti. Ho scoperto che è necessario impostare l'opacità, ovviamente funzionerà in IE6 e successivi. Si è verificato un problema con la soluzione di altezza della linea in IE8 in cui il pulsante non rispondeva. E con questo ottieni anche un cursore a mano!

<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;
}

2

Penso che la seguente sia la soluzione migliore:

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" />

1

La mia soluzione senza js e senza immagini è questa:

* 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;}

2
Non è appropriato pubblicare collegamenti casuali sul tuo sito Web in questo modo. Non vedo alcun "esempio" di questo lì. Se desideri fare un esempio da mostrare, creane uno che funga da esempio da solo, non nel contesto di un intero sito live.
Andrew Barber,

è corretto ... il fatto è che non è possibile accedere direttamente alla pagina giusta ... solo aggiungendo 1 articolo al carrello e andando alla cassa.
Giovanni,

0

Forse potresti semplicemente importare anche un file .js e avere la sostituzione dell'immagine lì, in JavaScript.


7
Questo è seriamente finito.
Reed Richards,

0

Supponiamo che non sia possibile modificare il tipo di input o anche l'src. Hai SOLO css con cui giocare.

Se conosci l'altezza che desideri e hai invece l'URL di un'immagine di sfondo che vuoi usare, sei fortunato.

Imposta l'altezza su zero e la parte superiore imbottita all'altezza desiderata. Ciò sposterà l'immagine originale fuori dalla vista, dandoti uno spazio perfettamente pulito per mostrare l'immagine di sfondo CSS.

Funziona in Chrome. Non ho idea se funziona in IE. Quasi nulla di intelligente, quindi probabilmente no.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.