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


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>


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.


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


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

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>


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");

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


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.