In fact, there is no cross-browser solution (this is an old article, but still good and relevant) using the actual checkbox. There are tricks you can use in CSS3. The one I use is not very browser friendly (a newer browser is required), but there are other ways that are a bit more friendly to each other, but not 100%. I doubt that you will find anything that supports IE6, for example.
Something like that:
input.checkbox { display: none } input.checkbox + label > span.checkbox-span { display: inline-block; color: #FFF; border: 1px solid #000; width: 30px; line-height: 30px; font-size: 24px; text-align: center } input.checkbox:checked + label > span.checkbox-span { color: #000 }
<input type="checkbox" class="checkbox" id="check_1" /> <label for="check_1"><span class="checkbox-span">✓</span> Text describing checkbox #1</label>
This is a very simple example. See jsFiddle.
source share