HTML / CSS Bagaimana cara menambahkan ikon gambar ke input type = "tombol"?

110

Saya menggunakan CSS di bawah ini, tetapi ini menempatkan gambar di tengah tombol. Adakah cara untuk meratakan ikon ke kiri atau kanan <input type="button">, sehingga teks dan gambar sesuai dan sejajar dengan baik?

background: url('/common/assets/images/icons/16x16/add.png');
background-position:center;
background-repeat:no-repeat;
Brett
sumber

Jawaban:

143

Jika Anda benar-benar harus menggunakan input, coba ini:

background-image: url(...);
background-repeat: no-repeat;
background-position: <left|right>;
padding-<left|right>: <width of image>px;

Biasanya sedikit lebih mudah menggunakan a buttondengan bagian imgdalam:

<button type="submit"><img> Text</button>

Namun implementasi browser buttonuntuk pengiriman tidak konsisten, serta fakta bahwa semua nilai tombol dikirim saat buttondigunakan - yang mematikan deteksi "tombol apa yang diklik" dalam formulir multi-kirim.

Delan Azabani
sumber
tidak harus, tetapi saya di sini tag tombol bermasalah di yaitu 6 atau berperilaku berbeda di beberapa browser?
Brett
Sejauh yang saya alami, button(with type submit) bekerja secara identik inputdengan pengecualian mengizinkan elemen di dalamnya (bukan hanya gaya yang diterapkan padanya).
Delan Azabani
8
Bagian 'buggy' dari <button>implementasi IE berasal dari fakta bahwa 1) pada POST / GET, ia mengirimkan 'nilai' untuk setiap tombol, dan bukan hanya yang diklik, dan 2) Daripada mengirimkan valueatribut sebenarnya , IE suka untuk mengirim konten (HTML bagian dalam) tombol. Fakta ini membuat <button>tag tidak dapat diandalkan jika tindakan yang diambil bergantung pada tombol yang diklik pengguna.
Duroth
Poin yang bagus, Duroth. Ya, itu pasti penendang untuk hal-hal seperti formulir edit posting yang memiliki "Pratinjau" dan "Kirim", dll.
Delan Azabani
3
Anda dapat menggunakan <button>dan <input type=button>secara bergantian. Jika Anda tidak ingin <button> mengirimkan di IE, atur tipenya seperti ini:<button type="button">Text</button>
Darcy
74

Ini harus melakukan apa yang Anda inginkan, dengan asumsi gambar tombol Anda adalah 16 kali 16 piksel.

<input type="button" value="Add a new row" class="button-add" />
input.button-add {
    background-image: url(/images/buttons/add.png); /* 16px x 16px */
    background-color: transparent; /* make the button transparent */
    background-repeat: no-repeat;  /* make the background image appear only once */
    background-position: 0px 0px;  /* equivalent to 'top left' */
    border: none;           /* assuming we don't want any borders */
    cursor: pointer;        /* make the cursor like hovering over an <a> element */
    height: 16px;           /* make this the size of your image */
    padding-left: 16px;     /* make text start to the right of the image */
    vertical-align: middle; /* align the text vertically centered */
}

Tombol contoh:

tombol contoh

Memperbarui

Jika Anda menggunakan Less, mixin ini mungkin berguna.

.icon-button(@icon-url, @icon-size: 16px, @icon-inset: 10px, @border-color: #000, @background-color: transparent) {
    height: @icon-size * 2;
    padding-left: @icon-size + @icon-inset * 2;
    padding-right: @icon-inset;
    border: 1px solid @border-color;
    background: @background-color url(@icon-url) no-repeat @icon-inset center;
    cursor: pointer;
}

input.button-add {
    .icon-button("http://placehold.it/16x16", @background-color: #ff9900);
}

Di atas dikompilasi menjadi

input.button-add {
  height: 32px;
  padding-left: 36px;
  padding-right: 10px;
  border: 1px solid #000000;
  background: #ff9900 url("http://placehold.it/16x16") no-repeat 10px center;
  cursor: pointer;
}

JSFiddle

sshow
sumber
tidakkah Anda membutuhkan tanda kutip dalam argumen metode url ()?
ecbrodie
10
<button type="submit" style="background-color:transparent; border-color:transparent;"> 
  <img src="images/button/masuk.png" height="35"/>
</button>
<button type="reset" style="background-color:transparent; border-color:transparent;"> 
  <img src="images/button/reset.png" height="35"/>
</button>

Saya harap ini membantu Anda.

Ferdiyan Syah
sumber
2

Jika Anda menggunakan spritesheets ini menjadi tidak mungkin dan elemen harus dibungkus.

.btn{
    display: inline-block;
    background: blue;
    position: relative;
    border-radius: 5px;
}
.input, .btn:after{
    color: #fff;
}
.btn:after{
    position: absolute;
    content: '@';
    right: 0;
    width: 1.3em;
    height: 1em;
}
.input{
    background: transparent;
    color: #fff;
    border: 0;
    padding-right: 20px;
    cursor: pointer;
    position: relative;
    padding: 5px 20px 5px 5px;
    z-index: 1;
}

Lihat biola ini: http://jsfiddle.net/AJNnZ/

Jake Cattrall
sumber
1

Anda bisa mencoba trik ini!

1) lakukan ini:

<label for="img">
   <input type="submit" name="submit" id="img" value="img-btn">
   <img src="yourimage.jpg" id="img">
</label>

2) gaya itu!

<style type="text/css">
   img:hover {
       cursor: pointer;
   }
   input[type=submit] {
       display: none;
   }
</style>

Itu tidak bersih tetapi akan melakukan pekerjaan itu!

suara positif
sumber
1

Cukup tambahkan ikon di elemen tombol di sini adalah contohnya

   <button class="social-signup facebook"> 
     <i class="fa fa-facebook-official"></i>  
      Sign up with Facebook</button>
bilal
sumber
1

Anda dapat mencoba memasukkan gambar di dalam tombol http://jsfiddle.net/s5GVh/1415/

<button type="submit"><img src='https://aca5.accela.com/bcc/app_themesDefault/assets/gsearch_disabled.png'/></button>
Vuong Passion
sumber
0

Yang akan saya lakukan adalah melakukan ini:

Gunakan tipe tombol

 <button type="submit" style="background-color:rgba(255,255,255,0.0); border:none;" id="resultButton" onclick="showResults();"><img src="images/search.png" /></button>

Saya menggunakan background-color: rgba (255,255,255,0.0); Sehingga warna latar belakang asli dari sebuah tombol hilang. Sama dengan border: none; itu akan menghilangkan batas aslinya.

Yakobus111
sumber
0

Ini adalah gaya minimal yang diperlukan, menyesuaikan gambar dengan ukuran tombol default:

<input type="button" value=" " style="background-image: url(http://www.geppoz.eu/geppoz.png);background-size:100% 100%;">

nilai "spasi" diperlukan untuk menjaga kesejajaran garis dasar, jika Anda membutuhkannya ...

Giuseppe Costanzo
sumber
0

Jawaban sshow juga melakukannya untuk saya:

navigation.css :

[...]

.buttonConfiguration {
    width: 40px;
    background-color: red; /* transparent; */
    border: none;
    color: white;
    padding: 5px 10px;
    text-align: center;
    text-decoration: none;
    display: inline-block;
    font-family: corbel;
    font-size: 12px;
    font-weight: normal;
    margin: 1px 1px;
    cursor: pointer;

    background-image: url('../images/icons5/gear_16.png');
    background-position: center; /* 0px 0px; */
    background-repeat: no-repeat;
    vertical-align: middle;
}

[...]

frameMenu.php :

[... PHP, Javascript and HTML code ...]

<!-- <li><a target="frameBody" href="admin/conf/confFunctions.php"><input type="button" class="buttonSuperAdmin" value="<?= $oLanguage->getExpression('confSettings', 'title', 'C e n t e r s') ?>"></a> -->
<li><a target="frameBody" href="admin/conf/confFunctions.php"><input type="button" class="buttonConfiguration" value=""></a>
<ul>
<li><a target="frameBody" href="admin/conf/getglobals.php "><input type="button" class="buttonSuperAdminSub" value="<?= $oLanguage->getExpression('centerSettings', 'confAdmin1', 'GetGlobals') ?>"></a></li>
<li><a target="frameBody" href="admin/conf/getcwd.php "><input type="button" class="buttonSuperAdminSub" value="<?= $oLanguage->getExpression('confSettings', 'centerAdmin2', 'GetCWD') ?>"></a></li>
</ul>
</li>

[...]

Saya telah mengujinya dengan sukses di bawah versi terbaru Firefox dan Chrome (per 9 Februari 2019).

mtjmohr
sumber
0

Seperti apa rupanya

Ini berfungsi dengan baik untuk saya, dan saya juga menangani hover dan klik CSS (dengan mengubah warna latar belakang):

HTML (di sini menampilkan 2 gambar, gambar1 di atas gambar2):

<button class="iconButton" style="background-image: url('image1.png'), url('image2.png')"
  onclick="alert('clicked');"></button>

CSS (gambar saya 32px X 32px, jadi saya memberi mereka 4px untuk padding dan pembulatan perbatasan 5px):

.iconButton {
    width: 36px;
    height: 36px;
    background-color: #000000;
    background-position: center;
    background-repeat: no-repeat;
    border: none;
    border-radius: 5px;
    cursor: pointer;
    outline: none;
}

.iconButton:hover {
    background-color: #303030;
}

.iconButton:active {
    background-color: #606060;
}

button::-moz-focus-inner {
    border: 0;
}
Andrew
sumber
-2
<img src="http://www.pic4ever.com/images/2mpe5id.gif">
            <button class="btn btn-<?php echo $settings["button_background"]; ?>" type="submit"><?php echo $settings["submit_button_text"]; ?></button>
Peter Steadham
sumber
tolong tambahkan penjelasan pada jawaban anda
warunapww
Membutuhkan ">" untuk menutup tag img.
harrypujols
1
Mengapa Anda menggunakan PHP?
Top Cat