2012-04-22 34 views
24

Tôi đang cố thay đổi 'hình ảnh hộp' mặc định của hộp kiểm bằng css, nhưng nó không hoạt động. Có cách nào arround này?Thay đổi hình ảnh kiểm tra hộp kiểm thành hình ảnh tùy chỉnh

<input type="checkbox" class="class_checkbox"> 

Và trong tập tin lớp tôi làm

.class_checkbox{ 
    background: url("../images/button_bullet_normal.png") no-repeat scroll 0 0 transparent;  
} 
+3

Không phải không có JavaScript. Bạn có muốn thuật lại câu hỏi của mình không? – iambriansreed

+0

Kiểm tra điều này: [câu hỏi trước] (http://stackoverflow.com/a/1986931/1190388) – hjpotter92

+0

bản sao có thể có của [Hộp kiểm Kiểu CSS] (http://stackoverflow.com/questions/1986608/css-styling-checkboxes) – Phrogz

Trả lời

11

Hãy thử:

<input type="checkbox" class="input_class_checkbox"> 

jQuery

$('.input_class_checkbox').each(function(){ 
    $(this).hide().after('<div class="class_checkbox" />'); 

}); 

$('.class_checkbox').on('click',function(){ 
    $(this).toggleClass('checked').prev().prop('checked',$(this).is('.checked')) 
}); 

Fiddle: http://jsfiddle.net/cn6kn/

+0

để hộp kiểm được thay thế bằng div với một hành động. Thanx – themis

+1

@Phrogz -1 của bạn là lame. Nhãn không được sử dụng trong ví dụ. – iambriansreed

+0

là (': checked') không là ('. Checked') –

72

Bạn có thể sử dụng css tinh khiết, chỉ cần thêm một nhãn hộp kiểm như thế này:

.check_box { 
    display:none; 
} 

.check_box + label{ 
    background:url('images/check-box.png') no-repeat; 
    height: 16px; 
    width: 16px; 
    display:inline-block; 
    padding: 0 0 0 0px; 
} 

.check_box:checked + label{ 
    background:url('images/check-box-checked.png') no-repeat; 
    height: 16px; 
    width: 16px; 
    display:inline-block; 
    padding: 0 0 0 0px; 
} 
+9

Đây là câu trả lời được chấp nhận. –

+2

Xin chào! Tôi đã tự hỏi rằng mã html tương ứng là gì? Có ? –

+0

nhãn phải sau hộp kiểm. –

6

Tôi tạo ra một Fiddle sử dụng CSS tinh khiết. Câu trả lời được bỏ phiếu nhiều nhất không xử lý các sự kiện nhấp chuột và sẽ không hoạt động tốt, bởi vì giá trị hộp kiểm sẽ không thay đổi.

Đây là ví dụ của tôi:

http://jsfiddle.net/kEHGN/1/

Về cơ bản, chúng ta cần html sau:

<div class="checkbox_wrapper"> 
    <input type="checkbox" /> 
    <label></label> 
</div> 

Và CSS sau đây:

.checkbox_wrapper{ 
    position: relative; 
    height: 16px; 
    width: 17px; 
} 

input[type="checkbox"] { 
    opacity:0; 
    height: 16px; 
    width: 17px; 
    position: absolute; 
    top: 0; 
    left: 0; 
    z-index: 2; 
} 

input[type="checkbox"] + label{ 
    background:url('../images/unchecked.png') no-repeat; 
    height: 16px; 
    width: 17px; 
    display:inline-block; 
    padding: 0 0 0 0px; 
    position: absolute; 
    top: 0; 
    left: 0; 
    z-index: 1; 
} 

input[type="checkbox"]:checked + label{ 
    background:url('../images/checked.png') no-repeat; 
    height: 16px; 
    width: 17px; 
    display:inline-block; 
    padding: 0 0 0 0px; 
} 

Chỉ cần kiểm tra đường bay của hình ảnh và chiều rộng và chiều cao phải bằng với chiều rộng a chiều cao thứ hai của hình ảnh. Trên fiddler tôi đang sử dụng hình ảnh được mã hóa base64.

Tôi hy vọng nó có thể hữu ích.

+0

Cảm ơn bạn đã lưu ngày của tôi :-) – withparadox2

+0

Nên chấp nhận câu trả lời ngay tại đây – Nate

1

lẽ sẽ hữu ích mẫu của tôi với LESS.

<div class="custom-checkbox"> 
    <input component="input" type="checkbox"/> 
    <label>Here is caption right to checkbox</label> 
</div> 

    @imgsize: 25px; 
    .custom-checkbox{ 
     position: relative; 

     > input[type="checkbox"] { 

     display:none; 
     position: absolute; 
     top: 0; 
     left: 0; 

      + label{ 

       background:url('../img/unchecked.png') no-repeat 0 0; 
       background-size:@imgsize; 
       height: @imgsize; 
       padding: 4px 0 5px 35px; 
       display: inline-block; 
       -webkit-transition-duration: 0.3s; 
       -moz-transition-duration: 0.3s; 
       transition-duration: 0.3s;   
      } 
     } 
     > input[type="checkbox"]:checked + label{ 

      background:url('../img/checked.png') no-repeat; 
      background-size:@imgsize @imgsize; 
     } 
    } 
3

Tôi tìm thấy một cách khác, không sử dụng nhãn lân cận hoặc div xung quanh.

Cơ sở dữ liệu của tôi là tôi đã có trình phân tích cú pháp markdown tạo các danh sách TODO tiện lợi đó và tôi muốn tạo kiểu cho chúng.Thay đổi HTML được tạo không phải là một lựa chọn, vì vậy tôi đã đưa ra giải pháp này:

được đưa ra một hộp kiểm như thế này:

<input type="checkbox" id="cb"> 

Bạn có thể tạo kiểu với visibility: hidden vào hộp kiểm và visibility: visible trên :: sau, như thế này:

#cb { 
 
    visibility: hidden; 
 
} 
 

 
input#cb::after { 
 
    visibility: visible; 
 
    content: "F"; 
 
    color: red; 
 
    background: green; 
 
    padding: 8px; 
 
} 
 

 
input#cb:checked::after { 
 
    content: " T "; 
 
    color: green; 
 
    background: red; 
 
}
<!doctype html> 
 
<html> 
 

 
<body> 
 
    <input type="checkbox" id="cb"> 
 
</body> 
 

 
</html>

hộp kiểm hoạt động giống như bình thường một và bạn có thể tạo kiểu cho nó theo ý bạn.

Có lẽ nó sẽ giúp someody (và tôi có thể đánh dấu nó, bởi vì tôi đã không tìm thấy bất cứ điều gì như thế này trên web)

+0

Điều này không bao giờ nên hoạt động ở vị trí đầu tiên, vì phần tử 'input' không thể có' nội dung' - và do đó, không có ':: after' hoặc' :: trước'. Firefox chính xác sẽ không hiển thị T và F. – connexo

+0

Hmm của bạn, tôi đã thử nghiệm nó trên firefox trở lại sau đó và nó làm việc hoàn toàn tốt đẹp. – Enbyted

Các vấn đề liên quan