Sử dụng nhãn trên nền tảng cho các nút radio


136

Khi sử dụng tham số "nhãn cho" trên các nút radio, để tuân thủ 508 *, điều nào sau đây có đúng không?

 <label for="button one"><input type="radio" name="group1" id="r1" value="1" /> button one</label> 

hay đây là

 <input type="radio" name="group1" id="r1" value="1" /><label for="button one"> button one</label>

Lý do tôi hỏi là trong ví dụ thứ hai, "nhãn" chỉ bao gồm văn bản chứ không phải nút radio thực tế.

* Phần 508 của Đạo luật Phục hồi năm 1973 yêu cầu các cơ quan liên bang cung cấp khả năng truy cập phần mềm và trang web cho người khuyết tật.

Câu trả lời:


216

Bạn gần như đã có nó. Nó nên là thế này:

<input type="radio" name="group1" id="r1" value="1" />
<label for="r1"> button one</label>

Giá trị trong forphải là id của phần tử bạn đang gắn nhãn.


4
Bạn trả lời tất nhiên là đúng, nhưng Martha có câu trả lời đúng. Cả hai ví dụ Martha đều là HTML5 hoàn toàn hợp lệ. Và ví dụ, nếu bạn muốn toàn bộ mọi thứ nằm trong một khung, việc tạo kiểu thứ hai sẽ dễ dàng hơn bằng cách sử dụng css. Nếu bạn muốn nhãn ở một nơi khác, đầu tiên. Nhưng cả hai đều ổn. Trân trọng!
Jacek Kowalewski

5
Hmm .. Làm thế nào để bạn tạo một nhãn chuyển đổi giữa hai nút radio? Bạn không thể có hai ID giống nhau ...: /
Nils Sens

1
@NilsSens Mỗi cặp radio và nhãn phải có ID duy nhất mà chúng không bao giờ nên chia sẻ ID
Daniel Waters

@NilsSens Chuyển đổi giữa 2 nút radio và chúng chỉ có 1 nhãn? Nghe có vẻ như là một trường hợp rõ ràng để sử dụng hộp kiểm thay thế: D
T_D

À, không có gì tôi muốn nói là một siêu nhãn làm bật các nút radio. Giống như: Loại trái cây yêu thích và khi bạn nhấp vào loại trái cây đó, bạn sẽ chuyển đổi giữa idk "chuối" & "dâu tây" Bởi vì, tại sao lại bắt buộc di chuyển chuột UX khi bạn chỉ có thể chuyển đổi tùy chọn. Hôm nay, tôi sẽ sử dụng JS để chỉ mã hóa nó, nhưng sẽ rất thú vị nếu biết có cách duy nhất CSS :)
Nils Sens

85

Cấu trúc là hợp lệ và có thể truy cập được, nhưng forthuộc tính phải bằng với idphần tử đầu vào:

<input type="radio" ... id="r1" /><label for="r1">button text</label>

hoặc là

<label for="r1"><input type="radio" ... id="r1" />button text</label>

Các forthuộc tính là không bắt buộc trong phiên bản thứ hai (nhãn chứa đầu vào), nhưng IIRC có một số trình duyệt cũ mà không làm cho các nhấp chuột được văn bản nhãn, trừ khi bạn có nó. Phiên bản đầu tiên (nhãn sau khi nhập) dễ dàng tạo kiểu hơn với CSS bằng cách sử dụng bộ chọn anh chị em liền kề +:

input[type="radio"]:checked+label {font-weight:bold;}

9
Đúng, mặc dù trong ví dụ thứ hai, thuộc tính "for" là không bắt buộc.
Ishmael

4
Tôi nghĩ rằng có một số phiên bản trình duyệt chỉ làm cho văn bản nút "có thể nhấp" nếu bạn sử dụng thuộc tính 'for', nghĩa là gói đầu vào bên trong nhãn là không đủ.
Martha

@Martha - Bạn có biết trình duyệt nào không?
Kirkland

2
@Kirkland - w3.org/TR/html401/interact/forms.html#h-17.9 dường như chỉ ra rằng hình thức thứ hai là hợp lệ, nhưng một số nguồn cho thấy hỗ trợ có thể không phổ biến. Có lẽ tốt nhất là cung cấp forthuộc tính trong mọi trường hợp.
Ishmael

1
@RalphDavidAbernathy Có, các quy tắc tương tự áp dụng cho các hộp kiểm.
Ishmael

0

(Trước tiên hãy đọc các câu trả lời khác đã giải thích fortrong các <label></label>thẻ. Chà, cả hai câu trả lời trên đều đúng, nhưng đối với thử thách của tôi, đó là khi bạn có một vài hộp radio, bạn nên chọn cho chúng một tên chung như name="r1" nhưng với các id khác nhau id="r1_1" ... id="r1_2"

Vì vậy, theo cách này, câu trả lời rõ ràng hơn và cũng loại bỏ xung đột giữa tên và id.

Bạn cần các id khác nhau cho các tùy chọn khác nhau của hộp radio.

<input type="radio" name="r1" id="r1_1" />

       <label for="r1_1">button text one</label>
       <br/>
       <input type="radio" name="r1" id="r1_2" />

       <label for="r1_2">button text two</label>
       <br/>
       <input type="radio" name="r1" id="r1_3" />

       <label for="r1_3">button text three</label>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.