根据中心句柄定位HTML元素的正确方法是什么?
在这个例子中:
XXXXXXXXX
|
|
123px
假设元素应该位于绝对位置left: 123px;
,但文本在该点应该居中,而不是从它开始。元素文本是动态的,因此我无法在其上设置静态否定margin-left
。
是否有纯CSS方式来实现这一目标?在计算offsetWidth
之后,衡量left
然后设置width / 2
的JS方法由于各种限制而在我的案例中发挥了作用。
答案 0 :(得分:4)
一个可能性是设置转换translateX -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>
&#13;
答案 1 :(得分: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">
<-- 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。
答案 2 :(得分: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;
}
您还可以使用非绝对方法,但父元素位置应该是相对的:
.element-parent{
position: relative;
}
.element-parent .element{
margin: 0 auto;
}
如果使用面向文本的元素(内联块),则可以使用IE 7 +:
.element-parent{
text-align: center;
}
.element-parent .element{
display: inline-block;
}