2013-07-24 14 views
16

私のテーブルのヘッダーを修正したい。テーブルはスクロール可能なdiv内にあります。以下は私のコードです。以下はスクロール可能なdiv内に固定ヘッダーテーブルを作成するには?

<div id="table-wrapper"> 
    <div id="table-scroll"> 
     <table bgcolor="white" border="0" cellpadding="0" cellspacing="0" id="header-fixed" width="100%" overflow="scroll" class="scrollTable"> 
      <thead> 
       <tr> 
        <th>Order ID</th> 
        <th>Order Date</th> 
        <th>Status</th> 
        <th>Vol Number</th> 
        <th>Bonus Paid</th> 
        <th>Reason for no Bonus</th> 
       </tr> 
      </thead> 
      <tbody> 
       <tr> 
        <td><%=snd.getOrderId()%></td> 
        <td><%=snd.getDateCaptured()%></td> 
        <td><%=snd.getOrderStatus()%></td> 
        <td>Data Not Available</td> 
        <td>Data Not Available</td> 
        <td>Data Not Available</td> 
       </tr> 
      </tbody> 
     </table> 
    </div> 
</div> 

私は上記のdivのために使用しています私のCSS、次のとおりです。このような何かをすることについてどのように

#table-wrapper { 
    position:relative; 
} 

#table-scroll { 
    height:250px; 
    overflow:auto; 
    margin-top:20px; 
} 

#table-wrapper table { 
    width:100%; 
} 

#table-wrapper table * { 
    background:white; 
    color:black; 
} 

#table-wrapper table thead th .text { 
    position:absolute; 
    top:-20px; 
    z-index:2; 
    height:20px; 
    width:35%; 
    border:1px solid red; 
} 
+0

あなたが「のヘッダーを作るとはどういう意味ですかを私のテーブルは固定されましたか?スクロールダウンしても常に見えるはずですか? – Mario

+0

@Mario正確にテーブルの一番上の行は常に表示されるべきです – Rohan

+0

Iveは似たような質問に答えを追加しましたhttp://stackoverflow.com/questions/31433833/fix-table-header-at-top-of-scrollable- div/31434590#31434590 –

答えて

29

?私はゼロからそれを作った...

私がしたことは2つのテーブル、1つは常に静的になり、もう1つのテーブルはdiv要素を使ってラップしたセルをレンダリングします固定の高さと、そしてまたoverflow-y: auto;

は、あなたのtablewhite spaceのない文字列が使用されたときに破損しないように、その文字列を破るためにinorderをので、あなたが、一定の幅でtd要素をを使用することを確認し使用しています、スクロールを有効にします使用していますword-wrap: break-word;

Demo

.wrap { 
    width: 352px; 
} 

.wrap table { 
    width: 300px; 
    table-layout: fixed; 
} 

table tr td { 
    padding: 5px; 
    border: 1px solid #eee; 
    width: 100px; 
    word-wrap: break-word; 
} 

table.head tr td { 
    background: #eee; 
} 

.inner_table { 
    height: 100px; 
    overflow-y: auto; 
} 

<div class="wrap"> 
    <table class="head"> 
     <tr> 
      <td>Head 1</td> 
      <td>Head 1</td> 
      <td>Head 1</td> 
     </tr> 
    </table> 
    <div class="inner_table"> 
     <table> 
     <tr> 
      <td>Body 1</td> 
      <td>Body 1</td> 
      <td>Body 1</td> 
     </tr> 
     <!-- Some more tr's --> 
    </table> 
    </div> 
</div> 
+0

こんにちは..列が40列で、左右からスクロールする必要がある場合、これは機能しません。また、列ヘッダーを固定する必要があります。それもスクロール可能なdiv内にあります。誰でも解決策があります...ここに完全な投稿を見てください:http://stackoverflow.com/questions/22093319/large-html-table-with-fixed-header-inside-scrollable-div-how – ihightower

+4

あなたは静的これはテーブルを使って最初の場所にコンテンツを表示するのとほぼ同じです。これはまったく解決策ではありません。なぜあなたは固定幅を持つつもりならテーブルを持っていらっしゃるのですか? divを使用するだけではどうですか? – RavenHursT

+5

@RavenHursT '

'要素は表形式のデータに適しているため、OPが持つようです。 – mikedidthis

0

Aフィドルが、それにもかかわらず、私が理解から、より有用されているだろう、私はあなたが必要なものを推測し、このコードは、私を形成する働きこの

http://css-tricks.com/persistent-headers/

0

に見て、永続的なヘッダです。 jquery.jsファイルをインクルードします。

<!DOCTYPE html> 
<html> 

<head> 
<script src="jquery.js"></script> 
<script> 
var headerDivWidth=0; 
var contentDivWidth=0; 
function fixHeader(){ 

var contentDivId = "contentDiv"; 
var headerDivId = "headerDiv"; 

var header = document.createElement('table'); 
var headerRow = document.getElementById('tableColumnHeadings'); 

/*Start : Place header table inside <DIV> and place this <DIV> before content table*/ 
var headerDiv = "<div id='"+headerDivId+"' style='width:500px;overflow-x:hidden;overflow-y:scroll' class='tableColumnHeadings'><table></table></div>"; 
$(headerRow).wrap(headerDiv); 
$("#"+headerDivId).insertBefore("#"+contentDivId); 
/*End : Place header table inside <DIV> and place this <DIV> before content table*/ 

fixColumnWidths(headerDivId,contentDivId); 
} 
function fixColumnWidths(headerDivId,contentDivId){ 
/*Start : Place header row cell and content table first row cell inside <DIV>*/ 
      var contentFirstRowCells = $('#'+contentDivId+' table tr:first-child td'); 
      for (k = 0; k < contentFirstRowCells.length; k++) { 
       $(contentFirstRowCells[k]).wrapInner("<div ></div>"); 
      } 
      var headerFirstRowCells = $('#'+headerDivId+' table tr:first-child td'); 
      for (k = 0; k < headerFirstRowCells.length; k++) { 
       $(headerFirstRowCells[k]).wrapInner("<div></div>"); 
      } 
/*End : Place header row cell and content table first row cell inside <DIV>*/ 

/*Start : Fix width for columns of header cells and content first ror cells*/ 
      var headerColumns = $('#'+headerDivId+' table tr:first-child td div:first-child'); 
      var contentColumns = $('#'+contentDivId+' table tr:first-child td div:first-child'); 
      for (i = 0; i < contentColumns.length; i++) { 
       if (i == contentColumns.length - 1) { 
        contentCellWidth = contentColumns[i].offsetWidth; 
       } 
       else { 
        contentCellWidth = contentColumns[i].offsetWidth; 
       } 
       headerCellWidth = headerColumns[i].offsetWidth; 
       if(contentCellWidth>headerCellWidth){ 
       $(headerColumns[i]).css('width', contentCellWidth+"px"); 
       $(contentColumns[i]).css('width', contentCellWidth+"px"); 
       }else{ 
       $(headerColumns[i]).css('width', headerCellWidth+"px"); 
       $(contentColumns[i]).css('width', headerCellWidth+"px"); 
       } 
      } 
/*End : Fix width for columns of header and columns of content table first row*/ 
} 

    function OnScrollDiv(Scrollablediv) { 
    document.getElementById('headerDiv').scrollLeft = Scrollablediv.scrollLeft; 
    } 
function radioCount(){ 
    alert(document.form.elements.length); 

} 
</script> 
<style> 
table,th,td 
{ 
border:1px solid black; 
border-collapse:collapse; 
} 
th,td 
{ 
padding:5px; 
} 
</style> 

</head> 

<body onload="fixHeader();"> 
<form id="form" name="form"> 
<div id="contentDiv" style="width:500px;height:100px;overflow:auto;" onscroll="OnScrollDiv(this)"> 
<table> 
<!--tr id="tableColumnHeadings" class="tableColumnHeadings"> 
    <td><div>Firstname</div></td> 
    <td><div>Lastname</div></td>  
    <td><div>Points</div></td> 
    </tr> 

<tr> 
    <td><div>Jillsddddddddddddddddddddddddddd</div></td> 
    <td><div>Smith</div></td>  
    <td><div>50</div></td> 
    </tr--> 

    <tr id="tableColumnHeadings" class="tableColumnHeadings"> 
    <td>&nbsp;</td> 

    <td>Firstname</td> 
    <td>Lastname</td>  
    <td>Points</td> 
    </tr> 

<tr style="height:0px"> 
<td></td> 
    <td></td> 
    <td></td>  
    <td></td> 
    </tr> 

<tr > 
<td><input type="radio" id="SELECTED_ID" name="SELECTED_ID" onclick="javascript:radioCount();"/></td> 
    <td>Jillsddddddddddddddddddddddddddd</td> 
    <td>Smith</td>   
    <td>50</td> 
    </tr> 

<tr> 
<td><input type="radio" id="SELECTED_ID" name="SELECTED_ID"/></td> 

    <td>Eve</td> 
    <td>Jackson</td>  
    <td>9400000000000000000000000000000</td> 
</tr> 
<tr> 
<td><input type="radio" id="SELECTED_ID" name="SELECTED_ID"/></td> 

    <td>John</td> 
    <td>Doe</td>  
    <td>80</td> 
</tr> 
<tr> 
<td><input type="radio" id="SELECTED_ID" name="SELECTED_ID"/></td> 

    <td><div>Jillsddddddddddddddddddddddddddd</div></td> 
    <td><div>Smith</div></td>  
    <td><div>50</div></td> 
    </tr> 
<tr> 
<td><input type="radio" id="SELECTED_ID" name="SELECTED_ID"/></td> 

    <td>Eve</td> 
    <td>Jackson</td>  
    <td>9400000000000000000000000000000</td> 
</tr> 
<tr> 
<td><input type="radio" id="SELECTED_ID" name="SELECTED_ID"/></td> 

    <td>John</td> 
    <td>Doe</td>  
    <td>80</td> 
</tr> 
</table> 
</div> 

</form> 
</body> 

</html> 
3

私はこのようなものが必要だと思いますか?

Like this http://s13.postimage.org/rv6jqaxvr/tabel_fixed_header.jpg

..... 
<style> 
.table{width: 500px;height: 200px;border-collapse:collapse;} 
.table-wrap{max-height: 200px;width:100%;overflow-y:auto;overflow-x:hidden;} 
.table-dalam{height:300px;width:500px;border-collapse:collapse;} 
.td-nya{border-left:1px solid white;border-right:1px solid grey;border-bottom:1px solid grey;} 

</style> 

<table class="table"> 
<thead> 
    <tr> 
    <th>Judul1</th> 
    <th>Judul2</th> 
    <th>Judul3</th> 
    <th>Judul4</th> 
    </tr> 
</thead> 
<tbody> 
    <tr> 
     <td colspan="4"> 
     <div class="table-wrap" > 
     <table class="table-dalam"> 
     <tbody> 
      <?php foreach(range(1,10) as $i): ?> 
       <tr > 
        <td class="td-nya">td1 </td> 
        <td class="td-nya">td2</td> 
        <td class="td-nya">td2</td> 
        <td class="td-nya">td2</td> 
       </tr> 
      <?php endforeach;?> 
     </tbody> 
     </table> 
    </div> 
    </td> 
</tr> 
    </tbody> 
</table> 

Source

+2

これは固定幅の列ではうまくいくようです。ヘッダー列の幅がデータ内のデータに依存する場合、このソリューションはうまく機能しません。それでも、アイデアのために+1。 – BrianLegg

4

これらの答えの一部は、不必要に複雑なように思えます。あなたのtbodyを作成してください:

次に、theadとtbodyの列が同じ幅になるように手動で各列の幅を設定します。テーブルのstyle = "table-layout:fixed"を設定することも必要です。

+6

これはテーブルの列の幅を混乱させます。 –

0

これにはStickyTableHeaders.jsを使用します。

ヘッダーは透過的でした。だからこのCSSを追加してみてください。

thead { 
    border-top: none; 
    border-bottom: none; 
    background-color: #FFF; 
} 
1

私は同じことを必要とし、このソリューションは、最もシンプルかつ簡単な方法働いていた:私はちょうど私がJavaScriptで1行をスクロールして置きたいのテーブルにidを与える

http://www.farinspace.com/jquery-scrollable-table-plugin/

を。それでおしまい!

ところで、私は最初にスクロール可能なdivを使いたいと思っていましたが、まったく必要ではありません。 divを使用してその中に入れることができますが、このソリューションは必要なものだけを実行します。テーブルをスクロールします。

1

これは私の "松葉杖"ソリューションで、htmlとcssを使用しています。 そこには2つのテーブルを使用して、テーブルとテーブルの固定幅は

https://jsfiddle.net/babaikawow/s2xyct24/1/

HTML cell`s:

<div class="container"> 
<table class="table" border = 1; > <!-- fixed width header --> 
          <thead > 
           <tr> 
            <th class="tbDataId" >№</th> 
            <th class="tbDataName">Працівник</th> 
            <th class="tbDataData">Дата</th> 
            <th class="tbDataData">Дійсно до</th> 
            <th class="tbDataDiseases">Критерій1</th> 
            <th class="tbDataDiseases">Критерій2</th> 
            <th class="tbDataDiseases">Критерій3</th> 
            <th class="tbDataDiseases">Критерій4</th> 
            <th class="tbDataDiseases">Критерій5</th> 
           </tr> 
          </thead> 
         </table> 

         <div class="scrollTable"> <!-- scrolling block --> 
          <table class="table" border = 1;> 
           <tbody> 
        <tr> 
         <td class="tbDataId" >№</td> 
            <td class="tbDataName">Працівник</td> 
            <td class="tbDataData">Дата</td> 
            <td class="tbDataData">Дійсно до</td> 
            <td class="tbDataDiseases">Критерій1</td> 
            <td class="tbDataDiseases">Критерій2</td> 
            <td class="tbDataDiseases">Критерій3</td> 
            <td class="tbDataDiseases">Критерій4</td> 
            <td class="tbDataDiseases">Критерій5</td> 
        </tr> 
        <tr> 
         <td class="tbDataId" >№</td> 
            <td class="tbDataName">Працівник</td> 
            <td class="tbDataData">Дата</td> 
            <td class="tbDataData">Дійсно до</td> 
            <td class="tbDataDiseases">Критерій1</td> 
            <td class="tbDataDiseases">Критерій2</td> 
            <td class="tbDataDiseases">Критерій3</td> 
            <td class="tbDataDiseases">Критерій4</td> 
            <td class="tbDataDiseases">Критерій5</td> 
        </tr> 
        <tr> 
         <td class="tbDataId" >№</td> 
            <td class="tbDataName">Працівник</td> 
            <td class="tbDataData">Дата</td> 
            <td class="tbDataData">Дійсно до</td> 
            <td class="tbDataDiseases">Критерій1</td> 
            <td class="tbDataDiseases">Критерій2</td> 
            <td class="tbDataDiseases">Критерій3</td> 
            <td class="tbDataDiseases">Критерій4</td> 
            <td class="tbDataDiseases">Критерій5</td> 
        </tr> 
        <tr> 
         <td class="tbDataId" >№</td> 
            <td class="tbDataName">Працівник</td> 
            <td class="tbDataData">Дата</td> 
            <td class="tbDataData">Дійсно до</td> 
            <td class="tbDataDiseases">Критерій1</td> 
            <td class="tbDataDiseases">Критерій2</td> 
            <td class="tbDataDiseases">Критерій3</td> 
            <td class="tbDataDiseases">Критерій4</td> 
            <td class="tbDataDiseases">Критерій5</td> 
        </tr> 
        <tr> 
         <td class="tbDataId" >№</td> 
            <td class="tbDataName">Працівник</td> 
            <td class="tbDataData">Дата</td> 
            <td class="tbDataData">Дійсно до</td> 
            <td class="tbDataDiseases">Критерій1</td> 
            <td class="tbDataDiseases">Критерій2</td> 
            <td class="tbDataDiseases">Критерій3</td> 
            <td class="tbDataDiseases">Критерій4</td> 
            <td class="tbDataDiseases">Критерій5</td> 
        </tr> 
           </tbody> 
          </table> 
         </div> 
</div> 

はCSS:

*{ 
    box-sizing: border-box; 
} 

.container{ 
width:1000px; 
} 
.scrollTable{ 

    overflow: scroll; 
    overflow-x: hidden; 
    height: 100px; 
} 
table{ 
margin: 0px!important; 
width:983px!important; 
border-collapse: collapse; 

} 

/* Styles of the th and td */ 

/* Id */ 
.tbDataId{ 
    width:5%; 
} 

/* Дата, 
Дійсно до */ 
.tbDataData{ 
    /*width:170px;*/ 
    width: 15%; 
} 

/* П І Б */ 
.tbDataName{ 
    width: 15%; 
} 

/*Критерії */ 
.tbDataDiseases{ 
    width:10%; 
} 
関連する問題