按中心定位HTML元素

时间:2016-02-22 13:33:42

标签: html css css3

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

在这个例子中:

  XXXXXXXXX
      |
      |
     123px

假设元素应该位于绝对位置left: 123px;,但文本在该点应该居中,而不是从它开始。元素文本是动态的,因此我无法在其上设置静态否定margin-left

是否有纯CSS方式来实现这一目标?在计算offsetWidth之后,衡量left然后设置width / 2的JS方法由于各种限制而在我的案例中发挥了作用。

3 个答案:

答案 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;
&#13;
&#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">
 &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

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