Text-align:center 和 margin:0 auto 不适用于绝对定位的元素

jes*_*ica 2 html javascript css jquery css-position

我试图在中心对齐 div,但 text-align: center 和 margin: 0 auto 似乎都不适用于绝对定位的元素。我假设两者都不适用于绝对定位的元素。在这种情况下,我该怎么办呢?

#wrap {
  border: 1px solid black;
  position: relative;
  width: 500px;
  height: 250px;
  margin: 0 auto;
  text-align: center;
}
#absolute {
  border: 1px solid red;
  position: absolute;
  display: block;
  bottom: 0;
  margin: 0 auto;
  cursor: pointer;
}
Run Code Online (Sandbox Code Playgroud)
<div id='wrap'>
  <div id='absolute'>Click Me</div>
</div>
Run Code Online (Sandbox Code Playgroud)

Jos*_*ier 5

在不更改 HTML 的情况下,水平居中元素的最简单方法是将left: 50%和组合起来transform: translateX(-50%)。这实际上会将元素定位到右侧,然后通过将其转换到左侧50%来替换元素宽度的一半。-50%这样做时,无论宽度如何,元素都将水平居中,这意味着您不需要对任何值进行硬编码。

position: absolute;
left: 50%;
transform: translateX(-50%);
Run Code Online (Sandbox Code Playgroud)

更新的片段:

position: absolute;
left: 50%;
transform: translateX(-50%);
Run Code Online (Sandbox Code Playgroud)
#wrap {
  border: 1px solid black;
  position: relative;
  width: 500px;
  margin: 0 auto;
  height: 80px;
}
#absolute {
  border: 1px solid red;
  position: absolute;
  transform: translateX(-50%);
  left: 50%;
  bottom: 0;
  cursor: pointer;
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您可以更改 HTML,只需将left: 0和添加right: 0到绝对定位的 element 元素中,即可使其采用父容器的宽度。然后你可以添加text-align: center以使子元素居中:

更新的片段:

<div id="wrap">
  <div id="absolute">Click Me</div>
</div>
Run Code Online (Sandbox Code Playgroud)
#wrap {
  border: 1px solid black;
  position: relative;
  width: 500px;
  margin: 0 auto;
  height: 80px;
}
#absolute {
  position: absolute;
  left: 0; right: 0;
  bottom: 0;
  text-align: center;
}
#absolute > span {
  border: 1px solid red;
  cursor: pointer;
}
Run Code Online (Sandbox Code Playgroud)