MozTW 討論區
https://forum.moztw.org/

在Firefox上的網頁使用Table的Scroll Bar的問題
https://forum.moztw.org/viewtopic.php?f=13&t=4031
1 頁 (共 1 頁)

發表人:  老陳 [ 2004-11-12, 17:43 ]
文章主題 :  在Firefox上的網頁使用Table的Scroll Bar的問題

我需要在Table上面有ScrollBar,垂直的ScrollBar要可以固定Header,只拉動Row,而水平要可以Row和Header連動

我研究了很久,發現mozilla可以很方便的達到"垂直的ScrollBar要可以固定Header"的需求: (比IE方便多了)
代碼:
 tbody {overflow=auto;width: 100%; height: 200px}


但是水平要可以Row和Header連動卻做不到也,除了自己寫javascript控制之外,還有沒有別的方法啊?我想這個問題只要有寫網頁的人就一定會碰到才對. :shock:

因為這個javascript控制不太好做,碰到解析度不一樣的話,就會對不準,唉... :lol:

發表人:  李某人 [ 2004-11-12, 22:29 ]
文章主題 : 

不太明你的問題...
row跟header是指什麼呢...?

跟據你的CSS, 我把row跟header分別理解成tbody跟thead...

引言回覆:
水平要可以Row和Header連動

這個...
在下認為不可能...

要做到thead跟tbody能在同一個scrollbar下操作, 馬上想到的是用一個div包著它們, 然後把oveflow設成auto或是scroll...
但條件是tbody, thead任一的width必須超過div, 而且不能有horizontal scrollbar (要不就沒意思)...

但在下試驗過這是不可能的...

因為table width有特殊算法...
跟據CSS2.1 Specs, 不論table-layout的value是fixed還是auto, table-cell的width都不可能比parent table大...

詳情...
17.5.2 Table width algorithms: the 'table-layout' property
http://www.w3.org/TR/CSS21/tables.html#width-layout

奇怪的倒是Firefox竟然會讓overflow apply在tbody上...
照理應該不能用啊...

發表人:  老陳 [ 2004-11-13, 01:20 ]
文章主題 : 

李某人 寫:
不太明你的問題...
row跟header是指什麼呢...?


不好意思,沒把問題說明清楚,Row就是Table上實際的資料,header就是column的意思
一般來說,Application的Table上的ScrollBar,一個是垂直捲軸,
一個是水平捲軸:

1. 垂直捲軸是當Row Count超過畫面顯示範圍的時候,會出現的,然後拉動的時候Column會Fixed住,只動Row Data

2. 水平捲軸的話,就是當橫向的Column Count太多超過畫面範圍時,就會出現,當拉動水平捲軸的時候Row跟Column會一起動

第一個沒問題,但是第二個就不行了,我也是測試了一陣子(當然沒有你久,一看就知道你是高手 :D )

不過我看過一個網站有寫一個Table元件可以達到說...
可是一大堆javascript,看了就頭大,如果要當成標準元件用在自己的每一個網頁上還需要自己在多墊一層呢... :twisted:

請連結這裡看Demo,好像IE和Mozilla都可以喔!

發表人:  老陳 [ 2004-11-29, 18:42 ]
文章主題 : 

我剛剛看到一篇文章,專門在解這個問題,不但可以解決,更是可以輕易的作到固定住前面幾個column,只讓水平捲軸拉動後面幾個column的高難度技巧喔

可是重點是,這個是針對IE所設計的解決方案,提供給各位作參考:
原文出處

以下是內容:

看到一篇文章,用css實現鎖定 HTML Table表頭和第一列,曾見過不少網友為鎖定DataGrid的表頭而傷腦筋,找到的很多實現方法都不盡如人意(最主要的問題就是表頭行中的列和表格其它行中的列的錯位),而這篇文章介紹的實現方法卻非常完美地解決了這個問題,而且還可以象Excel一樣鎖定表格的第一列...


為了避免文章過長,大家瀏覽不方便,所以我把html和css當成附加檔案供大家下載
這裡只提出重點部份

test.html
代碼:
...
<link rel="stylesheet" href="test.css" type="text/css">

<script type="text/javascript">
function lockCol(tblID) {

 var table = document.getElementById(tblID);
 var button = document.getElementById('toggle');
 var cTR = table.getElementsByTagName('TR');  //collection of rows

 if (table.rows[0].cells[0].className == '') {
  for (i = 0; i < cTR.length; i++)
   {
   var tr = cTR.item(i);
   tr.cells[0].className = 'locked'
   }
  button.innerText = "Unlock First Column";
  }
  else {
  for (i = 0; i < cTR.length; i++)
   {
   var tr = cTR.item(i);
   tr.cells[0].className = ''
   }
  button.innerText = "Lock First Column";
  }
}
</script>

<button onClick="lockCol('tbl')"  id="toggle">Lock First Column</button>

<div id="tbl-container">

<table id="tbl">
<thead>
...
</thead>

<tbody>
...
</tbody>
</table>

<div>


test.css
代碼:
...
div#tbl-container {
width: 418px;
height: 252px;
overflow: auto;
}

table {
table-layout: fixed;
border-collapse: collapse;
}

div#tbl-container table th {
width: 100px;
}

thead th, thead th.locked {
font-weight: bold;
text-align: center;
color: white;
border-right: 1px solid silver;
position:relative;
cursor: default;
}
 
thead th {
top: expression(document.getElementById("tbl-container").scrollTop-2); /*IE5+ only*/
z-index: 20;
}

thead th.locked {z-index: 30;}

td.locked,  th.locked{
border-right: 1px solid silver;
left: expression(document.getElementById("tbl-container").scrollLeft); /*IE5+ only*/
position: relative;
z-index: 10;
}

td {
padding: 2px 5px 2px 2px;
font-size: 12px;
border-left: 1px solid silver;
border-bottom: 1px solid silver;
}
...


不過只限制在IE上,不能用在mozilla上,真是太不公平啦! >_<[/url]

附加檔案:
檔案註釋: html table的scrollbar完美解決方案(For IE)
test.zip [2.63 KiB]
被下載 607 次

發表人:  MilchFlasche [ 2004-11-29, 20:30 ]
文章主題 : 

沒有符合W3C標準的解決方案嗎?我們也可以多研究非IE的標準方式啊,不然會被IE吃死喔 :)

發表人:  老陳 [ 2004-11-30, 10:11 ]
文章主題 : 

MilchFlasche 寫:
沒有符合W3C標準的解決方案嗎?我們也可以多研究非IE的標準方式啊,不然會被IE吃死喔 :)


當然是希望這樣啊,可是單就這一點功能而言,非IE的瀏覽器(ex: firefox)頂多只能解決垂直ScrollBar的問題,卻沒有辦法解決水平ScrollBar的Header和Body連動的問題,令人遺憾 :oops:

還是說有解法,請各位高手分享一下吧... :roll:

發表人:  BobChao [ 2004-11-30, 11:15 ]
文章主題 : 

http://www.activewidgets.com/

這個可以嗎?我還沒有研究所以您得自己看 ^^;

發表人:  訪客 [ 2004-11-30, 16:14 ]
文章主題 : 

BobChao 寫:
http://www.activewidgets.com/

這個可以嗎?我還沒有研究所以您得自己看 ^^;


這個我已經研究過了,的確是可以解決沒有錯.
但是,這個全部都是要用javascript寫成,像我是用JSP來開發UI,就會非常麻煩,雖然它有提供JSP Tag可用,不過好像要錢,只Open grid.js給大家免費使用. (太生氣了) :twisted:

1 頁 (共 1 頁) 所有顯示的時間為 UTC + 8 小時
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/