เน้นป้ายกำกับหากเลือกช่องทำเครื่องหมาย


110

มีวิธีที่ไม่ใช้จาวาสคริปต์ในการเปลี่ยนสีของฉลากเมื่อเลือกช่องทำเครื่องหมายที่เกี่ยวข้องหรือไม่


คำตอบ:


147

ถ้าคุณมี

<div>
  <input type="checkbox" class="check-with-label" id="idinput" />
  <label class="label-for-check" for="idinput">My Label</label>
</div>

คุณทำได้

.check-with-label:checked + .label-for-check {
  font-weight: bold;
}

ดูการทำงานนี้ โปรดทราบว่าจะใช้ไม่ได้กับเบราว์เซอร์ที่ไม่ทันสมัย


2
สิ่งนี้จะใช้ไม่ได้ใน IE 6-8 เว้นแต่ OP จะไม่สนใจ IE
Hussein

25
ฉันรู้ฉันสังเกตว่ามันจะใช้ได้เฉพาะในเบราว์เซอร์รุ่นใหม่ในคำตอบของฉัน
Andrew Marshall

4
@ inf3rno มันควร. ทั้งเลือกพี่น้องที่อยู่ติดกันและ:checkedเลือกระบุว่าได้รับการสนับสนุนใน IE9 เอกสารของ Microsoftยืนยันสิ่งนี้
Andrew Marshall

3
ทางออกที่ดี แต่ถ้าองค์ประกอบป้ายกำกับไม่ใช่บรรพบุรุษถัดไปคุณควรลองใช้ ~ selector แทน + ตัวเลือก456bereastreet.com/archive/200601/css_3_selectors_explained (สุดท้ายในตาราง)
Karl Adler

@abimelex แม้ว่าจะขึ้นอยู่กับ HTML ของคุณที่อาจลงเอยด้วยการจับคู่<label>มากกว่าที่ต้องการ
Andrew Marshall

101

ฉันชอบคำแนะนำของ Andrew และจริงๆแล้วกฎ CSS จะต้องเป็น:

:checked + label {
   font-weight: bold;
}

ฉันต้องการพึ่งพาการเชื่อมโยงโดยนัยขององค์ประกอบlabelและinputองค์ประกอบดังนั้นฉันจะทำสิ่งนี้:

<label>
   <input type="checkbox"/>
   <span>Bah</span>
</label>

ด้วย CSS:

:checked + span {
    font-weight: bold;
}

ตัวอย่าง: http://jsfiddle.net/wrumsby/vyP7c/


มีเคล็ดลับในการเปลี่ยนสีพื้นหลังของป้ายกำกับระดับบนสุดของช่องทำเครื่องหมาย ทำให้ล้นฉลาก: ซ่อนแล้วให้ทำเครื่องหมายในช่องที่ dropshadow ขนาดใหญ่มาก :checked { box-shadow: 0 0 0 500px orange; }... คุณจะต้องเล่นกับ z-index เพื่อให้แน่ใจว่าองค์ประกอบพี่น้องไม่ได้ซ่อนอยู่
Aaron Cicali

8

นี่คือตัวอย่างของการใช้:checkedคลาสหลอกเพื่อให้เข้าถึงแบบฟอร์มได้มากขึ้น :checkedหลอกชั้นสามารถใช้กับปัจจัยการผลิตที่ซ่อนอยู่และมองเห็นป้ายชื่อของพวกเขาในการสร้างเครื่องมือโต้ตอบเช่นแกลเลอรี่ภาพ ฉันสร้างสนิปสำหรับคนที่ต้องการทดสอบ

input[type=checkbox] + label {
  color: #ccc;
  font-style: italic;
} 
input[type=checkbox]:checked + label {
  color: #f00;
  font-style: normal;
} 
<input type="checkbox" id="cb_name" name="cb_name"> 
<label for="cb_name">CSS is Awesome</label> 


-24

คุณไม่สามารถทำได้ด้วย CSS เพียงอย่างเดียว ใช้ jQuery คุณสามารถทำได้

HTML

<label id="lab">Checkbox</label>
<input id="check" type="checkbox" />

CSS

.highlight{
    background:yellow;
}

jQuery

$('#check').click(function(){
    $('#lab').toggleClass('highlight')
})

สิ่งนี้จะใช้ได้กับทุกเบราว์เซอร์

ตรวจสอบตัวอย่างการทำงานที่http://jsfiddle.net/LgADZ/


8
คำถามบอกว่าเป็นวิธีที่ไม่ใช้จาวาสคริปต์และคำตอบก่อนที่คุณจะเคลียร์แสดงวิธีที่ใช้งานได้โดยใช้ css เท่านั้น
Kevin

2
วิธีการแก้ปัญหาที่ยอมรับใช้ตัวเลือกพี่น้องที่อยู่ติดกันซึ่งเป็นจริงคุณลักษณะของCSS 2.1
Walter Rumsby

JQuery เป็นโซลูชันเดียวที่รับประกันการรองรับข้ามเบราว์เซอร์
Hussein

7
โปรดระวังที่นั่น Hussein คุณสามารถให้การสนับสนุนสำหรับเบราว์เซอร์เช่น Internet Explorer 6 ที่ไม่สนับสนุนตัวเลือกพี่น้องที่อยู่ติดกันโดยใช้JavaScript jQueryเป็นไลบรารี JavaScript ที่จะช่วยคุณทำสิ่งนี้ มีไลบรารีอื่น ๆ (หรือแม้แต่ JavaScript แท้ๆ!) ที่คุณสามารถทำได้ด้วย
Simon Lieschke

Re: ความคิดเห็นก่อนหน้านี้ของฉันฉันไม่ทราบว่า:checkedตัวเลือกหลอกเป็นคุณสมบัติ CSS3
Walter Rumsby
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.