2011-05-16 41 views
0

我有一個三行的表。我有一個主#container div(高度100%),裏面是一個3行的表格。第一行和最後一行具有固定大小的內容。在第二行是一個帶100%高度和溢出的#content div:auto。 (實際上表格有更多的行,頁面有更多的div,但爲了清晰起見,我對此問題進行了調整)。如何在不顯示瀏覽器垂直滾動條的情況下自動縮小100%div?

如果#content中的內容比fit更多,則應在該div的內容旁邊顯示一個垂直滾動條。但是,垂直滾動條出現在瀏覽器窗口本身。但是,當我將#content div設置爲固定大小時,該垂直滾動條確實出現在正確的位置。

我一定在做錯事,或者可能會誤解某些事情:)任何想法?也許有jQuery/JavaScript那裏可以監視頁面,並加載/調整瀏覽器的大小,縮小特定的div?

編輯:我剛剛創建了一個小例子:http://wierdaonline.com/softest.html

在理想情況下,整個事情(表)應該總是在瀏覽器窗口中可見,沒有比其他#內容的任何窗口滾動條DIV。

+0

您是否有示例頁面來說明問題?如果我理解正確,你有一個100%身高的div,然後在多個div中,其中一個是100%高度?這似乎沒有加起來。 – 2011-05-16 23:35:33

+0

不幸在這個時刻不是一個例子。但是,您可以將此視爲具有3行的表格的頁面。第一行有一個標題(一行文本),第二行有一個div,其高度爲100%,內容很多,第三行有一個文本行頁腳。 基本上,整個事情應該始終在瀏覽器窗口中可見,以便在調整瀏覽器大小時,只調整#content div的第二行並使第一行和第三行保持可見狀態。 就像一個accordeon,當你把它推入自己時,除了前面和後面,各個袋子都會縮小。 – 2011-05-17 00:20:37

回答

0

在div中設置overflow: scroll。這不應該需要Javascript。

+0

不總是顯示滾動條,但仍然讓內容超出瀏覽器窗口,因此也顯示瀏覽器窗口滾動條。主要(#maincontainer)內容應該始終適合瀏覽器窗口內部,因此如果瀏覽器太小而無法顯示所有內容,則只有#content div應具有滾動條。 – 2011-05-16 23:29:02

0

編輯:這些改變應該適用於身高,如果你願意,也可以用寬度做類似的事情。

的javascript:

window.onresize = function() { 
    var tehdiv = document.getElementById('content2'); 
    if($(window).height() < 100) { tehdiv.height = 50; } 
    else if($(window).height() > 2000) { tehdiv.height = '100%'; } 
    else { tehdiv.height = ($(window).height()/2);} 
}; 

內容div的表:

<td valign='top' id='content2'> 

會是這樣的工作?

window.onresize = function() { 
    var minh = 50; 
    var minw = 50; 
    var tehh = (window.height/2); 
    var tehw = (window.width/2); 
    var tehdiv = document.getElementById('yourdiv'); 
    tehdiv.height = (tehh > minh)? tehh : minh; 
    tehdiv.width = (tehw > minw)? tehw : minw; 
}; 

這將使擴展到一半的窗口大小,只要它可以做大煥50.您也可以改變最小到最大,並使它在這一點上進行tehdiv.height = 100%。

+1

我希望我永遠不需要維護你的代碼。 – Jason 2011-05-16 23:47:50

+0

不幸的是,這個函數在我的頁面上沒有做任何事情。 – 2011-05-17 00:12:56

+0

@Jason是的,我知道這不是很好的編碼。考慮到它有多小,它並不意味着是好的,甚至是容易理解的,只是想法他可以做到這一點。我假設提問者知道有足夠的js來重寫代碼,因爲我不傾向於爲他們編寫人員代碼。隨意將其修復到您的規格。 – Truk 2011-05-17 00:33:09

0

#container 100%是頁面高度的100%,可以超過窗口高度。根據你想要達到的目標,將HTML和身高設置爲100%(=窗口的100%)可能會有所幫助。

+0

我只是嘗試設置HTML,身體{身高:100%;}但沒有任何區別 – 2011-05-17 00:13:15

+0

此外,您可能必須設置桌子到100%的高度,然後第一行和最後一行的高度爲1px,中間一行爲高度的任何東西,這將控制表格 – leblonk 2011-05-17 00:18:18

1

這是很容易,而無需使用表和使用固定位置來創建一個固定的頁眉和頁腳:

#header 
{ 
    position: fixed; 
    top: 0; 
    height: 20px; 
} 

#middle 
{ 
    position: fixed; 
    top: 20px; 
    bottom: 20px; 
    overflow: auto; 
} 

#footer 
{ 
    position: fixed; 
    bottom: 0; 
    height: 20px; 
} 
+0

+1你擊敗了我...我做了一個演示:http ://jsfiddle.net/Mottie/fkNuc/ – Mottie 2011-05-17 01:02:46

+0

不使用表格不幸的是,我的應用程序目前是基於表格(表格中有大量的行和表格),我已經嘗試過擺脫所有的表格,但到目前爲止還沒有成功,擺脫表是一個長期的項目,我猜是不是有辦法讓它與表和所有工作?很好的例子btw @fudgey – 2011-05-17 01:36:44

0

嘛,因爲你沒有選擇,只能使用表,我修改了HTML,但實際上留下的CSS從我張貼在上面註釋的演示一樣,check it out here - 我發現唯一的問題是在IE7在頁眉和頁腳的表格單元格不會在去100%:

CSS

#header, #footer { 
    position: absolute; 
    top: 0; 
    left: 0; 
    right: 0; 
    height: 20px; 
    border: #000 1px solid; 
    margin: 5px; 
} 
#footer { 
    top: auto; 
    bottom: 0; 
} 
#content { 
    position: absolute; 
    top: 25px; 
    left: 0; 
    bottom: 25px; 
    right: 0; 
    overflow-y: auto; 
    background: #ddd; 
    margin: 5px; 
} 

HTML

<table id="page"> 
    <thead> 
     <tr><td id="header">Header</td></tr> 
    </thead> 
    <tfoot> 
     <tr><td id="footer">Footer</td></tr> 
    </tfoot> 
    <tbody> 
     <tr><td><div id="content">Content goes here</div></td></tr> 
    </tbody> 
</table> 

它仍然是最好not use tables,如果你避開周圍切換HTML。

+0

謝謝你的這個例子。它適用於t ables :)我試圖在我自己的應用程序中使用很多嵌套的表格和行來實現它,但不成功。它似乎是可能的(你證明了它),但只是沒有我的設置。我很快會再有一次將它們全部轉換爲無表格設置。還不確定如何去做,因爲它以前慘遭失敗。 – 2011-05-17 17:45:27

+0

確保你在那裏有'thead','tfoot'和'tbody',並且'tfoot'在'tbody'之前......將ID添加到tr可能會更好,而不是TD。 – Mottie 2011-05-17 23:18:20

+0

我知道你的意思,但我有負載嵌套表格和行和他們之間混合的div。我無法知道每個元素的確切大小。 (就像你對頁眉/頁腳所做的一樣,並從內容div中減去)。我可以顯示應用程序,但我不想在這裏發佈網址。 – 2011-05-18 00:58:31

相關問題