2019 년 기준 답변 :
가장 좋은 방법은 (실제로 유일한 방법 *)는 실제 시뮬레이션 클릭 (단지 요소를 유혹하거나하지 않는 경우, 요소가 활동하기보다는 단지 CSS를 사용하여 이벤트 와 mouseUp 체크 박스 해킹을 사용하는 것입니다). 레이블의 속성을 통해 요소에 a label
를 첨부하여 작동 합니다.<input type="checkbox">
for=""
이 기능은 광범위한 브라우저를 지원합니다 ( :checked
의사 클래스는 IE9 +입니다).
에 같은 값을 적용 <input>
의 ID 속성과 동반 <label>
의 for=""
속성, 당신은와 클릭의 라벨 리 · 스타일로 브라우저 말할 수있는 :checked
의사 클래스는, 사실 덕분에 라벨을 클릭하면 확인할 것을하고 선택을 취소합니다 "관련된" <input type="checkbox">
.
* IE7 +의 의사 클래스 :active
또는 :focus
의사 클래스 를 통해 "선택된"이벤트를 시뮬레이션 할 수 있습니다 (예 : 일반적으로 50px
넓은 버튼 의 경우 너비를 변경할 수 있음 :) active
. #btnControl:active { width: 75px; }
그러나 실제 "클릭"이벤트는 아닙니다. 요소가 선택 될 때마다 (예 : Tab키보드 로 빙하는 등) "실제" 이며, 실제 클릭 이벤트와는 약간 다르며 일반적으로 동작을 실행합니다 mouseUp
.
확인란 해킹의 기본 데모 (요청하는 기본 코드 구조) :
label {
display: block;
background: lightgrey;
width: 100px;
height: 100px;
}
#demo:checked + label {
background: blue;
color: white;
}
<input type="checkbox" id="demo"/>
<label for="demo">I'm a square. Click me.</label>
여기에 마크 업 입력 직후 레이블을 배치했습니다. 이것은 내가 사용할 수 있도록 인접한 형제 선택기 ( +키)를 사용하여 내 #demo
확인란 바로 뒤에있는 레이블 만 선택할 수 있습니다. :checked
의사 클래스가 확인란에 적용 되므로#demo:checked + label
확인란을 선택하는 경우에만 적용됩니다.
클릭시 이미지 크기를 조정하는 데모는 다음과 같습니다.
#btnControl {
display: none;
}
#btnControl:checked + label > img {
width: 70px;
height: 74px;
}
<input type="checkbox" id="btnControl"/>
<label class="btn" for="btnControl"><img src="http://placekitten.com/200/140" id="btnLeft" /></label>
그 존재가 말한다면, 거기 이다 나쁜 소식. 라벨은 한 번에 하나의 양식 컨트롤 연결할 수 있으므로 <label></label>
태그 안에 버튼을 놓아 하루 만 호출하면 안됩니다 . 그러나 우리 는 할 수 있습니다 레이블 보이게하는 방법과 HTML 버튼의 모양과 동작합니다에 비슷한 행동하는 일부 CSS를 사용합니다.
원하는 것 이상으로 버튼 클릭 효과를 모방하는 데모 :
#btnControl {
display: none;
}
.btn {
width: 60px;
height: 20px;
background: silver;
border-radius: 5px;
padding: 1px 3px;
box-shadow: 1px 1px 1px #000;
display: block;
text-align: center;
background-image: linear-gradient(to bottom, #f4f5f5, #dfdddd);
font-family: arial;
font-size: 12px;
line-height:20px;
}
.btn:hover {
background-image: linear-gradient(to bottom, #c3e3fa, #a5defb);
}
.btn:active {
margin-left: 1px 1px 0;
box-shadow: -1px -1px 1px #000;
outline: 1px solid black;
-moz-outline-radius: 5px;
background-image: linear-gradient(to top, #f4f5f5, #dfdddd);
}
#btnControl:checked + label {
width: 70px;
height: 74px;
line-height: 74px;
}
<input type="checkbox" id="btnControl"/>
<label class="btn" for="btnControl">Click me!</label>
이 데모에서 CSS의 대부분은 레이블 요소를 스타일링하기위한 것입니다. 실제로 버튼 이 필요하지 않은 경우 없고 오래된 요소로 충분하다면 위의 두 번째 데모와 마찬가지로이 데모에서 거의 모든 스타일을 제거 할 수 있습니다.
또한 거기에 접두사 속성이 하나 있음을 알 수 있습니다 -moz-outline-radius
. 얼마 전 모질라는이 비 특정 속성을 Firefox에 추가했지만, WebKit의 사람들은 불행히도 추가하지 않을 것이라고 결정했습니다 . 따라서이 CSS 라인은 Firefox를 사용하는 사람들을위한 점진적인 향상이라고 생각하십시오.
:active
마우스가 다운 된 상태에서 작동합니다. 수행하려는 작업에 따라 CSS4 pseudo-class 사용하여 작동시킬 수 있습니다:target
.