Gunakan gambar daripada tombol radio

167

Jika saya memiliki grup radio dengan tombol:

Gambar 1

... bagaimana saya bisa hanya menampilkan gambar dalam opsi pilih alih-alih tombol, mis

masukkan deskripsi gambar di sini

Vignesh Pichamani
sumber
Bisakah kita melihat tautan langsung atau jsFiddle untuk kode Anda?
Nitesh
3
Buat set tombol radio dan letakkan di div tersembunyi. Pada klik gambar mengatur bahwa tombol radio tertentu diperiksa berarti pada klik gambar pertama mengatur tombol radio pertama Anda diperiksa dan sama untuk dua lainnya. Jika Anda tidak mengerti, saya juga bisa menjelaskannya melalui kode.
Chiragit007
Ini tidak berfungsi di sini dapat Anda sarankan stackoverflow.com/questions/42736745/…
Code Guy

Jawaban:

387
  • Bungkus radio dan gambar di<label>
  • Sembunyikan tombol radio (Jangan gunakan display:noneatau visibility:hiddenkarena itu akan mempengaruhi aksesibilitas)
  • Targetkan gambar di sebelah radio yang disembunyikan menggunakan pemilih saudara yang berdekatan +

/* HIDE RADIO */
[type=radio] { 
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}

/* IMAGE STYLES */
[type=radio] + img {
  cursor: pointer;
}

/* CHECKED STYLES */
[type=radio]:checked + img {
  outline: 2px solid #f00;
}
<label>
  <input type="radio" name="test" value="small" checked>
  <img src="http://placehold.it/40x60/0bf/fff&text=A">
</label>

<label>
  <input type="radio" name="test" value="big">
  <img src="http://placehold.it/40x60/b0f/fff&text=B">
</label>

Jangan lupa untuk menambahkan kelas ke label Anda dan di CSS gunakan kelas itu sebagai gantinya.


Gaya dan animasi khusus

Ini versi lanjutan menggunakan <i>elemen dan :afterpseudo:

Radio dan kotak centang khusus CSS

body{color:#444;font:100%/1.4 sans-serif;}


/* CUSTOM RADIO & CHECKBOXES
   http://stackoverflow.com/a/17541916/383904 */
.rad,
.ckb{
  cursor: pointer;
  user-select: none;
  -webkit-user-select: none;
  -webkit-touch-callout: none;
}
.rad > input,
.ckb > input{ /* HIDE ORG RADIO & CHECKBOX */
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}
/* RADIO & CHECKBOX STYLES */
/* DEFAULT <i> STYLE */
.rad > i,
.ckb > i{ 
  display: inline-block;
  vertical-align: middle;
  width:  16px;
  height: 16px;
  border-radius: 50%;
  transition: 0.2s;
  box-shadow: inset 0 0 0 8px #fff;
  border: 1px solid gray;
  background: gray;
}
/* CHECKBOX OVERWRITE STYLES */
.ckb > i {
  width: 25px;
  border-radius: 3px;
}
.rad:hover > i{ /* HOVER <i> STYLE */
  box-shadow: inset 0 0 0 3px #fff;
  background: gray;
}
.rad > input:checked + i{ /* (RADIO CHECKED) <i> STYLE */
  box-shadow: inset 0 0 0 3px #fff;
  background: orange;
}
/* CHECKBOX */
.ckb > input + i:after{
  content: "";
  display: block;
  height: 12px;
  width:  12px;
  margin: 2px;
  border-radius: inherit;
  transition: inherit;
  background: gray;
}
.ckb > input:checked + i:after{ /* (RADIO CHECKED) <i> STYLE */
  margin-left: 11px;
  background:  orange;
}
<label class="rad">
  <input type="radio" name="rad1" value="a">
  <i></i> Radio 1
</label>
<label class="rad">
  <input type="radio" name="rad1" value="b" checked>
  <i></i> Radio 2
</label>

<br>

<label class="ckb">
  <input type="checkbox" name="ckb1" value="a" checked>
  <i></i> Checkbox 1
</label>
<label class="ckb">
  <input type="checkbox" name="ckb2" value="b">
  <i></i> Checkbox 2
</label>

Roko C. Buljan
sumber
10
+1 untuk pemilih semu, saya pikir saya telah menggunakan JavaScript di masa lalu untuk memeriksa yang dipilih! Itu akan mengajari saya ...
zik
3
visibilitas disembunyikan berarti tidak dapat diklik, dan posisi absolut mengeluarkannya dari aliran dokumen
99 Masalah - Sintaksis bukan satu
1
Ini jawaban yang sangat bagus. Bolehkah saya menambahkan bahwa hal yang sama juga berfungsi type="checkbox".
Wtower
ok ini bagus .. berfungsi dengan baik, ternyata bekerja di IE juga, tetapi sebenarnya tidak. gambar berperilaku dengan benar tetapi ketika formulir dikirimkan, tidak ada pilihan thumbnail. Saya kira saya menggunakan IE baru yang datang dengan Win 8.1. Ada ide?
Junaid Rehman
3
Terlambat ke pesta, tapi hati-hati dengan ini. Visibility:hiddenakan menyembunyikan input dari pembaca layar dan tidak, tidak besar dari sudut pandang aksesibilitas.
DPac
100

Contoh:

Kepala! Solusi ini hanya untuk CSS.

Selektor kartu kredit, MasterCard pada demo modded digantung.

Saya sarankan Anda memanfaatkan CSS3 untuk melakukan itu, dengan menyembunyikan tombol radio masukan default dengan aturan CSS3:

.options input{
    margin:0;padding:0;
    -webkit-appearance:none;
       -moz-appearance:none;
            appearance:none;
}

Saya baru saja membuat contoh beberapa hari yang lalu.

Richard Cotrina
sumber
1
Ini luar biasa! Saya mengintegrasikannya ke Formulir ASP.NET dan bekerja seperti pesona :)
Gus
Contoh ini tidak berfungsi di Firefox 49.0.2 di bawah XUbuntu 16.04.1
Sergey Kudriavtsev
@SergeyKudriavtsev mungkin kebutuhan dan pembaruan kode (jawaban ini dari 2013). Untungnya kode ini terbuka bagi siapa saja untuk memperbaikinya. Saya akan memeriksanya segera. Bersulang.
Richard Cotrina
Bekerja dengan baik untuk saya di Firefox 60, Windows 10.
Trevor
Saya memiliki ini berfungsi untuk satu set 3 wajah tersenyum. Sekarang saya perlu memiliki beberapa baris pada satu formulir, masing-masing dengan set wajah tersenyum mereka sendiri. Masalah saya adalah ketika satu baris diubah, mereka semua berubah. Adakah ide bagian mana yang perlu dimodifikasi untuk mencapai ini?
dave317
19

Anda dapat menggunakan CSS untuk itu.

HTML (hanya untuk demo, dapat disesuaikan)

<div class="button">
    <input type="radio" name="a" value="a" id="a" />
    <label for="a">a</label>
</div>
<div class="button">
    <input type="radio" name="a" value="b" id="b" />
    <label for="b">b</label>
</div>
<div class="button">
    <input type="radio" name="a" value="c" id="c" />
    <label for="c">c</label>
</div>
...

CSS

input[type="radio"] {
    display: none;
}
input[type="radio"]:checked + label {
    border: 1px solid red;
}

jsFiddle

Fracsi
sumber
6

Biarkan tombol radio tetap tersembunyi, dan pada mengklik gambar, pilih menggunakan JavaScript dan gaya gambar Anda sehingga terlihat seperti dipilih. Ini markupnya -

<div id="radio-button-wrapper">
    <span class="image-radio">
        <input name="any-name" style="display:none" type="radio"/>
        <img src="...">
    </span>
    <span class="image-radio">
        <input name="any-name" style="display:none" type="radio"/>
        <img src="...">
    </span>
</div>

dan JS

 $(".image-radio img").click(function(){
     $(this).prev().attr('checked',true);
 })

CSS

span.image-radio input[type="radio"]:checked + img{
    border:1px solid red;
}
Moazzam Khan
sumber
4

Hanya menggunakan kelas untuk menyembunyikan beberapa ... berdasarkan https://stackoverflow.com/a/17541916/1815624

/* HIDE RADIO */
.hiddenradio [type=radio] { 
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}

/* IMAGE STYLES */
.hiddenradio [type=radio] + img {
  cursor: pointer;
}

/* CHECKED STYLES */
.hiddenradio [type=radio]:checked + img {
  outline: 2px solid #f00;
}
<div class="hiddenradio">
<label>
  <input type="radio" name="test" value="small" checked>
  <img src="http://placehold.it/40x60/0bf/fff&text=A">
</label>

<label>
  <input type="radio" name="test" value="big">
  <img src="http://placehold.it/40x60/b0f/fff&text=B">
</label>
</div>

<div class="">
<label>
  <input type="radio" name="test" value="small" checked>
  <img src="http://placehold.it/40x60/0bf/fff&text=A">
</label>

<label>
  <input type="radio" name="test" value="big">
  <img src="http://placehold.it/40x60/b0f/fff&text=B">
</label>
</div>

CrandellWS
sumber
1

Berikut ini adalah solusi jQuery UI sederhana berdasarkan contoh di sini:

http://jqueryui.com/button/#radio

Kode yang dimodifikasi:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>jQuery UI Button - Radios</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.11.3/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.11.3/jquery-ui.js"></script>
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script>
  $(function() {
    $( "#radio" ).buttonset();
  });
  </script>
</head>
<body>

<form>
  <div id="radio">
    <input type="radio" id="radio1" name="radio"><label for="radio1"><img src="image1.gif" /></label>
    <input type="radio" id="radio2" name="radio" checked="checked"><label for="radio2"><img src="image2.gif" /></label>
    <input type="radio" id="radio3" name="radio"><label for="radio3"><img src="image3.gif" /></label>
  </div>
</form>

</body>
</html>

jQueryUI menangani latar belakang gambar sehingga Anda tahu tombol mana yang diperiksa.

Hati-hati: Jika Anda ingin mengatur tombol untuk dicentang atau tidak dicentang melalui Javascript, Anda harus memanggil fungsi refresh:

        $('#radio3').prop('checked', true).button("refresh");
atmelino
sumber
0

Gambar dapat ditempatkan di tempat tombol radio dengan menggunakan label dan elemen span.

   <div class="customize-radio">
        <label>Favourite Smiley</label><br>
        <label for="hahaha">
        <input type="radio" name="smiley" id="hahaha">
        <span class="haha-img"></span>
        HAHAHA
        </label>
        <label for="kiss">
        <input type="radio" name="smiley" id="kiss">
        <span class="kiss-img"></span>
        Kiss
        </label>
        <label for="tongueOut">
        <input type="radio" name="smiley" id="tongueOut">
        <span class="tongueout-img"></span>
        TongueOut
        </label>
    </div>

Tombol radio harus disembunyikan,

.customize-radio label > input[type = 'radio'] {
    visibility: hidden;
    position: absolute;
}

Gambar dapat diberikan dalam tag rentang,

.customize-radio label > input[type = 'radio'] ~ span{
    cursor: pointer;
    width: 27px;
    height: 24px;
    display: inline-block;
    background-size: 27px 24px;
    background-repeat: no-repeat;
}
.haha-img {
    background-image: url('hahabefore.png');
}

.kiss-img{
    background-image: url('kissbefore.png');
}
.tongueout-img{
    background-image: url('tongueoutbefore.png');
}

Untuk mengubah gambar dengan mengklik tombol radio, tambahkan status yang dicentang ke tag input,

.customize-radio label > input[type = 'radio']:checked ~ span.haha-img{
     background-image: url('haha.png');
}
.customize-radio label > input[type = 'radio']:checked ~ span.kiss-img{
    background-image: url('kiss.png');
}
.customize-radio label > input[type = 'radio']:checked ~ span.tongueout-img{
        background-image: url('tongueout.png');
}

Jika Anda memiliki pertanyaan, Lihat tautan berikut, Karena saya telah mengambil solusi dari blog di bawah ini, http://frontendsupport.blogspot.com/2018/06/cool-radio-buttons-with-images.html

Pemula
sumber
0

Ini adalah contoh yang sangat sederhana

input[type="radio"]{
   display:none;
}

input[type="radio"] + label
{
    background-image:url(http://www.clker.com/cliparts/c/q/l/t/l/B/radiobutton-unchecked-sm-md.png);
    background-size: 100px 100px;
    height: 100px;
    width: 100px;
    display:inline-block;
    padding: 0 0 0 0px;
    cursor:pointer;
}

input[type="radio"]:checked + label
{
    background-image:url(http://www.clker.com/cliparts/M/2/V/6/F/u/radiobutton-checked-sm-md.png);
}
<div>
  <input type="radio" id="shipadd1" value=1 name="address" />
  <label for="shipadd1"></label>
  value 1
</div>

<div>
  <input type="radio" id="shipadd2" value=2 name="address" />
  <label for="shipadd2"></label>
  value 2
</div>

Demo: http://jsfiddle.net/La8wQ/2471/

Contoh ini berdasarkan trik ini: https://css-tricks.com/the-checkbox-hack/

Saya mengujinya di: chrome, firefox, safari

Kamil Kiełczewski
sumber