2016-10-08 66 views
0

我正在一个页面上显示一棵家族树,我有几个我无法解决的问题。如果该树超过3或4代,则包含它的div比视口大。因此,我需要div可滚动和可拖动(我使用dragscroll.js作为拖动位)。制作Div可滚动

问题1:为了适应视口中的可用空间,我需要div的宽度和高度灵活。这在宽度方向上工作良好,但div不能在高度方向上滚动,除非它具有固定的像素高度。我尝试了各种各样的替代品(没有高度,高度在%,高度:自动,高度:继承),但在所有情况下,div不可滚动,而滚动条出现在整个窗口上。

问题2:首次打开页面时div是左对齐的,而我希望它开始居中对齐。我在Centering a DIV that is wider than the viewport之前询问过这个问题,但我没有得到有效的答案。自那以后事情发生了一些变化,所以也许有人可以帮助这次。

的HTML是

<-- Header --> 
<div id="wholetree"> 
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post" name="add_gen"> 
<input type="hidden" name="MM_insert" value="add_gen"> 
<a href="javascript:void()" onclick="document.add_gen.submit()" class="tree_button">Add Another Generation</a> 
</form> 
<form action="map.php" method="get" name="view_map"> 
<input type="hidden" name="origin" value="<?php echo $origin_id ?>"> 
<a href="javascript:void()" onclick="document.view_map.submit()" class="tree_button view_button">View the Map</a> 
</form> 
<div id="tree" class="dragscroll"> 
<-- Unordered list to make the family tree --. 
</div> 

而且CSS的相关部分是

#wholetree{position:relative;top:96px;padding-top:15px} 

#tree { 
position:relative; 
overflow:auto; 
padding:10px; 
height:400px; 
background-color:#f2f2ff; 
border:#CCF 1px solid 
} 

#tree ul { 
padding: 0 0 20px; 
position: relative; 
} 

#tree li { 
display: inline-block; 
white-space: nowrap; 
vertical-align: bottom; 
margin: 0 -2px 0 -2px; 
text-align: center; 
list-style-type: none; 
position: relative; 
padding: 0 5px 20px 5px; 
} 

页面的样品可以在这里看到:http://myrootsmap.com/soexample.php

SOLUTIONS

问题1: AllDani指出我的权利方向。水平滚动工作正常,所以我改变了溢出:自动溢出-x:自动。然后添加overflow-y:scroll并将高度调整为在大多数屏幕上看起来正确的东西。这并不理想,因为有时候会有多余的滚动条,当树很小时,当树非常大时有第二个(主体)滚动条,但我认为我可以忍受它。 所以换到CSS是

#tree { 
position:relative; 
overflow-x:auto; 
overflow-y:scroll; 
padding:10px; 
height:490px; 
background-color:#f2f2ff; 
border:#CCF 1px solid; 
} 

问题2: jQuery的拯救了我这里。我用scrollWidth测量了div,然后半按滚动div以使其与scrollLeft居中。同时我也用scrollTop来滚动div,如果它比可用空间高。

$(document).ready(function(){ 
var windowWidth = $(window).width(); 
var treeWidth = $('#tree').get(0).scrollWidth; 
var d = $('#tree'); 
d.scrollTop(d.prop("scrollHeight")); 
d.scrollLeft((treeWidth-windowWidth)/2); 
}); 

我会离开样本页面,以便任何人都可以看到它是如何工作在它的最终形式。

+0

@AllDani,我当然有。我觉得我已经尝试了#wholetree和tree中每个高度和溢出的排列。但我愿意接受建议。 – TrapezeArtist

+0

@AllDani,现在你已经找到了我还没有尝试过的东西!乍看之下,它看起来好像可以工作,虽然它不是很漂亮。我会设置溢出:滚动,然后找到一个固定的高度,这是有道理的(当标题被扣除时,可能略低于标准的笔记本电脑屏幕)。还有一些工作要做,以找到最好的解决方案,但我现在要去吃午饭了。顺便说一句,我刚刚发现示例页面无法正常工作,所以我现在修复了这个问题。 – TrapezeArtist

+0

@Trapeze:请不要将您的解决方案添加到您的问题。相反,你应该将它们*作为答案*。然后,您可以在等待48小时后接受自己的答案。 –

回答

1

overflow: scroll;添加到您的CSS。