라디오 버튼 대신 이미지 사용


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에서도 잘 작동하지만 실제로는 그렇지 않다. 이미지는 올바르게 작동하지만 양식을 제출할 때 축소판 그림을 선택할 수 없습니다. Win 8.1과 함께 제공되는 새로운 IE를 사용하고 있다고 생각합니다. 어떤 생각?
Junaid Rehman

3
파티에 늦었지만 조심하십시오. Visibility:hidden화면 판독기에서 입력을 숨기고 접근성 관점에서 큰 것은 없습니다.
DPac

100

예:

헤즈 업! 이 솔루션은 CSS 전용입니다.

신용 카드 선택기 인 Modded 데모의 MasterCard가 호버링됩니다.

CSS3 규칙 으로 기본 입력 라디오 버튼을 숨겨 CSS3를 활용하는 것이 좋습니다 .

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

며칠 전에 예를 들었습니다.


1
대단 했어! ASP.NET 양식에 통합했으며 매력처럼 작동했습니다.
Gus

이 예제는 XUbuntu 16.04.1의 Firefox 49.0.2에서 작동하지 않습니다.
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 솔루션입니다.

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/

크롬, 파이어 폭스, 사파리에서 테스트했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.