2014-10-08 180 views
1

我有2个滚动div(用红色标出)不会滚动到它们各自的底部。我似乎无法弄清楚需要调整什么来修复它。滚动div不滚动到内容的底部

粗框框是一个模拟的浏览器窗口。

http://jsfiddle.net/jsk55rfb/4/

enter image description here

HTML

<div class="container"> 
    <div class="header"></div> 
    <div class="sidebar"></div> 
    <div class="main"> 
     <div class="detail-container"> 
      <div class="top-info"></div> 
      <div class="items-container"> 
       <div class="item blue"></div> 
       <div class="item orange"></div> 
       <div class="item blue"></div> 
       <div class="item orange"></div> 
      </div> 
     </div> 
     <div class="main-container"> 
      <div class="main-header"></div> 
      <div class="main-content"> 
       <div class="item grey"></div> 
       <div class="item purple"></div> 
       <div class="item grey"></div> 
       <div class="item purple"></div> 
       <div class="item grey"></div> 
       <div class="item purple"></div> 
       <div class="item grey"></div> 
       <div class="item purple"></div> 
      </div> 
     </div> 
    </div> 
</div> 

CSS

.container { 
    height: 500px; 
    width: 500px; 
    border: solid 3px black; 
    overflow: hidden; 
} 

.header { 
    height: 25px; 
    background-color: #333; 
    right: 0; 
    left: 0; 
} 

.sidebar { 
    position: fixed; 
    top: 0; 
    bottom: 0; 
    width: 75px; 
    margin-top: 35px; 
    border: solid 1px grey; 
} 

.main { 
    height: 100%; 
    padding-left: 75px; 
} 

.main-container { 
    width: 65%; 
    height: 100%; 
} 

.main-content { 
    height: 100%; 
    overflow-y: scroll; 
    border: solid 1px red; 
} 

.main-header { 
    height: 20px; 
    border: 1px solid black; 
} 

.detail-container { 
    float: right; 
    width: 35%; 
    height: 100%; 
    border: solid 1px grey; 
} 

.top-info { 
    padding: 75px 0; 
} 

.items-container { 
    height: 100%; 
    overflow-y: scroll; 
    border: solid 1px red; 
} 

.item { 
    padding: 100px 0; 
} 

.blue { background-color: blue; } 
.orange { background-color: orange; } 
.grey { background-color: grey; } 
.purple { background-color: purple; } 

.content { 
    width: 65%; 
    height: 100%; 
} 

回答

1

您有容器和溢出设置为隐藏一个固定的高度。由于divs超过这个高度,溢出不能被看到。

试试这个:

.container { 
 
    height: 500px; 
 
    width: 500px; 
 
    border: solid 3px black; 
 
    overflow: scroll; 
 
} 
 

 
.header { 
 
    height: 25px; 
 
    background-color: #333; 
 
    right: 0; 
 
    left: 0; 
 
} 
 

 
.sidebar { 
 
    position: fixed; 
 
    top: 0; 
 
    bottom: 0; 
 
    width: 75px; 
 
    margin-top: 35px; 
 
    border: solid 1px grey; 
 
} 
 

 
.main { 
 
    height: 100%; 
 
    padding-left: 75px; 
 
} 
 

 
.main-container { 
 
    width: 65%; 
 
    height: 100%; 
 
} 
 

 
.main-content { 
 
    height: 100%; 
 
    overflow-y: scroll; 
 
    border: solid 1px red; 
 
} 
 

 
.main-header { 
 
    height: 20px; 
 
    border: 1px solid black; 
 
} 
 

 
.detail-container { 
 
    float: right; 
 
    width: 35%; 
 
    height: 100%; 
 
    border: solid 1px grey; 
 
} 
 

 
.top-info { 
 
    padding: 75px 0; 
 
} 
 

 
.items-container { 
 
    height: 100%; 
 
    overflow-y: scroll; 
 
    border: solid 1px red; 
 
} 
 

 
.item { 
 
    padding: 100px 0; 
 
} 
 

 
.blue { background-color: blue; } 
 
.orange { background-color: orange; } 
 
.grey { background-color: grey; } 
 
.purple { background-color: purple; } 
 

 
.content { 
 
    width: 65%; 
 
    height: 100%; 
 
}
<div class="container"> 
 
    <div class="header"></div> 
 
    <div class="sidebar"></div> 
 
    <div class="main"> 
 
     <div class="detail-container"> 
 
      <div class="top-info"></div> 
 
      <div class="items-container"> 
 
       <div class="item blue"></div> 
 
       <div class="item orange"></div> 
 
       <div class="item blue"></div> 
 
       <div class="item orange"></div> 
 
      </div> 
 
     </div> 
 
     <div class="main-container"> 
 
      <div class="main-header"></div> 
 
      <div class="main-content"> 
 
       <div class="item grey"></div> 
 
       <div class="item purple"></div> 
 
       <div class="item grey"></div> 
 
       <div class="item purple"></div> 
 
       <div class="item grey"></div> 
 
       <div class="item purple"></div> 
 
       <div class="item grey"></div> 
 
       <div class="item purple"></div> 
 
      </div> 
 
     </div> 
 
    </div> 
 
</div>

+0

这解决了我的问题,但现在浏览器窗口(厚框)也会滚动。 – mnort9 2014-10-08 16:44:19

+0

我希望整个浏览器窗口不滚动类似于jsfiddle或其他单页面应用程序。 – mnort9 2014-10-08 16:48:07

+0

厚盒子是容器,因为它有500px的固定高度,如果你不想滚动它,里面的div必须适合在500px内,否则它们将不会完全可见 – chiapa 2014-10-08 16:48:35

0

当您使用100%的高度将其设置为全高而与其它同级元素。所以他们是在100%的父元素,但然后头被推倒。你将不得不在所有元素上使用固定的高度。或设置一个20%和其他80%等。

.main-content { width: 452px; } 
.items-container {width: 352px; } 
1

我可以用一些JavaScript解决这个问题。只要标记结构没有改变,这应该适用于其他块的任何内容大小。

祝你好运!

$(function(){ 
//creating vars based on jquery objects 
$itemsContainer = $('.items-container'); 
$mainContent = $('.main-content'); 

$container = $('.container'); 
$header = $('.header'); 
$mainHeader = $('.main-header');  

//calculating heights 
var containerH = $container.height();  
var headerH = $header.height();  
var mainHeaderH = $mainHeader.height(); 

//assigning new height to main-content class 
$mainContent.css("height", (containerH - headerH - mainHeaderH) + "px"); 

//similar operation for items-container 
//creating vars based on jquery objects 
$topInfo = $('.top-info'); 

//calculating heights 
var topInforH = $topInfo.outerHeight(); //since in your example top-info has no content only padding, you will need to use the method outerHeight instead of height 

//assigning new height to main-content class 
$itemsContainer.css("height", (containerH - headerH - topInforH) + "px"); }); 

顺便说一句,我更新了您的jsfiddle我的解决方案,这样你就可以对其进行测试。

+0

这真棒!我只是想知道是否更清洁使用这个或重做我的HTML/CSS不依赖于JS。 – mnort9 2014-10-08 17:12:30

+0

就像其他人说的一样,主要的问题是如果你的元素在你想要的元素的顶部有你的元素的兄弟姐妹,你就不能使用100%的高度。因此,解决方案是找到适合您的容器的“高度”。这是JS自动为你做的,因为我认为内容将是动态的。你当然可以重构你的HTML/CSS,但请记住“100%”问题。 – corzoit 2014-10-08 17:16:03