Skip to content Skip to sidebar Skip to footer

How To Center Checkbox Vertically In A Table-cell?

Q: How do I center the checkbox vertically? In this particular case, why is there empty space between checkbox borders and the containing element at all given that margin and paddi

Solution 1:

The issue..

Checkbox elements, like other input elements are subject to vendor specific appearance styling- you can override this by using appearance:none or -webkit-appearance:none etc..however this will then stop the checkbox from rendering at all.

As such, you have to 'live' with the default styling to some extent and implement a few overrides, for vertical alignment in the example you have given, you have to 'bump it up' by 1px, eg:

.category-item.input-containerinput {
    margin:-1px01px0; /* <-- here */padding: 0;
    vertical-align: middle;
}

Demo Fiddle

More on appearance from MDN

The -moz-appearance [sic] CSS property is used in Gecko (Firefox) to display an element using a platform-native styling based on the operating system's theme.


Styling your own checkbox

A workaround is to 'replace' the checkbox element entirely, whilst still retaining its functionality- this can be done by adding a label element then applying som nifty CSS, for example, the below:

Demo Fiddle

HTML

<divclass="category-item"><divclass="input-container"><inputclass='checkbox'id='checkbox'type="checkbox" /><labelfor='checkbox'class='checkbox'></label></div></div>

CSS

.category-item {
    display: table;
    border: 1px solid #cccccc;
    margin: 0;
    padding: 0;
    height:30px;
}
.category-item.input-container {
    display: table-cell;
    margin: 0;
    padding: 0;
    text-align: center;
    vertical-align: middle;
    height:30px;
}
label.checkbox {
    position:relative;
    vertical-align: middle;
    border:1px solid black;
    height:10px;
    width:10px;
    margin:0;
    padding:0;
    margin:-2px02px0;
    line-height:1em;
    padding:0;
    overflow:hidden;
    display:inline-block;
}
input.checkbox {
    appearance:none;
    height:0;
    width:0;
    overflow:hidden;
    display:none;
    margin:0;
    padding:0;
    -webkit-appearance:none;
}

input.checkbox:checked +label.checkbox:before {
    content:'\2713';
    position:absolute;
    top:-3px;
    font-size:10px;
    left:2px;
}

Solution 2:

Adding display: block; to the input will close up the vertical spacing. Otherwise, it's being treated as an inline item.

Fiddle

Solution 3:

use vertical-align: middle on input-container, not on the input tag itself

JSFiddle: http://jsfiddle.net/TZMF5/3/

.category-item.input-container {
    display: table-cell;
    margin: 0;
    padding: 0;
    text-align: center;
    vertical-align: middle;
}

.category-item.input-containerinput {
  margin: 0;
  padding: 0;
}

Solution 4:

I am not sure if the next result is what you want. I only have commented two rules.

.category-item.input-containerinput {
    /*margin: 0;*/padding: 0;
    /*vertical-align: middle;*/
}

The result is a centered box.

Post a Comment for "How To Center Checkbox Vertically In A Table-cell?"