2012-11-09 25 views
25

Tôi đã tìm kiếm rộng rãi ở đây để có câu trả lời cho điều này nhưng không hoàn toàn bắt gặp những gì tôi đang tìm kiếm. Tìm thấy điều này CSS - How to Style a Selected Radio Buttons Label? nhưng câu trả lời liên quan đến việc thay đổi đánh dấu, và đó là điều tôi muốn tránh mà tôi sẽ giải thích dưới đây.Hộp kiểm CSS và nút radio khi đầu vào nằm trong nhãn?

Tôi đang cố gắng để thêm các hộp kiểm tùy chỉnh css3 và nút radio để chủ đề diễn đàn XenForo tôi, và tất cả các hướng dẫn Tôi đã đọc về vấn đề này có nhãn sau khi đầu vào:

<input type="checkbox" id="c1" name="cc" /> 
<label for="c1">Check Box 1</label> 

Tuy nhiên trong đánh dấu XenForo của đầu vào nằm bên trong nhãn:

<label for="ctrl_enable_rte"> 
<input type="checkbox" name="enable_rte" value="1" id="ctrl_enable_rte" {xen:checked "{$visitor.enable_rte}"} /> 
{xen:phrase use_rich_text_editor_to_create_and_edit_messages} 
</label> 

Tôi đã tìm hiểu lý do tại sao, nhưng không tìm thấy bất kỳ điều gì liên quan đến hộp kiểm css tùy chỉnh/nút radio khi đánh dấu theo cách này. Tôi muốn tránh phải thay đổi đánh dấu, bởi vì tôi đang xử lý hệ thống diễn đàn ở đây, và điều đó sẽ liên quan đến việc chỉnh sửa một loạt các mẫu lõi ... mà tôi phải cập nhật đánh dấu trên mỗi lần phần mềm diễn đàn đưa ra một bản cập nhật (giả sử các mẫu đã thay đổi).

Tôi đã cố gắng tạo các quy tắc CSS có thể hoạt động với loại đánh dấu này, nhưng cho đến nay tôi đã không thành công. Tôi không quá kinh nghiệm với CSS, không có mọi selector được ghi nhớ, và các lớp giả vẫn còn khá xa lạ với tôi, vì vậy tôi hy vọng một ai đó ở đây có thể làm sáng tỏ nếu điều này có thể, và nếu có, làm thế nào tôi có thể đi về nó. Tôi đã có sẵn sprite của mình, tôi chỉ cần tìm ra CSS.

Vấn đề chính của tôi là tôi không thể tìm ra cách chọn nhãn (chỉ các nhãn liên quan đến các yếu tố đầu vào này). Thông thường một cái gì đó như

input[type="checkbox"] + label 

được sử dụng, nhưng khi nhãn không theo sau đầu vào và thay vào đó ra ngoài/trước nó ... làm cách nào để chọn?

+1

Thay vì chọn nhãn cho đầu vào đã chọn (mà tôi tin là không thể thực hiện trong trường hợp này với CSS chỉ như bộ chọn "cha mẹ" không tồn tại), có thể có cách giải quyết với CSS. Bạn muốn điều gì đặc biệt? –

+0

@WesleyMurch Tôi đang cố gắng tùy chỉnh tất cả các hộp kiểm/nút radio bằng cách thêm hình ảnh sprite với vị trí nền được xác định cho mỗi trạng thái khác nhau (được chọn, di chuột, tiêu điểm, đang hoạt động, bị vô hiệu hóa). Tôi không chắc chắn những gì tôi có thể chọn để đạt được điều này, tất cả các hướng dẫn về hộp kiểm css3 tùy chỉnh và tương tự đã có nhãn sau khi đầu vào và CSS phản ánh cụ thể. Xin lỗi nếu tôi không trả lời chính xác câu hỏi của bạn hoặc có đủ chi tiết. –

+0

Câu trả lời của bạn là rõ ràng nhưng giới hạn của bạn không hoàn toàn. Vì vậy, ngoài yêu cầu để giữ đầu vào bên trong nhãn, bạn có thể chỉnh sửa HTML không? Ví dụ: bạn có thể thêm một ô trống ' 'sau mỗi hộp kiểm hay bọc nội dung liền kề trong một không? Nếu không, tôi sợ bạn đang bị mắc kẹt bằng cách sử dụng javascript (và đó không phải là thực sự là một điều xấu). –

Trả lời

2

Thật không may CSS không cho phép phong cách của các yếu tố cha mẹ dựa trên yếu tố con đó sẽ là một cách dễ dàng dụ:

div.a < div { border: solid 3px red; } 

Điều ngược lại lựa chọn một con dựa vào cha mẹ:

div.a > div { border: solid 3px red; } 

Những gì bạn muốn làm có thể đạt được bằng cách sử dụng jQuery.

Khám phá this bài đăng.

+0

Thú vị, tôi sẽ xem xét điều này. Sau khi xem xét các câu trả lời khác có vẻ như JS thực sự sẽ là chìa khóa ở đây và như Wesley Murch nói rằng tôi có thể kéo nó ra bằng cách thêm một lớp vào nhãn trình bao bọc. Cảm ơn! –

1

Câu hỏi rất thú vị. Sự thật được nói, tôi khá chắc chắn đó là không thể chỉ với CSS một mình.

Nếu có một số loại mẫu cho nhãn cho thuộc tính (ctrl_enable_rte), có hy vọng cho bạn. Ví dụ, nếu tất cả các nhãn hộp kết thúc với rte, bạn có thể sử dụng

label[for$=rte] { ... } 

Nếu không có mô hình như vậy, và các ID hộp kiểm được chọn tùy ý, bạn sẽ phải dùng đến JavaScript.

+0

Thú vị, tôi sẽ phải xem xét điều này và xem nếu đó là một giải pháp có thể, cảm ơn! Chỉnh sửa: Có vẻ "ctrl_" được sử dụng ở khắp mọi nơi đầu vào hộp kiểm, tuy nhiên nó cũng được sử dụng trên nhãn không có hộp kiểm. Đoán điều này sẽ không làm việc sau khi tất cả và JS đang tìm kiếm nhiều hơn và nhiều hơn như các cửa hàng duy nhất ở đây. –

+0

Tôi không thấy cách này có thể được sử dụng để tạo kiểu cho nhãn tùy thuộc vào trạng thái kiểm soát của một điều khiển. Trạng thái là dynamix và thuộc tính 'for' là tĩnh. –

11

Nếu bạn có thể chỉnh sửa đánh dấu để bọc các văn bản nhãn thực tế, ví dụ:

<label> 
    <input type="checkbox"> 
    <span>One</span> 
</label> 
<label> 
    <input type="checkbox"> 
    <span>Two</span> 
</label> 
<label> 
    <input type="checkbox" disabled> 
    <span>Three</span> 
</label> 

Bạn có thể kéo giảm một số thủ thuật với CSS:

label { 
    position:relative; 
    cursor:pointer; 
} 
label [type="checkbox"] { 
    display:none; /* use your custom sprites instead as background on the span */ 
} 
[type="checkbox"] + span { 
    display:inline-block; 
    padding:1em; 
} 
:checked + span { 
    background:#0f0; 
} 
[type="checkbox"][disabled] + span { 
    background:#f00; 
}​ 

Demo: http://jsfiddle.net/dMhDM/1/

Hãy nhớ rằng điều này sẽ thất bại nếu trình duyệt không hỗ trợ :checked.

Điều này về cơ bản giống như giải pháp khác, nhưng việc làm dao được thực hiện trên nhịp thay vì nhãn.

+0

Trong khi điều này sẽ liên quan đến chỉnh sửa HTML mà tôi muốn tránh, đó là một phương pháp có thể có thể với một số mods mẫu sử dụng regex mà sẽ tốt hơn rất nhiều và liền mạch trong bản cập nhật diễn đàn. Nhược điểm duy nhất là tôi vẫn sẽ phải sửa đổi 73 mẫu và bất kỳ mẫu mới từ bản cập nhật trong tương lai hoặc addons. Có lẽ tôi nên từ bỏ giải pháp CSS tinh khiết và thay vào đó hãy xem xét việc làm cho JS hoạt động hoàn hảo trong mọi trường hợp. Cảm ơn bạn đã dành thời gian để trả lời và viết một ví dụ, thực sự đánh giá cao nó. Tôi chắc rằng nó sẽ giúp những người khác không ở trong tình huống cụ thể như bản thân tôi. –

+0

Hoặc bạn có thể chỉ cần sửa đổi bất cứ điều gì nó là '{xen: cụm từ ...}' kết quả đầu ra để bọc nó trong một khoảng. Tôi muốn đi với cá nhân js, nhưng công ty của tôi hỗ trợ IE7 như một quy tắc - Tôi ghen tị với những người thực sự sử dụng CSS3 trên cơ sở hàng ngày. –

+0

Ah yeah, không nghĩ về điều đó. Chắc chắn một khả năng thay thế mặc dù nó có thể gây ra một số funkiness trong một số lĩnh vực. Chắc chắn có vẻ như JS là cách duy nhất để đến đây ... và nó sẽ thêm vào khả năng tương thích trình duyệt bổ sung mà CSS sẽ thiếu. Tôi chỉ cần tìm ra giải pháp JS phù hợp với tình huống của tôi. Cảm ơn một lần nữa. –