2013-07-24 29 views
16

Voglio rendere corretto l'header del mio tavolo. La tabella è presente all'interno del div scorrevole. Di seguito è il mio codice.Come rendere la tabella di intestazione fissa all'interno del div scorrevole?

<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> 

Qui di seguito è il mio CSS, che sto usando per il div sopra:

#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

Cosa si intende per "fare colpo di testa di il mio tavolo è stato risolto "? Dovrebbe essere sempre visibile nonostante lo scorrimento verso il basso? – Mario

+0

@Mario esattamente la riga superiore della tabella dovrebbe sempre essere visibile – Rohan

+0

Ive ha appena aggiunto una risposta a una domanda simile che potrebbe aiutare http://stackoverflow.com/questions/31433833/fix-table-header-at-top-of-scrollable- div/31434590 # 31434590 –

risposta

29

ne dite di fare qualcosa di simile? L'ho fatto da zero ...

Quello che ho fatto è usato 2 tabelle, una per l'intestazione, che sarà sempre statica, e l'altra tabella renderizza le celle, che ho avvolto usando un elemento div con un altezza fissa, e per consentire di scorrimento, sto usando overflow-y: auto;

anche assicurarsi di utilizzare con larghezza fissa td elementi in modo che la vostra table non si rompe quando si utilizza una stringa senza white space, in modo simmetrico a rompere la stringa Sto usando 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

ciao .. questo non funziona se le colonne dicono 40 colonne .. e devono scorrere da destra e sinistra .. così come sopra e sotto ... l'intestazione della colonna deve essere fissa e anche questo all'interno di un div scorrevole. chiunque ha una soluzione ... vedi post completo qui: http://stackoverflow.com/questions/22093319/large-html-table-with-fixed-header-inside-scrollable-div-how – ihightower

+4

Hai inserito static larghezze sulle colonne della tabella, che è praticamente l'intero punto di utilizzo delle tabelle per visualizzare i contenuti in primo luogo. Questa non è affatto una soluzione. Perché preoccuparsi anche di un tavolo se hai solo delle larghezze fisse? Perché non usare solo le div? – RavenHursT

+5

@RavenHursT perché l'elemento '

' è ottimo per i dati tabulari, che sembra che l'OP abbia. – mikedidthis

0

questo codice funziona me formano. Includi il file 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

Penso che tu abbia bisogno di qualcosa del genere?

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

Questo sembra funzionare bene per colonne a larghezza fissa. Se le larghezze delle colonne di intestazione dipendono dai dati in esse, questa soluzione non funziona molto bene. Ancora, +1 per l'idea. – BrianLegg

4

Alcune di queste risposte sembrano inutilmente complesso. Fai la tua tbody:

display: block; height: 300px; overflow-y: auto 

Poi impostare manualmente la larghezza di ogni colonna in modo che le colonne thead e tbody sono la stessa larghezza. Può anche essere necessario impostare lo stile della tabella = "table-layout: fixed".

+6

Ciò farebbe confondere le larghezze delle colonne della tabella .. –

0

utilizzare StickyTableHeaders.js per questo.

L'intestazione era trasparente. quindi prova ad aggiungere questo css.

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

avevo bisogno lo stesso e questa soluzione ha funzionato il modo più semplice e diretto:

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

ho appena do un id al tavolo che voglio per scorrere e mettere una riga in Javascript. Questo è tutto!

A proposito, per prima cosa ho pensato anche di voler usare un div scorrevole, ma non è affatto necessario. Puoi usare un div e inserirlo, ma questa soluzione fa proprio ciò di cui abbiamo bisogno: scorre la tabella.

1

Questa è la mia soluzione "stampelle" utilizzando html e css. C'era 2 tavoli e larghezza fissa di tavoli e tavolo cell`s

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

HTML:

<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%; 
} 
Problemi correlati