The standard checkboxes rendered in most browsers are quite small and don’t increase in size even when a larger font is used. What is the best, browser-independent way to display larger checkboxes?
7 Answers
In case this can help anyone, here's simple CSS as a jumping off point. Turns it into a basic rounded square big enough for thumbs with a toggled background color.
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 That's right. Just use the equivalent for the others – taylorcressy Nov 19 '14 at 15:52
-
@taylorcressy Except for IE (also IE 11) http://caniuse.com/#search=Appearance - but worked fine for other browsers. Thanks! – CodeBrauer Nov 20 '14 at 09:34
-
26would be nice if there was a tick inside too :) – Rusty Rob Aug 07 '17 at 00:08
-
@Paul: Thanks for sharing. I was wondering how you deal with the checkmark showing up. With the background just set to a color, the white checkmark in the box is no longer visible. Is there an easy solution? I've tried add a html entity for the check in a :before, but wondering if there is an alternative – PBandJ Nov 13 '17 at 03:37
-
1I used a darker color for the checked background color and it's not so bad without a "check" – JR Lawhorne Mar 14 '18 at 22:07
Actually there is a way to make them bigger, checkboxes just like anything else (even an iframe like a facebook button).
Wrap them in a "zoomed" element:
.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>
It might look a little bit "rescaled" but it works.
Of course you can make that div float:left and put your label besides it, float:left too.
-
3Note that on Firefox (as of version 36), this will result in a very blurry appearance. It scales well in Chrome, though. Demo: http://jsfiddle.net/tzp858j3/ – Kat Dec 31 '14 at 23:46
-
-
5Can't `zoom: 2` and `transform: scale(2)` be directly applied to the checkbox? Why does it need a wrapper? – Atav32 Mar 08 '19 at 23:08
-
Thanks! looks like your code takes more browsers into account then I could ever test with, but it works on everything I've tried. Especially nice on my I-phone, where checkboxes just about become dots! BTW, you can put smaller fractional scaling (like 1.5) in the places where this snipet puts "2", and for a medium size checkbox. – Randy Nov 28 '19 at 04:19
-
zoom: 2 and transform: scale(2) was all I needed applied to the div wrapping the checkbox – Andrew Irwin Sep 01 '20 at 08:23
Try this CSS
input[type=checkbox] {width:100px; height:100px;}
<input type="checkbox" />

- 1,416
- 1
- 15
- 17

- 640
- 1
- 11
- 27
-
3Not totally cross-browser (it's better to set a class in HTML and use the class selector in CSS), but this might be a better solution than mine. +1 – Harmen Nov 09 '10 at 18:49
-
Note that this makes fuzzy looking controls in some browsers as the native control that is scaled up is a fixed sized image. – jball Nov 09 '10 at 18:54
-
1I was using width and height for example purposes. Probably a combination of Harmen and my solution is the way to go as you may need more styling than CSS can reasonably provide. – Collin White Nov 09 '10 at 18:56
-
7
-
1This works on ipad safari where checkboxes often need to be larger to make it easier for users to click. – user3032973 Apr 25 '14 at 18:32
-
1
-
3Major limitation is that it doesn't work at all in Firefox (as of Firefox 36) and will in fact look quite unnatural (the checkbox is regular sized but padding around it fills the 100 x 100px area. – Kat Dec 31 '14 at 23:44
-
1
-
1As of right now, 2021, it seems that this answer is working and is the simplest. Chrome, Edge tested. – Lam Le Sep 01 '21 at 12:02
I tried changing the padding
and margin
and well as the width
and height
, and then finally found that if you just increase the scale it'll work:
input[type=checkbox] {
transform: scale(1.5);
}

- 945
- 12
- 26
-
1I tried a number of these solutions and this was the only one that didn't cause other issues, also worth noting that scale is very widely supported by browsers so very cross browser compatible. I created a class so I could apply it to only the checkboxes I wanted to, which could be used to scale anything: .scale-up-20 {transform: scale(1.2);} – The Coder Dec 23 '20 at 22:31
Pure modern 2020 CSS only decision, without blurry scaling or non-handy transforming. And with tick! =)
Works nice in Firefox and Chromium-based browsers.
So, you can rule your checkboxes purely ADAPTIVE, just by setting parent block's font-size
and it will grow with text!
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>
<label for="check3" style="font-size:150%"><input type="checkbox" id="check3" checked="checked" /> bigger checkbox </label>

- 944
- 15
- 20
I'm writtinga phonegap app, and checkboxes vary in size, look, etc. So I made my own simple checkbox:
First the HTML code:
<span role="checkbox"/>
Then the 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);
}
To toggle checkbox state, I used JQuery:
CLICKEVENT='touchend';
function createCheckboxes()
{
$('[role=checkbox]').bind(CLICKEVENT,function()
{
$(this).toggleClass('checked');
});
}
But It can easily be done without it...
Hope it can help!

- 27
- 1
Here's a trick that works in most recent browsers (IE9+) as a CSS only solution that can be improved with javascript to support IE8 and below.
<div>
<input type="checkbox" id="checkboxID" name="checkboxName" value="whatever" />
<label for="checkboxID"> </label>
</div>
Style the label
with what you want the checkbox to look like
#checkboxID
{
position: absolute fixed;
margin-right: 2000px;
right: 100%;
}
#checkboxID + label
{
/* unchecked state */
}
#checkboxID:checked + label
{
/* checked state */
}
For javascript, you'll be able to add classes to the label to show the state. Also, it would be wise to use the following function:
$('label[for]').live('click', function(e){
$('#' + $(this).attr('for') ).click();
return false;
});
EDIT to modify #checkboxID
styles

- 174,988
- 54
- 320
- 367
-
see http://stackoverflow.com/a/3772914/190135 for a link to full source code for this technique – AlexChaffee Mar 30 '12 at 21:33