Letakkan ikon di dalam elemen input dalam formulir

272

Bagaimana cara menempatkan ikon di dalam elemen input formulir?

Cuplikan layar formulir web dengan tiga input yang memiliki ikon di dalamnya

Versi langsung di: Tidal Force theme

akif
sumber
2
@IvanSokalskiy Itu dengan asumsi seseorang menggunakan Bootstrap. Tidak semua orang yang menemukan ini akan menggunakan Bootstrap!
Barry Michael Doyle

Jawaban:

392

Situs yang Anda tautkan menggunakan kombinasi trik CSS untuk melakukan ini. Pertama, ia menggunakan gambar latar belakang untuk <input>elemen. Kemudian, untuk mendorong kursor ke atas, ia menggunakan padding-left.

Dengan kata lain, mereka memiliki dua aturan CSS ini:

background: url(images/comment-author.gif) no-repeat scroll 7px 7px;
padding-left:30px;
Dan Lew
sumber
2
Bisakah Anda jelaskan lebih lanjut tentang parameter atas dan kiri (7px 7 px) dan atribut lainnya? Itu harus membantu.
QMaster
262
Saran: berhenti menggunakan dan mendukung IE 8.
a coder
3
bagaimana cara menyelaraskan gambar ke ujung kanan bidang input?
ishanbakshi
3
Masalah dengan gambar latar belakang adalah bahwa pengisian otomatis Chrome menghapus gambar latar belakang dan membuat latar belakang menjadi kuning sepenuhnya
Cătălin Rădoi
1
Untuk menyelaraskan ke penggunaan yang tepat: background-position: right;
raison
52

Solusi CSS yang diposting oleh orang lain adalah cara terbaik untuk mencapai ini.

Jika itu memberi Anda masalah (baca IE6), Anda juga dapat menggunakan input tanpa batas di dalam div.

<div style="border: 1px solid #DDD;">
    <img src="icon.png"/>
    <input style="border: none;"/>
</div>

Bukan sebagai "bersih", tetapi harus berfungsi pada peramban yang lebih lama.

harpo
sumber
2
tambahan yang bagus untuk jawaban ini. terkadang yaitu memberikan masalah dan ini adalah cara yang baik untuk menyelesaikan salah satunya. bekerja untuk saya walaupun dengan span sebagai gantinya.
Ross
Cara yang bagus untuk menambahkan struktur yang lebih kompleks di dalam input!
jonhue
@jonhue, saya tidak akan merekomendasikan ini kecuali Anda masih hidup di dekade sebelumnya dan perlu mendukung IE6. Meski begitu, saya tidak akan menyebutnya "bersih."
harpo
@harpo Bagaimana Anda memasukkan tautan ke dalam input?
jonhue
35

Solusi tanpa gambar latar belakang:

#input_container {
    position:relative;
    padding:0 0 0 20px;
    margin:0 20px;
    background:#ddd;
    direction: rtl;
    width: 200px;
}
#input {
    height:20px;
    margin:0;
    padding-right: 30px;
    width: 100%;
}
#input_img {
    position:absolute;
    bottom:2px;
    right:5px;
    width:24px;
    height:24px;
}
<div id="input_container">
    <input type="text" id="input" value>
    <img src="https://cdn4.iconfinder.com/data/icons/36-slim-icons/87/calender.png" id="input_img">
</div>

savalanpour majid
sumber
34

Anda dapat mencoba ini:

input[type='text'] {
    background-image: url(images/comment-author.gif);
    background-position: 7px 7px;
    background-repeat: no-repeat;
}
Alan Haggai Alavi
sumber
26

Saya menemukan ini solusi terbaik dan terbersih untuk itu. Menggunakan indentasi teks pada inputelemen

CSS:

#icon{
background-image:url(../images/icons/dollar.png); 
background-repeat: no-repeat; 
background-position: 2px 3px;
}

HTML:

<input id="icon" style="text-indent:17px;" type="text" placeholder="Username" />
Karat
sumber
3
Saya mendukung indentasi teks karena padding-kiri akan menambah lebar bidang dan akan keluar dari elemen induk.
Kostiantyn
1
mengapa Anda meletakkan style inline alih-alih di #icon css?
Wylliam Judd
@WylliamJudd Itu hanya untuk tujuan demonstrasi :)
Rust
mengapa Anda menggunakan id, bukan kelas?
majid savalanpour
9

Cara sederhana dan mudah untuk menempatkan Ikon di dalam input adalah dengan menggunakan properti posisi CSS seperti yang ditunjukkan dalam kode di bawah ini. Catatan: Saya telah menyederhanakan kode untuk tujuan kejelasan.

  1. Buat wadah di sekitar input dan ikon.
  2. Tetapkan posisi wadah sebagai relatif
  3. Tetapkan ikon sebagai posisi absolut. Ini akan menempatkan ikon relatif terhadap wadah di sekitarnya.
  4. Gunakan bagian atas, kiri, bawah, kanan untuk memposisikan ikon dalam wadah.
  5. Atur padding di dalam input agar teks tidak tumpang tindih ikon.

#input-container {
  position: relative;
}

#input-container > img {
  position: absolute;
  top: 12px;
  left: 15px;
}

#input-container > input {
  padding-left: 40px;
}
<div id="input-container">
  <img/>
  <input/>
</div>

Ryan Forte
sumber
1
Bersih dan sederhana, ya. Anda juga harus menghapus batas input dengan input { border: none; }dan menambahkan perbatasan #input-container { border: 1px solid #000; }agar terlihat seperti gambar di dalam dan sebenarnya bagian dari input.
Mario Werner
1
@MarioWerner dia mendorong gambar di dalam input, tidak perlu melakukan peretasan perbatasan, itulah keindahannya. Saya akan menggunakan ide itu.
The Fool
8
.icon{
background: url(1.jpg) no-repeat;
padding-left:25px;
}

tambahkan tag di atas ke dalam file CSS Anda dan gunakan kelas yang ditentukan.

Rafi Haidari
sumber
6

Ini bekerja untuk saya:

input.valid {
   border-color: #28a745;
   padding-right: 30px;
   background-image: url('https://www.stephenwadechryslerdodgejeep.com/wp-content/plugins/pm-motors-plugin/modules/vehicle_save/images/check.png');
   background-repeat: no-repeat;
   background-size: 20px 20px;
   background-position: right center;
}
<form>
<label for="name">Name</label>
<input class="valid" type="text" name="name" />
</form>

Gxzzin
sumber
gambar hilang saat pelengkapan otomatis pada chrome
neptune
Bagaimana Anda membuat gambar dapat diklik, misalnya jika menggunakan ikon "simpan"?
user460114
Ini bekerja untuk saya untuk aplikasi hybrid saya, saya baru saja membuat seluruh kotak input dapat diklik setelah memasukkan gambar.
shivam srivastava
5

Anda Bisa Coba ini: Bootstrap-4 Beta
https://www.codeply.com/go/W25zyByhec

<div class="container">
            <form>
                <div class="row">
                    <div class="input-group mb-3 col-sm-6">
                      <input type="text" class="form-control border-right-0" placeholder="Username" aria-label="Username" aria-describedby="basic-addon1">
                        <div class="input-group-prepend bg-white">
                            <span class="input-group-text border-left-0 rounded-right bg-white" id="basic-addon1"><i class="fas fa-search"></i></span>
                        </div>
                    </div>
                </div>
            </form>
        </div>





Hasan
sumber
4

Cukup gunakan properti latar belakang di CSS Anda.

<input id="foo" type="text" />

#foo
{
    background: url(/img/foo.png);
}
Dan Walker
sumber
4

Saya punya situasi seperti ini. Itu tidak berhasil karena background: #ebebeb;. Saya ingin meletakkan latar belakang pada bidang input dan properti itu terus-menerus muncul di bagian atas gambar latar belakang, dan saya tidak bisa melihat gambar! Jadi, saya memindahkan backgroundproperti itu ke atas background-imageproperti itu dan berhasil.

input[type='text'] {
    border: 0;
    background-image: url('../img/search.png');
    background-position: 9px 20px;
    background-repeat: no-repeat;
    text-align: center;
    padding: 14px;
    background: #ebebeb;
}

Solusi untuk kasus saya adalah:

input[type='text'] {
    border: 0;
    background: #ebebeb;
    background-image: url('../img/search.png');
    background-position: 9px 20px;
    background-repeat: no-repeat;
    text-align: center;
    padding: 14px;
}

Hanya untuk menyebutkan, border, paddingdan text-alignsifat-sifat yang tidak penting untuk solusi. Saya baru saja mereplikasi kode asli saya.

fantja
sumber
1
Ini super tua dan saya harap mungkin Anda sudah belajar sejak lebih dari setahun yang lalu, tetapi backgroundadalah nama properti singkatan yang Anda gunakan untuk mencakup semua properti latar sekaligus:, background: [color] [image url] [repeat] [position]dan itulah sebabnya warna Anda menimpa segalanya. Anda juga bisa membiarkannya di tempat dan mengganti nama properti menjadibackground-color
borbulon
@borbulon ya Anda benar. itu hampir selalu terbaik untuk menggunakan nama properti steno, sepenuhnya setuju tentang itu. Tetapi tujuan dari posting ini adalah untuk menunjukkan bahwa urutan properti kadang-kadang penting, dan aturan-aturan CSS 'kecil' itu bisa membuat frustrasi, terutama bagi pendatang baru dalam pengembangan.
fantja
1
Sepenuhnya setuju, tetapi intinya masih berdiri: backgroundadalah nama properti singkatan. Perbaikan yang lebih baik adalah dengan tidak menggunakan steno, tetapi gunakan background-coloruntuk properti warna (dengan asumsi Anda menginginkan warna dan gambar).
borbulon
3

Menggunakan dengan font-ikon

<input name="foo" type="text" placeholder="&#61447;">

ATAU

<input id="foo" type="text" />

#foo::before
{
  font-family: 'FontAwesome';
  color:red;
  position: relative;
  left: -5px;
  content: "\f007";    
}
Ali Göksel Bektaş
sumber
7
Tampaknya :: sebelumnya tidak dapat diterapkan elemen input.
Vishnja
1
 <label for="fileEdit">
    <i class="fa fa-cloud-upload">
    </i>
    <input id="fileEdit" class="hidden" type="file" name="addImg" ng-file-change="onImageChange( $files )" ng-multiple="false" accept="{{ contentType }}"/>
  </label>

Misalnya, Anda dapat menggunakan ini: label dengan input tersembunyi (ikon ada).

yazabara
sumber
1

gunakan kelas css ini untuk input Anda di awal, lalu sesuaikan sesuai:

    
 .inp-icon{
background: url(https://i.imgur.com/kSROoEB.png)no-repeat 100%;
background-size: 16px;
 }
<input class="inp-icon" type="text">

csandreas1
sumber
Anda tahu cara mengatur acara klik hanya untuk gambar ini.?
Arjun
0

Ini berfungsi untuk saya untuk kurang lebih bentuk standar:

  <button type="submit" value="Submit" name="ButtonType" id="whateveristheId" class="button-class">Submit<img src="/img/selectedImage.png" alt=""></button>
Yan D
sumber