2016-02-22 69 views
4

根据中心句柄定位HTML元素的正确方法是什么?按中心定位HTML元素

在这个例子中:

XXXXXXXXX 
     | 
     | 
    123px 

假设元件应位置的绝对位置left: 123px;但文字应在该点为中心,在它不能启动。元素文本是动态的,所以我没有办法在其上设置静态负数margin-left

有没有一种纯CSS的方式来实现这一目标?在计算width/2之后,测量offsetWidth然后设置left的JS方式由于各种限制而不会在我的情况下起作用。

+0

也许使用负利润率...这项技术将围绕您的内容......也许你也可以申请另一个负保证金文本得到它为中心的,只要你喜欢:http://web.archive.org/web/20050204013909/http://bluerobot.com/web/css/center2.html – albert

+6

尝试的jsfiddle添加到您的文章^ _ ^! – Microsmsm

+1

@albert看到我的更新,这是一个动态元素 –

回答

2

这是相当容易实现这一点,有几种方法去做吧。由于您没有为您的示例发布任何HTML构造,因此我只会补充一些。

诀窍是具有其具有内联块的父元素的期望偏移(123px)和元件内部你必须与-50%的左边界另一个内联区元素。相对位置,你会有你正在寻找的效果。

#container { 
 
    position: relative; 
 
} 
 
#line { 
 
    width: 100px; 
 
    height: 100px; 
 
    left: 123px; 
 
    position: absolute; 
 
    border-left: 1px solid red; 
 
} 
 
#text { 
 
    left: 123px; 
 
    top: 50px; 
 
    display: inline-block; 
 
    position: relative; 
 
} 
 
#text p { 
 
    position: relative; 
 
    background: green; 
 
    margin-left: -50%; 
 
    display: inline-block; 
 
    color: #fff; 
 
    text-align: center; 
 
    padding: 10px; 
 
    box-sizing: border-box; 
 
}
<div id="container"> 
 
<div id="line"> 
 
&lt;-- 123px 
 
</div> 
 
<div id="text"> 
 
<p> 
 
This is some dynamic text<br>the div has no absolute set width. 
 
</p> 
 
</div></div>

有提到其他的方式,可能取决于你的总体布局/ HTML结构。我肯定会看一下flex-box属性,这里也可能适用。

如果你想玩它,这里是一个fiddle

+0

谢谢保罗,我独立地达到了这个方法,但它绝对有效! –

1

一些不同的方式用CSS来做到这一点:

如果你的元素是块:

.element{ 
    width: 200px; /* Full width */ 
    left: 50%; 
    margin-left: -100px; /* Half width */ 
    position: absolute; 
    display: block; 
} 

,或者,如果你使用CSS3

.element{ 
    width: 200px; /* Full width */ 
    left: calc(50% - 100px); 
    position: absolute; 
    display: block; 
} 

你也可以有一个非绝对的方法,但是的父元素位置s HOULD相

.element-parent{ 
    position: relative; 
} 

.element-parent .element{ 
    margin: 0 auto; 
} 

如果使用面向文本的元素(inline-block的),这一点也适用IE 7+:

.element-parent{ 
    text-align: center; 
} 

.element-parent .element{ 
    display: inline-block; 
} 
+0

阅读问题*。假设元素应该位于绝对位置left:123px;但文本应该集中在这一点上,而不是从它开始。元素文本是动态的,所以我没有办法设置一个静态的负边界留在它上面。* – dippas

+0

@dippas在这种情况下,我认为'margin:0 auto;'会工作的很好。 ^^ – CarlosCarucce

4

一个posibility是设置变换平移X -50%

p { 
 
    position: relative; 
 
    display: inline-block; 
 
     left: 100px; 
 
    transform: translateX(-50%); 
 
}
<p>ONE</p> 
 
<br> 
 
<p>TWO, LONGER</p> 
 
<br> 
 
<p>THREE, the longest</p>

+0

好的解决方案。我不知道translateX – CarlosCarucce

+0

upvote,这是当然最干净的解决方案 – fcalderan

+0

非常好的答案! –