如何根据中心点定位HTML元素?
在这个例子中:
XXXXXXXXX
|
|
123px
假设元素应该在绝对位置
left: 123px;
,但文本应该在该点居中,而不是从该点开始。元素文本是动态的,所以我无法在其上设置静态负值 margin-left
。有没有一种纯CSS的方法来实现这一点?由于各种限制,通过测量
offsetWidth
然后计算 width / 2
并设置 left
的JS方式可能无法在我的情况下起作用。如何根据中心点定位HTML元素?
在这个例子中:
XXXXXXXXX
|
|
123px
left: 123px;
,但文本应该在该点居中,而不是从该点开始。元素文本是动态的,所以我无法在其上设置静态负值 margin-left
。offsetWidth
然后计算 width / 2
并设置 left
的JS方式可能无法在我的情况下起作用。一种可能的方法是设置 transform 属性的 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>
实现这个效果相对比较简单,有几种方法可以做到。由于您没有发布任何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属性,这也可能适用于此处。
如果您想尝试一下,请参考此处的示例。
以下是一些使用CSS实现的不同方法:
如果您的元素是块级元素:
.element{
width: 200px; /* Full width */
left: 50%;
margin-left: -100px; /* Half width */
position: absolute;
display: block;
}
.element{
width: 200px; /* Full width */
left: calc(50% - 100px);
position: absolute;
display: block;
}
.element-parent{
position: relative;
}
.element-parent .element{
margin: 0 auto;
}
.element-parent{
text-align: center;
}
.element-parent .element{
display: inline-block;
}
margin: 0 auto;
很适合。^^ - CarlosCarucce