Hộp kiểm trong trang web - làm thế nào để làm cho chúng lớn hơn?


113

Các hộp kiểm chuẩn được hiển thị trong hầu hết các trình duyệt đều khá nhỏ và không tăng kích thước ngay cả khi sử dụng phông chữ lớn hơn. Cách tốt nhất, không phụ thuộc vào trình duyệt để hiển thị các hộp kiểm lớn hơn là gì?

Câu trả lời:


143

Trong trường hợp điều này có thể giúp ích cho bất kỳ ai, đây là CSS đơn giản như một điểm khởi đầu. Biến nó thành một hình vuông tròn cơ bản đủ lớn cho ngón tay cái với màu nền được bật tắt.

input[type='checkbox'] {
    -webkit-appearance:none;
    width:30px;
    height:30px;
    background:white;
    border-radius:5px;
    border:2px solid #555;
}
input[type='checkbox']:checked {
    background: #abd;
}
<input type="checkbox" />


@GabrielW Đúng vậy. Chỉ cần sử dụng tương đương cho những người khác
taylorcressy

@taylorcressy Ngoại trừ IE (cũng là IE 11) caniuse.com/#search=Appearance - nhưng hoạt động tốt với các trình duyệt khác. Cảm ơn!
CodeBrauer

16
Sẽ tốt hơn nếu có một bên đánh dấu quá :)
robert vua

@Paul: Cảm ơn vì đã chia sẻ. Tôi đã tự hỏi làm thế nào bạn đối phó với dấu kiểm hiển thị. Với nền vừa được đặt thành một màu, dấu kiểm màu trắng trong hộp sẽ không còn hiển thị nữa. Có một giải pháp dễ dàng? Tôi đã thử thêm một thực thể html cho việc kiểm tra trong một: trước đây, nhưng tự hỏi nếu có một sự thay thế
PBandJen

1
Tôi sử dụng một màu tối hơn cho màu nền kiểm tra và nó không phải là quá tệ mà không có một "kiểm tra"
JR Lawhorne

47

Trên thực tế, có một cách để làm cho chúng lớn hơn, hộp kiểm giống như bất kỳ thứ gì khác (thậm chí là một khung nội tuyến như nút facebook).

Bao bọc chúng trong một phần tử "đã thu phóng":

.double {
  zoom: 2;
  transform: scale(2);
  -ms-transform: scale(2);
  -webkit-transform: scale(2);
  -o-transform: scale(2);
  -moz-transform: scale(2);
  transform-origin: 0 0;
  -ms-transform-origin: 0 0;
  -webkit-transform-origin: 0 0;
  -o-transform-origin: 0 0;
  -moz-transform-origin: 0 0;
}
<div class="double">
  <input type="checkbox" name="hello" value="1">
</div>

Nó có thể trông hơi "thay đổi tỷ lệ" nhưng nó hoạt động.

Tất nhiên, bạn có thể làm cho div float: left và đặt nhãn của bạn bên cạnh nó, float: left.


1
Lưu ý rằng trên Firefox (kể từ phiên bản 36), điều này sẽ dẫn đến việc hiển thị rất mờ. Tuy nhiên, nó hoạt động tốt trong Chrome. Demo: jsfiddle.net/tzp858j3
Kat

không có giải pháp nào tốt hơn mà trông KHÔNG được mở rộng?
basZero

3
Không thể zoom: 2transform: scale(2)được áp dụng trực tiếp vào hộp kiểm? Tại sao nó cần một trình bao bọc?
Atav32

Cảm ơn! Có vẻ như mã của bạn sẽ tính đến nhiều trình duyệt hơn thì tôi có thể thử nghiệm, nhưng nó hoạt động trên mọi thứ tôi đã thử. Đặc biệt tuyệt vời trên điện thoại I-phone của tôi, nơi các hộp kiểm trở thành dấu chấm! BTW, bạn có thể đặt tỷ lệ phân số nhỏ hơn (như 1,5) ở những nơi mà snipet này đặt "2" và cho hộp kiểm kích thước trung bình.
Randy

26

Hãy thử CSS này

input[type=checkbox] {width:100px; height:100px;}

2
Không hoàn toàn là trình duyệt chéo (tốt hơn là đặt một lớp trong HTML và sử dụng bộ chọn lớp trong CSS), nhưng đây có thể là một giải pháp tốt hơn của tôi. +1
Harmen

1
Tôi đã sử dụng chiều rộng và chiều cao cho các mục đích ví dụ. Có lẽ sự kết hợp giữa Harmen và giải pháp của tôi là cách để đi vì bạn có thể cần nhiều kiểu hơn so với CSS có thể cung cấp một cách hợp lý.
Collin White,

6
Điều này sẽ chỉ hoạt động trong một số trình duyệt và không hoạt động trong nhiều trình duyệt hiện đại.
RJ Owen

1
Điều này hoạt động trên ipad safari nơi hộp kiểm thường cần lớn hơn để người dùng nhấp vào dễ dàng hơn.
user3032973

3
Hạn chế lớn là nó không làm việc ở tất cả trong Firefox (như Firefox 36) và sẽ trên thực tế nhìn khá tự nhiên (hộp kiểm là thường xuyên kích thước nhưng đệm xung quanh nó lấp đầy diện tích 100 x 100px.
Kat

5

Tôi đã thử thay đổi dấu paddingmarginvà cũng như widthheightvà cuối cùng nhận thấy rằng nếu bạn chỉ tăng quy mô thì nó sẽ hoạt động:

input[type=checkbox] {
    transform: scale(1.5);
}

1

Đây là một thủ thuật hoạt động trong hầu hết các trình duyệt gần đây (IE9 +) như một giải pháp CSS duy nhất có thể được cải thiện với javascript để hỗ trợ IE8 trở xuống.

<div>
  <input type="checkbox" id="checkboxID" name="checkboxName" value="whatever" />
  <label for="checkboxID"> </label>
</div>

Tạo kiểu labelvới những gì bạn muốn hộp kiểm trông như thế nào

#checkboxID
{
  position: absolute fixed;
  margin-right: 2000px;
  right: 100%;
}
#checkboxID + label
{
  /* unchecked state */
}
#checkboxID:checked + label
{
  /* checked state */
}

Đối với javascript, bạn sẽ có thể thêm các lớp vào nhãn để hiển thị trạng thái. Ngoài ra, sẽ là khôn ngoan nếu sử dụng hàm sau:

$('label[for]').live('click', function(e){
  $('#' + $(this).attr('for') ).click();
  return false;
});

CHỈNH SỬA để sửa đổi #checkboxIDkiểu


thấy stackoverflow.com/a/3772914/190135 cho một liên kết đến mã nguồn đầy đủ cho kỹ thuật này
AlexChaffee

1

Tôi đang viết một ứng dụng phonegap và các hộp kiểm khác nhau về kích thước, giao diện, v.v. Vì vậy, tôi đã tạo hộp kiểm đơn giản của riêng mình:

Đầu tiên, mã HTML:

<span role="checkbox"/>

Sau đó, CSS:

[role=checkbox]{
    background-image: url(../img/checkbox_nc.png);
    height: 15px;
    width: 15px;
    display: inline-block;
    margin: 0 5px 0 5px;
    cursor: pointer;
}

.checked[role=checkbox]{
    background-image: url(../img/checkbox_c.png);
}

Để chuyển đổi trạng thái hộp kiểm, tôi đã sử dụng JQuery:

CLICKEVENT='touchend';
function createCheckboxes()
{
    $('[role=checkbox]').bind(CLICKEVENT,function()
    {
        $(this).toggleClass('checked');
    });
}

Nhưng nó có thể dễ dàng được thực hiện mà không cần ...

Hy vọng nó có thể giúp đỡ!


1

Chỉ quyết định CSS 2020 hiện đại thuần túy , không chia tỷ lệ mờ hoặc chuyển đổi không tiện dụng. Và với đánh dấu! =)

Hoạt động tốt trên Firefox và các trình duyệt dựa trên Chromium.

Vì vậy, bạn có thể quy tắc các hộp kiểm của mình hoàn toàn là ADAPTIVE , chỉ bằng cách thiết lập khối chính font-heightvà nó sẽ phát triển theo văn bản!

input[type='checkbox'] {
  -moz-appearance: none;
  -webkit-appearance: none;
  appearance: none;
  vertical-align: middle;
  outline: none;
  font-size: inherit;
  cursor: pointer;
  width: 1.0em;
  height: 1.0em;
  background: white;
  border-radius: 0.25em;
  border: 0.125em solid #555;
  position: relative;
}

input[type='checkbox']:checked {
  background: #adf;
}

input[type='checkbox']:checked:after {
  content: "✔";
  position: absolute;
  font-size: 90%;
  left: 0.0625em;
  top: -0.25em;
}
<label for="check1"><input type="checkbox" id="check1" checked="checked" /> checkbox one</label>
<label for="check2"><input type="checkbox" id="check2" /> another checkbox</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.