如何创建一个包含灵活内容的DIV,跟随浏览器滚动条滚动

4
我正在创建一个带有可点击内容的网站,点击后会弹出一个固定宽度的DIV,其中包含更多信息。这些信息可能很长,需要在静态背景上垂直滚动(例如Pintrest)。我已经实现了基本的滚动效果,但是我遇到了一个问题:如何设置内容DIV的高度,以便正确地包裹所有内容。目前情况下,内容会溢出DIV的底部。
我在这里减少了一个简单的示例。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8" />
  <title>Scroller Test</title>
  <style>
    * {
     margin: 0;
    }
    html, body {
      height: 100%;
      background-color: #7A7A7A;
      overflow: hidden;
    }
    #scroller {
      position: fixed;
      top: 0px;
      left: 0px;
      bottom: 0px;
      right: 0px;
      overflow-x: none;
      overflow-y: scroll;
    }
    .infobox {
      position: absolute;
      top: 0px;
      left: 100px;
      width: 525px;
      height: 100%;
      z-index: 100;
      background-color: #fff;
      overflow: visible;
      display: block;
      padding: 0;
      margin: 50px 0px 50px 0px;
    }
    .infobox-content {
      position: absolute;
      width: 475px;
      margin: 0px 25px 0px 25px;
    }
  </style>
</head>
<body>
  <div id="scroller">
    <div class="infobox">
      <div class="infobox-content">
        <h2>Heading</h2>
        <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.</p>
        <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.</p>        
        <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.</p>        
        <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.</p>        
      </div>
    </div>
  </div>
</body>
</html>

这将导致: 出现问题的示例。 如果我省略 height,我的 DIV 将没有任何高度,因此根本不会显示任何白色背景。显然,我不能只为高度设置特定数量的像素。我尝试了调整边距、填充等等,但都无济于事。显然,我忽略了非常简单的东西,因为我已经在其他地方看到过这样做。查看其他网站的 CSS,我看不出自己错在哪里。
请注意,在此示例中,我仅在主要的“infobox” div 中有一个简单的内容 div,但在完整的网站中还有其他东西,例如图像库、按钮等,也将放在“infobox” 内。
2个回答

3

.infobox中添加以下属性:

min-height: 100%;

或者你可以完全删除高度属性。但是height: 100%不起作用(至少在fiddle上),因为它将高度相对于body/html设置。

然后将.infobox-content中的position: absolute更改为:

  position: relative;

这样,.infobox的高度将与.infobox-content一起"拉伸"。 http://jsfiddle.net/94B7H/2/

更接近了。关键似乎是将 infobox-content 设置为 position: relative;。谢谢。 - Dave Sag

2
如果您想将.info-box的高度设置为与.infobox-content相同,请在.infobox-content上将position:absolute更改为position:relative,并从.info-box中删除height:100%
这里有一个示例供您参考:http://jsfiddle.net/wandarkaf/UBJAZ/

抱歉,但这会在 DIV 中放置一个滚动条,这不是我想要的。请参见 Michelle Lara Lin 答案下面的我的评论。 - Dave Sag
没错,那基本上就可以了。不过Michelle在她的评论中比你早大约5分钟给出了相同的答案,所以公平起见,在选出获胜答案之前,我会给她一个机会来完善她的答案。 - Dave Sag

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