순수 CSS 체크 박스 이미지 교체


78

테이블에 체크 박스 목록이 있습니다. (행에있는 여러 CB 중 하나)

 <tr><td><input type="checkbox" class="custom_image" value="1" id="CB1" /><label for='CB1'>&nbsp;</label></td></tr>
 <tr><td><input type="checkbox" class="custom_image" value="2" id="CB2" /><label for='CB2'>&nbsp;</label></td></tr>
 <tr><td><input type="checkbox" class="custom_image" value="3" id="CB3" /><label for='CB3'>&nbsp;</label></td></tr>
 <tr><td><input type="checkbox" class="custom_image" value="4" id="CB4" /><label for='CB4'>&nbsp;</label></td></tr>

확인란 이미지를 한 쌍의 사용자 지정 켜기 / 끄기 이미지로 바꾸고 싶습니다. CSS로이 작업을 수행하는 방법에 대해 더 잘 이해하고있는 사람이 있는지 궁금합니다.

이 "CSS 닌자"튜토리얼을 찾았지만 조금 복잡하다는 것을 인정해야합니다. http://www.thecssninja.com/css/custom-inputs-using-css

내가 말할 수있는 한, 의사 클래스를 사용할 수 있습니다.

 td:not(#foo) > input[type=checkbox] + label
 {
     background: url('/images/off.png') 0 0px no-repeat;
     height: 16px;
     padding: 0 0 0 0px;
 }

내 기대는 위의 CSS를 추가하면 확인란이 적어도 기본적으로 OFF 상태로 이미지를 표시하고 다음을 추가하여 ON을 얻는 것입니다.

 td:not(#foo) > input[type=checkbox]:checked + label {
     background: url('/images/on.png') 0 0px no-repeat;
 }

불행히도 어딘가에서 중요한 단계를 놓친 것 같습니다. 현재 설정과 일치하도록 사용자 지정 CSS3 선택기 구문을 사용하려고 시도했지만 누락 된 것이 있어야합니다 (중요한 경우 이미지 크기는 16x16 임).

http://www.w3.org/TR/css3-selectors/#checked

편집 : 튜토리얼에서 그가 입력 자체가 아닌 레이블에 이미지 변경 사항을 적용하는 내용이 누락되었습니다. 페이지의 확인란 결과에 대해 예상되는 스왑 이미지를 여전히 얻지 못하고 있지만 더 가깝다고 생각합니다.


이 작업을 매우 잘 수행하는 Uniform 이라는 jQuery 플러그인 이 있습니다.
Matt Sherman

슬프게도 우리는 프로토 타입을 사용하고 있으며 변경할 수 없습니다 (효과에 대한 노크가 심각한 문제가 될 것입니다). 프로토 타입 플러그인 (멋진 양식)을 찾고 싶습니다.하지만 제 "개인적인"목표의 일부는 비 -js 방법을 사용하여 작동하도록하는 것입니다. 나는 그것을 할 수 있다는 것을 안다 (튜토리얼 참조) 나는 가까이있는 것처럼 느낀다 . 그리고 그것을하는 방법을 아는 것이 미래의 유사한 작업에 대한 나의 능력을 향상시킬 것이라고 생각한다. 분명히 스퀘어 페그 라운드 홀이 불가능하다면 포기하고 어떤 종류의 JS 트릭으로 이동할 것입니다.
Alex C

1
잠깐 — 이미지가없는 CSS 또는 자바 스크립트가없는 CSS 에서처럼 "순수한 CSS"?
arbales

오- "semi pure"를 의미했습니다. 당장은 확실히 이미지를 사용하고 있지만 "data / mime"태그를 사용하여 이미지를 CSS 안에 넣을 수있을 것 같습니다. (나는 최근에 그에 대한 기사를 본 순간에 정확한 위치 회피한다 나를 생각)
알렉스 C

3
잠깐, 자바 스크립트 및 / 또는 추가 DOM 노드가있는 CSS에서와 같이 "순수 CSS"?
canon

답변:


124

당신은 이미 가깝습니다. 확인란을 숨기고 스타일을 지정하는 레이블과 연결하십시오.input[checkbox] + label

전체 코드 : http://gist.github.com/592332

JSFiddle : http://jsfiddle.net/4huzr/


3
이것은 label누락 될 수있는 요소에 의존합니다 . 아래 내 대답을 참조하십시오.
Mo Valipour 2012 년

대신 불투명도를 0으로 설정해도 탭 중지 동작을 얻을 수 있다고 생각합니다. 그 tho에 100 %가 아닙니다.
gdbj 2015 년

이름이없는과에 대한 jsfiddle.net/ajshres/4huzr/2486 아약스에 사용할 때 편리 할 수있는 큰 테이블을 위해 사용하는 경우
아제 고팔 쉬 레스타를

@Valipour 이의 제기가 거부되었습니다. 체크 박스에 라벨이 없으면 체크 박스에 라벨을 붙입니다. 이는 동일한 급습으로 UI 및 WAG 문제를 해결합니다.
j4k3 j4k3

40

CSS3를 선택하면 자바 스크립트를 사용할 필요가없는 것 같습니다.

:before선택기 를 사용 하면 두 줄의 CSS에서이 작업을 수행 할 수 있습니다. (관련 스크립트 없음).

이 접근 방식의 또 다른 장점은 <label>태그에 의존하지 않고 누락 된 경우에도 작동한다는 것입니다.

참고 : CSS3를 지원하지 않는 브라우저에서는 체크 박스가 정상적으로 보입니다. (구버전과 호환되는).

input[type=checkbox]:before { content:""; display:inline-block; width:12px; height:12px; background:red; }
input[type=checkbox]:checked:before { background:green; }​

여기에서 데모를 볼 수 있습니다 : http://jsfiddle.net/hqZt6/1/

그리고 이것은 이미지와 함께 :

http://jsfiddle.net/hqZt6/6/


8
이 모습은 매우 슬프게도, 약속하지만, 파이어 폭스 14.0.1 Mac에서 작동하지 않는 것
머레이 스미스

이미지로 이것을 시도했지만 이미지 뒤에 원래 확인란이 표시되므로 작거나 이상한 모양의 이미지에는 적합하지 않습니다.
Jimbali

7
OK 난 그냥이에있는 확인란을 설정하여 고정 될 수 있음을 발견 visibility: hidden하고, :beforevisibility: visible. 나는 이것이 이전 버전과의 호환성을 깨뜨린다고 가정합니다.
Jimbali

3
jsfiddles, 그들은 아무것도하지 않습니다. 일반 체크 박스로 표시됩니다. Firefox 27.
raveren 2014

3
크롬 35에서 작동하지만 파이어 폭스 (30) : 윈도우 (죄송합니다, 직장에서 그것을 사용해야합니다)와 동일
마이클 Scheper

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