ตอบ ณ ปี 2562:
วิธีที่ดีที่สุด (จริง ๆ แล้วเป็นวิธีเดียว *) ในการจำลองเหตุการณ์การคลิกจริงโดยใช้ CSS เท่านั้น (แทนที่จะวางไว้บนองค์ประกอบหรือทำให้องค์ประกอบใช้งานอยู่ซึ่งคุณไม่มีmouseUp ) คือการใช้ช่องทำเครื่องหมายแฮ็ค มันทำงานได้โดยการแนบองค์ประกอบlabel
ไปยัง<input type="checkbox">
องค์ประกอบผ่านfor=""
คุณสมบัติของฉลาก
ฟีเจอร์นี้รองรับเบราว์เซอร์ในวงกว้าง ( :checked
หลอกระดับคือ IE9 +)
สมัครค่าเดียวกันไปยัง<input>
's แอตทริบิวต์รหัสและมาพร้อมกับ<label>
' s for=""
แอตทริบิวต์และคุณสามารถบอกเบราว์เซอร์ใหม่สไตล์ฉลากบนคลิกที่:checked
หลอกชั้นขอบคุณความจริงที่ว่าคลิกที่ป้ายจะตรวจสอบและยกเลิก <input type="checkbox">
"ที่เกี่ยวข้อง"
* คุณสามารถจำลอง "เลือก" เหตุการณ์ผ่าน:active
หรือ:focus
หลอกชั้นใน 7 + (เช่นปุ่มที่ปกติ50px
กว้างคุณสามารถเปลี่ยนความกว้างในขณะที่active
: #btnControl:active { width: 75px; }
) แต่ผู้ที่ไม่เป็นความจริง "คลิก" เหตุการณ์ที่เกิดขึ้น พวกเขาจะ "อยู่" ตลอดเวลาที่องค์ประกอบที่จะถูกเลือก (เช่นโดยTabBing กับแป้นพิมพ์ของคุณ) ซึ่งเป็นที่แตกต่างกันเล็ก ๆ น้อย ๆ จากเหตุการณ์คลิกจริงซึ่ง fires ดำเนินการบน - โดยทั่วไป 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>
แท็กและเรียกมันต่อวันได้ อย่างไรก็ตามเราสามารถใช้ CSS บางอย่างเพื่อทำให้ป้ายกำกับดูและทำงานใกล้เคียงกับลักษณะของปุ่ม HTML ที่มีลักษณะและการทำงาน
การสาธิตเพื่อเลียนแบบเอฟเฟกต์คลิกปุ่มด้านบนและเหนือสิ่งที่คุณขอ:
#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
. เมื่อครู่กลับ Mozilla ได้เพิ่มคุณสมบัติที่ไม่ใช่สเป็กอันน่าทึ่งนี้ให้กับ Firefox แต่ผู้คนที่ WebKit ตัดสินใจว่าพวกเขาจะไม่เพิ่มมันเข้าไป ดังนั้นให้พิจารณาบรรทัด CSS นั้นเป็นเพียงการปรับปรุงที่ก้าวหน้าสำหรับผู้ที่ใช้ Firefox
:active
ทำงานได้ในขณะที่เมาส์หยุดทำงาน ทั้งนี้ขึ้นอยู่กับสิ่งที่คุณกำลังพยายามที่จะทำคุณอาจจะสามารถที่จะทำให้การทำงานโดยใช้ CSS4:target
หลอกชั้น