保持绝对定位的div相对于容器而非屏幕居中

3
我有一个绝对定位的
,它是从左侧和顶部居中于屏幕大小的。更新:请查看此处演示http://codepen.io/anon/pen/pJmdJo
.middle {
  top: 50%;
  left: 50%;
  position: absolute;
  transform: translate(-50%, -50%);
  transform-style: preserve-3d;
}

在此输入图片描述

例如,用户使用小尺寸的横屏手机浏览页面。(屏幕高度缩小)

在此输入图片描述

div会如预期地重叠,这不是我们想要的结果。 我希望得到的结果是:

在此输入图片描述

div的高度应该停止变小,不应小于我们的header的高度。 粘性页脚也应该停止超过限制。

注意: 正文的最小高度还不存在。我认为应该添加这个。 头部并不是真正的标题,它只是我的页面顶部部分,包括标志和网站名称。

与其他标签相关的代码:

html,
body {
  height: 100%;
  width: 100%;
  overflow: auto;
}
.wrapper {
  width: 100%;
  height: 100%;
  position: relative;
  overflow: hidden;
}
.header {
  margin-top: 20px;
}
.middle {
  top: 50%;
  left: 50%;
  position: absolute;
  transform: translate(-50%, -50%);
  transform-style: preserve-3d;
}
.footer {
  position: absolute;
  bottom: 0;
  width: 100%;
  height: 50px;
}
<body>
  <div class="wrapper">
    <div class="logo"></div>
    <div class="header">Welcome</div>
    <div class="middle">Description</div>
    <div class="footer"></div>
  </div>
</body>


好奇一下,如果“描述”div有很多内容会发生什么情况?这种情况下,它会重叠在标题上方,并可能位于页脚下方(取决于任何z-index值)。 - Marc Audet
@MarcAudet 说得好,我也想了解那个问题。但在我的情况下没有。只是几行介绍网站的内容。 - xperator
1个回答

2
根据您的图片,您将居中的div绝对定位于整个包含块。因此,它始终会相对于该容器居中。
如果您想将居中的div保持在浅灰色区域内,那么您需要为该部分分配一个"position: relative",然后使居中的div成为浅灰色元素的子元素。然后,绝对定位的偏移量将与浅灰色框相关。
更新(基于评论和修改后的问题)
看起来您遇到的问题主要是由固定高度(像素)和相对高度(百分比)组合而成。如果您只在div容器中使用百分比高度,则页面将平滑缩放。
请尝试调整CSS:
.logo {
    margin: 10px auto 0;
    background: rgba(0, 0, 0, 0) url("... omitted for demo...") no-repeat scroll 0 0;
    height: 20%; /* changed from 80px; */
    width: 80px;
}

.middle {
  position:relative;
  height: 60%; /* changed from 100% */
  background-color: lightgray;
}

.footer {
  position: absolute;
  bottom: 0;
  width: 100%;
  height: 20%; /* changed from 50px */

DEMO


你的意思是我应该将居中的 div 包裹在一个具有“相对定位”的容器内吗?但这样它就不会居中于整个屏幕尺寸,而是居中于其容器。此外,页眉没有固定高度。它根据媒体查询而变化。 - xperator
谢谢提供 jsfiddle 链接,这非常接近我想要的,但并不是我想要实现的。很抱歉我自己无法复制它。让我解释一下。这是一个移动优先的设计。我在顶部有一个标志,下面是一个标题,然后是中心描述网站的文本,然后是一个带有登录和注册按钮的页脚。尝试在移动设备上访问 Twitter 或 Tumblr 等网站,您将完全了解我的页面布局的想法。问题是,如果我们在非常小的屏幕上访问页面,或者在横向模式下查看它,我的居中 div 将重叠标志、标题,所有东西都会混乱。 - xperator
我明白你的意思。能否将你的代码放在一个fiddle演示中?这样我和其他人就可以看到哪些代码导致了问题,并希望为你提供正确的调整。 - Michael Benjamin
好的,我想就是这样。如果看起来很丑,请见谅。尝试调整窗口大小以查看问题 http://codepen.io/anon/pen/zGQEJv - xperator
让我们在聊天中继续这个讨论 - xperator
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接