I\'m trying to center horizontally an element: jsfiddle
On the child I
If you don't want to set the width of child-element
#child {
display: flex;
justify-content: center;
}
You were missing a position relative on your parent, position absolute on the child and the left and top values to help offset the child.
DEMO http://jsfiddle.net/nA355/6/
#parent {
width: 300px;
height: 100px;
background-color: black;
border: 1px solid grey;
position: relative;
}
#child {
position: absolute;
height: 100px;
width: 20px;
left: 50%;
top: 50%;
-webkit-transform: translateX(-50%) translateY(-50%);
-moz-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);
background-color:red;
}
You can do it by display flex and justify-content is center.
Example: http://jsfiddle.net/ugw9o3qp/1/
#parent {
display: flex;
justify-content: center;
width: 300px;
height: 100px;
background-color: black;
border: 1px solid grey;
}
#child {
height: 100px;
width: 20px;
background-color:red;
}
I use this technique to horizontally align some elements in situations where "text-align:center;" does not work correctly.
position:relative;
left:50%;
transform:translateX(-??em) /*or -??px or other unit of measure */
... "??" has to be tweaked depending on how wide the element is. I know it's kinda hacky, but seems to work on the screens I've tried it on so far.
In your fiddle, applying this technique, I get:
#parent {
width: 300px
height: 100px;
background-color: black;
border: 1px solid grey;
}
#child {
position:relative;
height: 100px;
width: 20px;
left:50%;
transform: translateX(-10px); /*or transform: translateX(-50%);*/
-webkit-transform: translateX(-10px);/*or -webkit-transform: translateX(-50%); */
-ms-transform: translateX(-10px);/*or -ms-transform: translateX(-50%);*/
background-color:red;
}
which exactly centers the child div horizontally.