Wie ändere ich ein Bild mit einer Eingabeschaltfläche mithilfe von CSS?


184

So kann ich mit eine Eingabeschaltfläche mit einem Bild erstellen

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

Mit CSS kann ich jedoch nicht dasselbe Verhalten erzielen. Zum Beispiel habe ich es versucht

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

Dabei ist "myButton" in der CSS-Datei als definiert

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

Wenn das alles ist, was ich tun wollte, könnte ich den ursprünglichen Stil verwenden, aber ich möchte das Erscheinungsbild der Schaltfläche beim Hover ändern (mithilfe einer myButton:hoverKlasse). Ich weiß, dass die Links gut sind, weil ich sie für ein Hintergrundbild für andere Teile der Seite laden konnte (nur zur Überprüfung). Ich habe im Web Beispiele dafür gefunden, wie man es mit JavaScript macht, aber ich suche nach einer CSS-Lösung.

Ich verwende Firefox 3.0.3, wenn das einen Unterschied macht.

Antworten:


118

Wenn Sie die Schaltfläche mit CSS formatieren möchten, machen Sie sie zu einer Schaltfläche type = "submit" anstelle von type = "image". type = "image" erwartet einen SRC, den Sie in CSS nicht festlegen können.

Beachten Sie, dass Sie in Safari keine Schaltfläche so gestalten können, wie Sie es suchen. Wenn Sie Safari-Unterstützung benötigen, müssen Sie ein Bild platzieren und über eine On-Click-Funktion verfügen, mit der das Formular gesendet wird.


1
Vielen Dank. Wenn Sie "Senden" anstelle von Bild verwenden, wird das Bild geladen.
Baltimark

16
Mit Safari 3 und höher können Sie Schaltflächen nach Ihren Wünschen gestalten. Um kompatibler zu sein, verwenden Sie stattdessen einen <Button>.
Augenlidlosigkeit

3
Um kompatibler zu sein / <Button> kann Ihnen andere Kompatibilitätsprobleme ersparen.
Eglasius

Leute, schaut euch die Antwort von SI Web Design unten an. Bitte stimmen Sie ab, wenn diese Antwort besser ist.
Deval

112

Sie können das <button>Tag verwenden. Für eine Übermittlung einfach hinzufügen type="submit". Verwenden Sie dann ein Hintergrundbild, wenn die Schaltfläche als Grafik angezeigt werden soll.

Wie so:

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

Weitere Informationen: http://htmldog.com/reference/htmltags/button/


21
Denken Sie daran, dass IE (5,6,7, & 8 (im Nicht-Standard-Modus) die .innerHTML der Schaltfläche sendet, nicht das Wertattribut, das Sie auf der Schaltfläche festgelegt haben!
scunliffe

Der Rand der Schaltfläche <Bleibt inf Bild ist jedoch abgedeckt.
BJ Patel

@scunlife, Dimitry zusätzlich das Posten der innerHtml verursacht für die meisten Webserver, die veröffentlichten Daten nicht zu akzeptieren, da es nach einem Injektionsangriff riecht
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;
}

Dies funktioniert überall, auch in Safari.


5
Dies ist die beste Antwort. Vielen Dank
Byron Whitlock

25

Dieser Artikel über das Ersetzen von CSS-Bildern für Senden-Schaltflächen könnte hilfreich sein.

"Mit dieser Methode erhalten Sie ein anklickbares Bild, wenn Stylesheets aktiv sind, und eine Standardschaltfläche, wenn Stylesheets deaktiviert sind. Der Trick besteht darin, die Methoden zum Ersetzen von Bildern auf ein Schaltflächen-Tag anzuwenden und es stattdessen als Senden-Schaltfläche zu verwenden mit Eingang.

Und da Schaltfläche Grenzen gelöscht werden, ist es auch empfehlenswert Änderung der Hand die Taste Cursor ein für Links verwendet geformt, da dies für die Nutzer eine visuelle Spitze zur Verfügung stellt.“

Der CSS-Code:

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

Das Problem bei dieser Methode ist, dass der Client, wenn er Bilder in seinem Browser deaktiviert, überhaupt keine Schaltfläche sieht!
Scott

13

Hier ist eine einfachere Lösung, aber ohne zusätzliche umgebende Div:

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

Das CSS verwendet eine grundlegende Technik zum Ersetzen von Bildern. Für Bonuspunkte wird die Verwendung eines Bildsprites angezeigt:

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

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


Ich würde auf +2 klicken, wenn es eine Schaltfläche für diese Antwort für das Attribut CSS Selector (Typ = "Submit") und die Empfehlung für Sprites geben würde
Dylan Valade

2
Ich kontrolliere diese Seite nicht. Gut, dass ich die Lösung in meine Antwort aufgenommen habe.
Philoye


3

Folgendes hat für mich im Internet Explorer funktioniert, eine geringfügige Änderung der Lösung von 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

Sie können blank.gif (1px transparentes Bild) als Ziel in Ihrem Tag verwenden

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

und dann Hintergrund in CSS stylen:

.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

Eine Variation der vorherigen Antworten. Ich habe festgestellt, dass die Deckkraft eingestellt werden muss. Dies funktioniert natürlich in IE6 und höher. Es gab ein Problem mit der Zeilenhöhenlösung in IE8, bei der die Schaltfläche nicht reagierte. Und damit erhalten Sie auch einen Handcursor!

<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

Ich denke, das Folgende ist die beste Lösung:

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

Meine Lösung ohne js und ohne Bilder lautet:

* 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
Es ist nicht angebracht, auf diese Weise zufällige Links zu Ihrer Website zu veröffentlichen. Ich sehe dort überhaupt kein "Beispiel" dafür. Wenn Sie ein Beispiel zeigen möchten, erstellen Sie bitte eines, das als Beispiel für sich dient - nicht im Kontext einer ganzen Live-Site.
Andrew Barber

das ist richtig ... Tatsache ist, dass es nicht möglich ist, direkt auf die richtige Seite zuzugreifen ... nur 1 Artikel in den Warenkorb zu legen und zur Kasse zu gehen.
John

0

Vielleicht können Sie auch einfach eine .js-Datei importieren und dort das Bild in JavaScript ersetzen lassen.


7
Das ist ernsthaft übertrieben.
Reed Richards

0

Nehmen wir an, Sie können den Eingabetyp oder sogar den Quellcode nicht ändern. Sie haben NUR CSS zum Spielen.

Wenn Sie die gewünschte Höhe kennen und die URL eines Hintergrundbilds haben, das Sie stattdessen verwenden möchten, haben Sie Glück.

Stellen Sie die Höhe auf Null und die Polsterung auf die gewünschte Höhe. Dadurch wird das Originalbild außer Sichtweite und Sie erhalten einen perfekt sauberen Platz, um Ihr CSS-Hintergrundbild anzuzeigen.

Funktioniert in Chrome. Keine Ahnung, ob es im IE funktioniert. Kaum etwas Kluges tut es, also wahrscheinlich nicht.

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.