中心响应div具有未知高度并启用完全垂直滚动

时间:2015-10-19 23:27:45

标签: css responsive-design centering

我正试图将一个高度未知的div居中。

当视口高度小于div高度时,我找不到允许滚动到div顶部的解决方案。

HTML

<div>
  <p>This will be hidden when <br />
  window_height < div_width</p>
  <br />
  <br />
  <br />
 How to make it scroll to the top?
</div>

CSS

    body {
      background: grey;
    }
    p{
      background: green;
    }
    div {
      position: absolute;
      left: 50%;
      top: 50%;
      box-sizing: border-box;
      transform: translate(-50%, -50%);
      max-width: 500px;
      width:100%;
      height: 700px; /* Unknown*/
      padding: 20px;  
      background: red;
      color: white;
      text-align: center;
    }

http://codepen.io/Koopa/pen/GpypdX

谢谢

1 个答案:

答案 0 :(得分:1)

您无法滚动到div顶部的原因是因为带有负值的transform属性会将div屏幕关闭在较小的屏幕上。

在此演示中,transform被禁用:
http://codepen.io/anon/pen/wKpMyM

此外,当您对元素应用绝对定位时,请将其从文档的normal flow中取出。这意味着它的容器会忽略它。因此,bodyhtml元素的高度为零。

在此演示中,body有一个绿色边框(完全折叠):
http://codepen.io/anon/pen/RWxrod

要使布局正常工作,您可以为body提供最小高度(因此它可以与div一起展开),而不是以绝对定位为中心,使用{{3} }。

<强> CSS

html { height: 100%; } /* necessary for percentage heights to work */

body {
    background: grey;
    border: 10px solid green; /* for demo purposes */
    min-height: 100%; /* allow body to expand with children */
    display: flex; /* establish flex container */
    justify-content: center; /* center div horizontally, in this case */
    align-items: center; /* center div vertically, in this case */
}

p {
  background: green;
}

div {
    /* REMOVE
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%); */

    box-sizing: border-box;
    max-width: 500px;
    width:100%;
    height: 700px; /* Unknown*/
    padding: 20px;  
    background: red;
    color: white;
    text-align: center;
}

DEMO:flexbox

请注意,所有主流浏览器http://codepen.io/anon/pen/OyzMvV都支持flexbox。