In many times to control the look and size of the checkbox you need to use "custom checkboxes", benefits are having consistent look on browsers (*), also you can have circles instead of squares, or blue instead of red, and you can have :hover for the label itself too, possibilities are many, just like this:
JS Fiddle -updated 2
#test-checkbox{
display:none;
}
#test-checkbox + label{
color:black;
cursor:pointer;
}
#test-checkbox:checked + label{
color:#0A0;
cursor:pointer;
}
#test-checkbox + label:hover{
outline:1px dotted blue;
outline-offset:4px;
}
#test-checkbox + label::before{
content:'';
width:12px;
height:12px;
display:inline-block;
border:2px solid #AAA;
border-radius:3px;
margin-right:5px;
cursor:pointer;
position:relative;
top:2px;
}
#test-checkbox:checked + label::after{
width:5px;
height:12px;
content:'';
display:inline-block;
border-right:4px solid #0A0;
border-bottom:4px solid #0A0;
position:absolute;
left:14px;
top:6px;
-ms-transform: rotate(45deg); /* IE 9 */
-webkit-transform: rotate(45deg); /* Chrome, Safari, Opera */
transform: rotate(45deg);
}
<input id="test-checkbox" type="checkbox">
<label for="test-checkbox">Check Me</label>
--------------------------------------------------------------------------------
(*) IE8 doesn't support the pseudo elements ::before and ::after which are the correct syntax, it supports :before and :after which are also supported by other browsers, for more information check ::before and ::after