Kiểu dáng hộp kiểm CSS


178

Bất kỳ phong cách cho inputảnh hưởng đến mọi yếu tố đầu vào. Có cách nào để chỉ định kiểu dáng để chỉ áp dụng cho các hộp kiểm mà không áp dụng một lớp cho mỗi thành phần hộp kiểm không?

Câu trả lời:


312

Với CSS 2, bạn có thể làm điều này:

input[type='checkbox'] { ... }

Điều này nên được hỗ trợ khá rộng rãi ngay bây giờ. Xem hỗ trợ cho trình duyệt


18
Tôi tin rằng IE 7 và các bộ chọn thuộc tính hỗ trợ lớn hơn, thực sự là CSS 2.1. quirksmode.org/css/contents.html
TJ L

2
@realtebo: Lưu ý nhiều kiểu (viền, nền, v.v.) không thể được áp dụng trực tiếp vào các hộp kiểm HTML.
Roy Tinker

1
@RoyTinker Bạn sẽ sử dụng outline, không border, cho các hộp kiểm.
TylerH 7/07/2015

29

Tôi tạo ra giải pháp của riêng tôi mà không có nhãn

input[type=checkbox] {
         position: relative;
	       cursor: pointer;
    }
    input[type=checkbox]:before {
         content: "";
         display: block;
         position: absolute;
         width: 16px;
         height: 16px;
         top: 0;
         left: 0;
         border: 2px solid #555555;
         border-radius: 3px;
         background-color: white;
}
    input[type=checkbox]:checked:after {
         content: "";
         display: block;
         width: 5px;
         height: 10px;
         border: solid black;
         border-width: 0 2px 2px 0;
         -webkit-transform: rotate(45deg);
         -ms-transform: rotate(45deg);
         transform: rotate(45deg);
         position: absolute;
         top: 2px;
         left: 6px;
}
<input type="checkbox" name="a">
<input type="checkbox" name="a">
<input type="checkbox" name="a">
<input type="checkbox" name="a">

input[type=checkbox] {
         position: relative;
	       cursor: pointer;
    }
    input[type=checkbox]:before {
         content: "";
         display: block;
         position: absolute;
         width: 20px;
         height: 20px;
         top: 0;
         left: 0;
         background-color:#e9e9e9;
}
input[type=checkbox]:checked:before {
         content: "";
         display: block;
         position: absolute;
         width: 20px;
         height: 20px;
         top: 0;
         left: 0;
         background-color:#1E80EF;
}
    input[type=checkbox]:checked:after {
         content: "";
         display: block;
         width: 5px;
         height: 10px;
         border: solid white;
         border-width: 0 2px 2px 0;
         -webkit-transform: rotate(45deg);
         -ms-transform: rotate(45deg);
         transform: rotate(45deg);
         position: absolute;
         top: 2px;
         left: 6px;
}
<input type="checkbox" name="a">
<input type="checkbox" name="a">
<input type="checkbox" name="a">
<input type="checkbox" name="a">


Cách thực hiện với nền màu xám như trong hình ảnh này ( i.stack.imgur.com/Q23fy.png ), nếu bạn có thể xem bài đăng của tôi ( pt.stackoverflow.com/questions/436890/estilizar-checkbox ). Cảm ơn.
Tiago

Tuyệt diệu! Bạn có thể đặt câu trả lời trong bài viết của tôi để tôi đánh dấu là xong?
Tiago

1
Sau nhiều giờ tìm kiếm và thử nghiệm, đây là điều duy nhất làm việc cho tôi. Cảm ơn!
Đánh dấu

1
Những ví dụ tuyệt vời
Adrian Grygutis

24

Một cái gì đó tôi mới phát hiện ra để tạo kiểu Nút Radio VÀ Hộp kiểm. Trước đây, tôi phải sử dụng jQuery và những thứ khác. Nhưng điều này là đơn giản ngu ngốc.

input[type=radio] {
    padding-left:5px;
    padding-right:5px;
    border-radius:15px;

    -webkit-appearance:button;

    border: double 2px #00F;

    background-color:#0b0095;
    color:#FFF;
    white-space: nowrap;
    overflow:hidden;

    width:15px;
    height:15px;
}

input[type=radio]:checked {
    background-color:#000;
    border-left-color:#06F;
    border-right-color:#06F;
}

input[type=radio]:hover {
    box-shadow:0px 0px 10px #1300ff;
}

Bạn có thể làm tương tự cho một hộp kiểm, rõ ràng thay đổi input[type=radio]thành input[type=checkbox]và thay đổi border-radius:15px;thành border-radius:4px;.

Hy vọng điều này là một phần hữu ích cho bạn.


Thực sự tốt, quá tệ khi không hoạt động nhiều trên Opera hay IE = (
Michel Ayres

1
Nếu bạn muốn áp dụng kiểu dáng của riêng mình cho hộp kiểm / đầu vào, hãy kiểm tra blogpost của tôi về các yếu tố đầu vào tùy chỉnh thông qua CSS . Sau đó, bạn có thể tạo kiểu theo cách bạn muốn chỉ với CSS, bao gồm dự phòng IE8.
Felix Hagspiel

8

Các lớp học cũng hoạt động tốt, chẳng hạn như:

<style>
  form input .checkbox
  {
    /* your checkbox styling */
  }
</style>

<form>
  <input class="checkbox" type="checkbox" />
</form>

Có lẽ không cần thiết phải lồng hộp kiểm tra bên trong biểu mẫu vì bạn không thể tìm thấy hộp kiểm bên ngoài biểu mẫu. Đồng thời nhập .checkbox phải là input.checkbox
Duncan Walker

@DuncanWalker Tôi chưa kiểm tra nó, nhưng các formthẻ có cần thiết để buộc điều khiển đầu vào thành điều khiển gửi mặc định không?
Jim Fell

1
@Jim Fell cái này không hoạt động. Nếu tôi tạo hai lớp khác nhau cho hai hộp kiểm có kiểu khác nhau, ví dụ: .checkbox1 [input = 'hộp kiểm'] và .checkbox2 [input = 'hộp'], các kiểu sẽ luôn có hiệu lực cả hai.
Krys

@Krys Bạn cần cung cấp cho các thành phần hộp kiểm của bạn các tên lớp khác nhau.
Jim Fell

4

Bạn chỉ có thể áp dụng cho một số thuộc tính nhất định bằng cách thực hiện:

input[type="checkbox"] {...}

Nó giải thích nó ở đây .


4
input[type="checkbox"] {
 /* your style */
}

Nhưng điều này sẽ chỉ hoạt động cho các trình duyệt trừ IE7 trở xuống, đối với những người bạn sẽ phải sử dụng một lớp.


bên dưới IE7, bản thân IE7 cũng ổn với các bộ chọn. Đã thử nghiệm và xem tại đây: kimblim.dk/css-tests/selector
Frank Nocke

3

Trident cung cấp ::-ms-checkphần tử giả cho hộp điều khiển và nút điều khiển nút radio. Ví dụ:

<input type="checkbox">
<input type="radio">

::-ms-check {
    color: red;
    background: black;
    padding: 1em;
}

Điều này sẽ hiển thị như sau trong IE10 trên Windows 8:

nhập mô tả hình ảnh ở đây


2

Vì IE6 không hiểu các bộ chọn thuộc tính, bạn có thể kết hợp một tập lệnh chỉ được thấy bởi IE6 (với các nhận xét có điều kiện) và jQuery hoặc IE7.js của Dean Edwards.

IE7 (.js) là một thư viện JavaScript để làm cho Microsoft Internet Explorer hoạt động giống như một trình duyệt tuân thủ tiêu chuẩn. Nó sửa nhiều vấn đề HTML và CSS và làm cho PNG trong suốt hoạt động chính xác trong IE5 và IE6.

Việc lựa chọn sử dụng các lớp hoặc jQuery hoặc IE7.js tùy thuộc vào sở thích và không thích của bạn và các nhu cầu khác của bạn (có thể là độ trong suốt PNG-24 trên trang web của bạn mà không phải dựa vào PNG-8 với độ trong suốt hoàn toàn giảm xuống độ trong suốt 1 bit trên IE6 - chỉ được tạo bởi Pháo hoa và pngnq, v.v.)


1

Mặc dù CSS cung cấp một cách để bạn thực hiện kiểu cụ thể cho loại hộp kiểm hoặc loại khác, nhưng sẽ có vấn đề với các trình duyệt không hỗ trợ điều này.

Tôi nghĩ rằng lựa chọn duy nhất của bạn trong trường hợp này là áp dụng các lớp cho các hộp kiểm của bạn.

chỉ cần thêm lớp = "hộp kiểm" vào hộp kiểm của bạn.

Sau đó tạo phong cách đó trong mã css của bạn.

Một điều bạn có thể làm là:

main.css

input[type="checkbox"] { /* css code here */ }

tức là

.checkbox{ /* css code here for ie */ }

Sau đó sử dụng css cụ thể của IE bao gồm:

<!--[if lt IE 7]>
   <link rel="stylesheet" type="text/css" href="ie.css" />
<![endif]-->

Bạn vẫn sẽ cần thêm lớp để nó hoạt động trong IE và nó sẽ không hoạt động trong các trình duyệt không phải IE khác không hỗ trợ IE. Nhưng nó sẽ làm cho trang web của bạn phải suy nghĩ về phía trước với mã css và khi IE được hỗ trợ, bạn sẽ có thể xóa mã css cụ thể và cả các lớp css khỏi các hộp kiểm.


cảm ơn vì lời khuyên về tấm 2 phong cách. mặc dù tôi đang cố tránh điều đó nhưng tôi nghĩ tôi sẽ tạo ra một kiểu cho hộp kiểm và đó là ...
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.