css3:水平地将translateX转换为中心元素

时间:2013-12-12 08:46:25

标签: html5 css3 transform centering

我正试图水平居中一个元素:jsfiddle

<div id="parent">
    <div id="child">
</div>

在孩子身上,我现在有以下css,它不是中心:

transform: translateX(50%);

不幸的是,50%来自#child而不是父母。有没有办法使用变换来居中这个元素(我知道我可以使用它来居中,例如'left')?

以下是css的完整列表

#parent {
    width: 300px
    height: 100px;
    background-color: black;
    border: 1px solid grey;
}
#child {
    height: 100px;
    width: 20px;
    -webkit-transform: translateX(50%);
    background-color:red;
}

4 个答案:

答案 0 :(得分:14)

您错过了父母的位置亲戚,孩子的绝对位置以及帮助抵消孩子的左侧和上方值。

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;
}

答案 1 :(得分:1)

如果您不想设置子元素的宽度

#child {
    display: flex;
    justify-content: center;
}

答案 2 :(得分:0)

您可以在flex上显示它,并且证明内容居中。

简单:shadowed()

#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;
}

答案 3 :(得分:-2)

我使用这种技术在&#34; text-align:center;&#34;的情况下水平对齐某些元素。不能正常工作。

 position:relative; 
 left:50%;
 transform:translateX(-??em) /*or -??px or other unit of measure */

...&#34; ??&#34;必须根据元素的宽度进行调整。我知道它有点像hacky,但似乎在我迄今为止尝试过的屏幕上工作。

在你的小提琴中,应用这种技巧,我得到:

#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;
}

将child div水平居中。