中心对齐固定位置div

Kyl*_*yle 108 html center css-position alignment

我正试图position:fixed在我的页面上找到一个居中对齐的div .

我总是能够使用这个"hack"来完成定位的div

left: 50%; width: 400px; margin-left:-200px
Run Code Online (Sandbox Code Playgroud)

... margin-left的值是div宽度的一半.

这似乎不适用于固定位置div,而只是将它们的最左边角放置在50%并忽略margin-left声明.

有关如何解决此问题的任何想法,以便我可以居中对齐固定定位元素?

如果你能告诉我一个更好的方法来对齐绝对定位的元素而不是我上面概述的方式,我会投入奖金M&M.

emz*_*ero 167

Koen的答案并不完全集中于元素.

正确的方法是使用CCS3 transform财产.虽然在某些旧浏览器中不支持它.我们甚至不需要设置固定或相对width.

.centered {
    position: fixed;
    left: 50%;
    transform: translate(-50%, 0);
}
Run Code Online (Sandbox Code Playgroud)

在这里工作jsfiddle比较.

  • @Alex `left: 50%` 将 div 移动到页面的 50%。但是你必须记住,它从 div 的左侧开始移动它,因此 div 还没有居中。`translate(-50%, 0)` 基本上是 `translateX(-50%)` 考虑 div 的当前宽度并将其从实际位置向左侧移动 -50% 的宽度。 (5认同)
  • 真正的答案+1 (4认同)
  • 非常简单但非常有用.谢谢. (2认同)

Koe*_*oen 164

对于具有相同问题但具有响应式设计的人,您还可以使用:

width: 75%;
position: fixed;
left: 50%;
margin-left: -37.5%;
Run Code Online (Sandbox Code Playgroud)

div即使采用快速响应的设计,这样做也始终使您的固定在屏幕上居中.

  • @aurora - 它是位置设置的-1/2(在这种情况下是` - (75/2)`) (7认同)
  • 这些37.5%来自哪里? (6认同)
  • 这帮我搞了一个RWD项目:) (2认同)
  • Cropis有更好的解决方案 (2认同)

and*_*ari 36

您也可以使用flexbox.

.wrapper {
  position: fixed;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
  
  /* this is what centers your element in the fixed wrapper*/
  display: flex;
  flex-flow: column nowrap;
  justify-content: center; /* aligns on vertical for column */
  align-items: center; /* aligns on horizontal for column */
  
  /* just for styling to see the limits */
  border: 2px dashed red;
  box-sizing: border-box;
}

.element {
  width: 200px;
  height: 80px;

  /* Just for styling */
  background-color: lightyellow;
  border: 2px dashed purple;
}
Run Code Online (Sandbox Code Playgroud)
<div class="wrapper"> <!-- Fixed element that spans the viewport -->
  <div class="element">Your element</div> <!-- your actual centered element -->
</div>
Run Code Online (Sandbox Code Playgroud)

  • 为什么还要提及中心和对齐="中心"?text-align:center就是这样 (12认同)

Bhi*_*bim 31

从上面的帖子来看,我认为最好的方法是

  1. 有一个固定的div width: 100%
  2. 在div中,用margin-left: auto和创建一个新的静态div margin-right: auto,或者用于表格align="center".
  3. Tadaaaah,你现在已经集中了你的固定div

希望这会有所帮助.

  • 如果你需要将固定宽度的div居中,那么+1非常有用.例如990px​​. (2认同)

Kev*_*vin 7

普通的div应该用margin-left: automargin-right: auto,但这并不固定div的工作.解决这个问题的方法类似于Andrew的答案,但不使用弃用的<center>东西.基本上,只需给固定div一个包装器.

#wrapper {
    width: 100%;
    position: fixed;
    background: gray;
}
#fixed_div {
    margin-left: auto;
    margin-right: auto;
    position: relative;
    width: 100px;
    height: 30px;
    text-align: center;
    background: lightgreen;
}
Run Code Online (Sandbox Code Playgroud)
<div id="wrapper">
    <div id="fixed_div"></div>
</div
Run Code Online (Sandbox Code Playgroud)

这将使div中的固定div居中,同时允许div对浏览器做出反应.也就是说,如果有足够的空间,但将与浏览器的边缘发生碰撞,如果没有那么div会居中; 类似于常规的DIV居中如何反应.


小智 7

<div class="container-div">
  <div class="center-div">

  </div>
</div>

.container-div {position:fixed; left: 0; bottom: 0; width: 100%; margin: 0;}
.center-div {width: 200px; margin: 0 auto;}
Run Code Online (Sandbox Code Playgroud)

这应该做同样的事情。


LAX*_*MAR 5

如果要在垂直和水平方向上居中对齐固定位置 div,请使用此

position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
Run Code Online (Sandbox Code Playgroud)


Bla*_*ire 5

水平居中:

display: fixed;
top: 0; 
left: 0;
transform: translate(calc(50vw - 50%));
Run Code Online (Sandbox Code Playgroud)

水平和垂直居中(如果其高度与宽度相同):

display: fixed;
top: 0; 
left: 0;
transform: translate(calc(50vw - 50%), calc(50vh - 50%));
Run Code Online (Sandbox Code Playgroud)

无副作用:在 flexbox 中使用边距时不会限制元素的宽度