ใช้รูปภาพแทนปุ่มตัวเลือก


167

หากฉันมีกลุ่มวิทยุพร้อมปุ่ม:

ภาพ 1

... ฉันจะแสดงเฉพาะภาพในตัวเลือกที่เลือกแทนปุ่มได้อย่างไร

ป้อนคำอธิบายรูปภาพที่นี่


เราสามารถดูลิงค์สดหรือ jsFiddle สำหรับรหัสของคุณได้หรือไม่?
Nitesh

3
สร้างชุดตัวเลือกและวางไว้ใน div ที่ซ่อนอยู่ เมื่อคลิกภาพให้ตั้งค่าที่ปุ่มตัวเลือกที่เลือกไว้หมายถึงเมื่อคลิกภาพแรกให้ตั้งค่าปุ่มตัวเลือกแรกของคุณที่เลือกไว้และคล้ายกันสำหรับปุ่มสองปุ่มอื่น ๆ หากคุณไม่ได้รับฉันสามารถอธิบายผ่านรหัสเกินไป
Chiragit007

ไม่สามารถใช้งานได้ที่นี่คุณสามารถแนะนำstackoverflow.com/questions/42736745/…
Code Guy

คำตอบ:


387
  • ห่อวิทยุและรูปภาพเข้า<label>
  • ซ่อนปุ่มตัวเลือก (อย่าใช้display:noneหรือvisibility:hiddenเนื่องจากจะส่งผลต่อการเข้าถึง)
  • กำหนดเป้าหมายภาพถัดจากวิทยุที่ซ่อนอยู่โดยใช้ตัวเลือกพี่น้องที่อยู่ติดกัน +

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

อย่าลืมเพิ่มคลาสในป้ายกำกับของคุณและใน CSS ใช้คลาสนั้นแทน


สไตล์และภาพเคลื่อนไหวที่กำหนดเอง

นี่คือรุ่นขั้นสูงโดยใช้<i>องค์ประกอบและ:afterหลอก:

วิทยุและช่องทำเครื่องหมาย 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 สำหรับตัวเลือกหลอกฉันคิดว่าฉันเคยใช้ JavaScript ในอดีตเพื่อตรวจสอบตัวเลือก! ที่จะสอนฉัน ...
ZIK

3
การมองเห็นที่ซ่อนอยู่หมายความว่ามันไม่สามารถคลิกได้และตำแหน่งที่แน่นอนนำมันออกจากผังเอกสาร
99 ปัญหา - ไวยากรณ์ไม่ใช่หนึ่ง

1
นี่คือคำตอบที่ยอดเยี่ยม ฉันขอเพิ่มที่ทำงานเดียวกันกับtype="checkbox"เช่นกัน
Wtower

ตกลงนี่เป็นสิ่งที่ดี .. ใช้งานได้ดีเห็นได้ชัดว่าทำงานได้บน IE เช่นกัน แต่จริงๆแล้วมันไม่ใช่ ภาพทำงานได้อย่างถูกต้อง แต่เมื่อส่งแบบฟอร์มจะไม่มีการเลือกภาพขนาดย่อ ฉันเดาว่าฉันใช้ IE ใหม่ที่มาพร้อมกับ Win 8.1 ความคิดใด ๆ
Junaid Rehman

3
สายไปงานเลี้ยง แต่ต้องระวังในเรื่องนี้ Visibility:hiddenจะซ่อนอินพุตจากโปรแกรมอ่านหน้าจอและไม่ต้องกังวลกับจุดการเข้าถึง
DPac

100

ตัวอย่าง:

หัวขึ้น! วิธีนี้เป็น CSS เท่านั้น

ตัวเลือกบัตรเครดิต, MasterCard ในการสาธิต modded ถูกโฮเวอร์

ฉันขอแนะนำให้คุณใช้ประโยชน์จาก CSS3 ในการทำเช่นนั้นโดยกดปุ่มตัวเลือกอินพุตตามค่าเริ่มต้นด้วยกฎ CSS3:

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

ฉันเพิ่งทำตัวอย่างไม่กี่วันที่ผ่านมา


1
มันเยี่ยมมาก! ผมแบบบูรณาการไปยังแบบฟอร์ม ASP.NET และมันทำงานเช่นเสน่ห์ :)
กัส

ตัวอย่างนี้ไม่สามารถใช้งานได้ใน Firefox 49.0.2 ภายใต้ XUbuntu 16.04.1
Sergey Kudriavtsev

@SergeyKudriavtsev อาจต้องการรหัสและอัปเดต (คำตอบนี้มาจาก 2013) โชคดีที่มีรหัสนี้เปิดให้ทุกคนปรับปรุงได้ ฉันจะดูมันในไม่ช้า ไชโย
Richard Cotrina

ทำงานได้ดีสำหรับฉันใน Firefox 60, Windows 10
Trevor

ฉันทำงานให้กับใบหน้าที่ยิ้มได้ 3 ชุด ตอนนี้ฉันต้องมีหลายแถวในแบบฟอร์มเดียวโดยแต่ละชุดมีหน้ายิ้มของตัวเอง ปัญหาของฉันคือเมื่อมีการเปลี่ยนแปลงแถวหนึ่งพวกเขาทั้งหมดเปลี่ยน ความคิดเห็นใดที่จำเป็นต้องมีการแก้ไขเพื่อให้บรรลุส่วนนี้
dave317

19

คุณสามารถใช้ CSS เพื่อสิ่งนั้นได้

HTML (สำหรับการสาธิตเท่านั้นมันสามารถปรับแต่งได้)

<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

ทำให้ปุ่มตัวเลือกถูกซ่อนไว้และเมื่อคลิกที่ภาพให้เลือกโดยใช้ JavaScript และจัดรูปแบบภาพของคุณเพื่อให้มีลักษณะเหมือนที่เลือก นี่คือมาร์กอัป -

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

และ 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

เพียงใช้คลาสเพื่อซ่อนบางอย่าง ... ขึ้นอยู่กับ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

นี่คือ jQuery UI solution ที่เรียบง่ายตามตัวอย่างที่นี่:

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

รหัสที่แก้ไข:

<!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 ดูแลพื้นหลังของภาพเพื่อให้คุณรู้ว่าปุ่มใดถูกเลือก

ระวัง: หากคุณต้องการตั้งค่าปุ่มให้ทำเครื่องหมายหรือไม่เลือกผ่าน Javascript คุณต้องเรียกใช้ฟังก์ชันรีเฟรช:

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

0

สามารถวางรูปภาพแทนปุ่มตัวเลือกได้โดยใช้องค์ประกอบป้ายกำกับและขยาย

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

ควรซ่อนปุ่มตัวเลือก

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

สามารถกำหนดรูปภาพในแท็ก span

.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');
}

ในการเปลี่ยนภาพเมื่อคลิกปุ่มตัวเลือกให้เพิ่มสถานะที่เลือกไว้ในแท็กอินพุต

.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');
}

หากคุณมีข้อสงสัยประการใดโปรดดูที่ลิงค์ต่อไปนี้ขณะที่ผมได้นำวิธีการแก้ปัญหาจากด้านล่างบล็อก http://frontendsupport.blogspot.com/2018/06/cool-radio-buttons-with-images.html


0

นี่คือตัวอย่างที่ง่ายมาก

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>

สาธิต: http://jsfiddle.net/La8wQ/2471/

ตัวอย่างนี้ใช้เคล็ดลับนี้: https://css-tricks.com/the-checkbox-hack/

ฉันทดสอบกับ: chrome, firefox, safari

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.