순수한 의미 론적 HTML / CSS 솔루션
이 솔루션은 사전 제작 된 솔루션이 없어도 직접 구현할 수 있습니다. 또한 CSS로는 너무 쉽게 보이지 않으므로 많이 가르쳐 줄 것입니다.
이것이 당신이해야 할 일입니다.
확인란에는 고유 한 id
속성 이 있어야 합니다. 이를 통해 <label>
레이블의 for
-attribute를 사용하여 에 연결할 수 있습니다 .
예:
<input type="checkbox" id="myCheckbox1" />
<label for="myCheckbox1"><img src="http://someurl" /></label>
확인란을 라벨에 첨부하면 브라우저 동작이 트리거됩니다. 누군가 라벨 (또는 라벨 안의 이미지)을 클릭 할 때마다 확인란이 전환됩니다.
다음으로 예 display: none;
를 적용하여 확인란을 숨 깁니다 .
이제 남은 일은 label::before
의사 요소에 원하는 스타일을 설정 하는 것입니다 (시각적 확인란 대체 요소로 사용됨).
label::before {
background-image: url(../path/to/unchecked.png);
}
마지막으로 까다로운 단계에서 CSS의 :checked
의사 선택기를 사용하여 확인란을 선택하면 이미지를 변경합니다.
:checked + label::before {
background-image: url(../path/to/checked.png);
}
+
( 인접 형제 선택은 ) 당신이 유일한 직접 마크 업의 숨겨진 체크 박스를 따르는 것이 레이블을 변경합니다.
두 이미지를 스프라이트 맵에 넣고 이미지를 바꾸는 background-position
대신 변경 사항 만 적용하여 최적화 할 수 있습니다 .
물론 당신은 제대로 라벨을 배치하고 적용해야 display: block;
하고 올바른 설정 width
과 height
.
편집하다:
codepen 예를 들어 내가이 지시 한 후, 동일한 기술을 사용하여 작성하는 니펫을 대신 체크 박스 이미지를 사용하는 체크 박스의 교체는 CSS와 순수 완료 을 만들어 ::before
가지고 한 번 점검하는 라벨에 content: "✓";
. 둥근 테두리와 달콤한 전환을 추가하면 결과가 정말 좋습니다!
기술을 보여주고 확인란에 이미지가 필요없는 작동하는 코드 펜은 다음과 같습니다.
http://codepen.io/anon/pen/wadwpx
스 니펫의 동일한 코드는 다음과 같습니다.
ul {
list-style-type: none;
}
li {
display: inline-block;
}
input[type="checkbox"][id^="cb"] {
display: none;
}
label {
border: 1px solid #fff;
padding: 10px;
display: block;
position: relative;
margin: 10px;
cursor: pointer;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
label::before {
background-color: white;
color: white;
content: " ";
display: block;
border-radius: 50%;
border: 1px solid grey;
position: absolute;
top: -5px;
left: -5px;
width: 25px;
height: 25px;
text-align: center;
line-height: 28px;
transition-duration: 0.4s;
transform: scale(0);
}
label img {
height: 100px;
width: 100px;
transition-duration: 0.2s;
transform-origin: 50% 50%;
}
:checked+label {
border-color: #ddd;
}
:checked+label::before {
content: "✓";
background-color: grey;
transform: scale(1);
}
:checked+label img {
transform: scale(0.9);
box-shadow: 0 0 5px #333;
z-index: -1;
}
<ul>
<li><input type="checkbox" id="cb1" />
<label for="cb1"><img src="https://picsum.photos/seed/1/100" /></label>
</li>
<li><input type="checkbox" id="cb2" />
<label for="cb2"><img src="https://picsum.photos/seed/2/100" /></label>
</li>
<li><input type="checkbox" id="cb3" />
<label for="cb3"><img src="https://picsum.photos/seed/3/100" /></label>
</li>
<li><input type="checkbox" id="cb4" />
<label for="cb4"><img src="https://picsum.photos/seed/4/100" /></label>
</li>
</ul>