将 <div> 元素定位在屏幕中心

IT技术 javascript css html
2021-02-02 14:17:21

无论屏幕大小如何,我都想在屏幕中央放置一个<div>(或一个<table>)元素。换句话说,“顶部”和“底部”的剩余空间应该相等,“右侧”和“左侧”的左侧空间应该相等。我想只用 CSS 来完成这个。

我已经尝试了以下但它不工作:

 <body>
  <div style="top:0px; border:1px solid red;">
    <table border="1" align="center">
     <tr height="100%">
      <td height="100%" width="100%" valign="middle" align="center">
        We are launching soon!
      </td>
     </tr>
    </table>
  </div>
 </body>

注意:
无论<div>元素(或<table>)是否随网站滚动都可以。只是希望它在页面加载时居中。

6个回答

简单的方法,如果你有固定的宽度和高度:

#divElement{
    position: absolute;
    top: 50%;
    left: 50%;
    margin-top: -50px;
    margin-left: -50px;
    width: 100px;
    height: 100px;
}​

请不要使用内联样式!这是一个工作示例http://jsfiddle.net/S5bKq/

@woho87 为什么不使用内联样式?出于众所周知的原因,或者对于特定示例,我还应该了解更多信息吗?
2021-03-15 14:17:21
对于那些寻求动态高度的人:stackoverflow.com/questions/396145/...
2021-04-01 14:17:21
但是,将 divElement 的顶部设置为 '%' 单位会使 divElement 占用垂直空间,除非 divElement 放置在相关元素内。
2021-04-07 14:17:21
@KatrinRaimond 这是众所周知的原因,记录在此处stackoverflow.com/questions/2612483/...和此处webdesign.about.com/od/css/a/aa073106.htm
2021-04-12 14:17:21
是位置:固定还是位置:绝对?
2021-04-12 14:17:21

随着现在越来越普遍地支持转换,您可以在不知道弹出窗口的宽度/高度的情况下执行此操作

.popup {
    position: fixed;
    top: 50%;
    left: 50%;
    -webkit-transform: translate(-50%, -50%);
    transform: translate(-50%, -50%);
}

简单!JSFiddle在这里:http : //jsfiddle.net/LgSZV/

更新:查看https://css-tricks.com/centering-css-complete-guide/有关 CSS 居中的相当详尽的指南。将它添加到这个答案中,因为它似乎吸引了很多眼球。

@fotanus 当开发人员停止支持 IE 9 < 用户将迁移或更新他们的浏览器。
2021-03-26 14:17:21
+1 是您不必指定高度和宽度或使用 Javascript 的唯一解决方案。
2021-03-31 14:17:21
不是那么普遍。IE8 仍然保持20% 的浏览器份额并且不支持它所以只为 IE9+ 选择这个。
2021-04-06 14:17:21
如果弹出窗口中的内容正在使用overflow:auto,则在 IE9 中滚动会被搞砸。:(
2021-04-12 14:17:21
@DIegoVieira 不幸的是,这不是事情的运作方式。看到公地的悲剧所以人们会继续支持 IE8,因为不想失去这个份额,人们会继续使用,因为它有效。
2021-04-13 14:17:21

设置宽度和高度,你很好。

div {
  position: absolute;
  margin: auto;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  width: 200px;
  height: 200px;
}

如果您希望元素尺寸灵活(并且不关心旧版浏览器),请使用XwipeoutX的答案。

它运作良好,但其运作背后的逻辑是什么?
2021-04-01 14:17:21
这是最干净和最简单的答案,也适合移动设备+1
2021-04-10 14:17:21

它适用于任何对象。即使您不知道尺寸:

.centered {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
这是最好的答案。谢谢!
2021-04-05 14:17:21

现在,使用 HTML 5 和 CSS 3 更容易:

<!DOCTYPE html>
<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <style>
            body > div {
                position: absolute;
                top: 0;
                bottom: 0;
                left: 0;
                right: 0;

                display: flex;
                flex-wrap: wrap;
                align-items: center;
                justify-content: center;
            }
        </style>
    </head>
    <body>
        <div>
            <div>TODO write content</div>
        </div>
    </body>
</html>