tabla inmovilizar filas fijar encabezado columnas attribute html css twitter-bootstrap html-table

html - inmovilizar - Mesa desplazable con cabezal fijo en bootstrap



inmovilizar filas y columnas tabla html jquery (14)

¡Estoy usando StickyTableHeaders en GitHub y funciona como el encanto!

Tuve que agregar este CSS para hacer que el encabezado no sea transparente.

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

Estoy tratando de hacer una tabla con un encabezado fijo y un contenido desplazable usando la tabla bootstrap 3. Lamentablemente, las soluciones que he encontrado no funcionan con bootstrap ni estropean el estilo.

Aquí hay una tabla de bootstrap simple, pero por alguna razón desconocida para mí, la altura del tbody no es 10px.

height: 10px !important; overflow: scroll;

http://jsfiddle.net/T9Bhm/1/


Aquí está la solución de trabajo

HTML

<table class="table table-striped"> <thead> <tr> <th>Make</th> <th>Model</th> <th>Color</th> <th>Year</th> </tr> </thead> <tbody> <tr> <td class="filterable-cell">Ford</td> <td class="filterable-cell">Escort</td> <td class="filterable-cell">Blue</td> <td class="filterable-cell">2000</td> </tr> <tr> <td class="filterable-cell">Ford</td> <td class="filterable-cell">Escort</td> <td class="filterable-cell">Blue</td> <td class="filterable-cell">2000</td> </tr> <tr> <td class="filterable-cell">Ford</td> <td class="filterable-cell">Escort</td> <td class="filterable-cell">Blue</td> <td class="filterable-cell">2000</td> </tr> <tr> <td class="filterable-cell">Ford</td> <td class="filterable-cell">Escort</td> <td class="filterable-cell">Blue</td> <td class="filterable-cell">2000</td> </tr> </tbody>

CSS

table { width: 100%; } thead, tbody, tr, td, th { display: block; } tr:after { content: '' ''; display: block; visibility: hidden; clear: both; } thead th { height: 30px; /*text-align: left;*/ } tbody { height: 120px; overflow-y: auto; } thead { /* fallback */ } tbody td, thead th { width: 19.2%; float: left; }

Enlace a jsfiddle


Aquí está mi bolígrafo sobre cómo hacer un encabezado de tabla fijo con filas y columnas desplazables. Las columnas también tienen ancho fijo, http://codepen.io/abhilashn/pen/GraJyp

<!-- Listing table --> <div class="row"> <div class="col-sm-12"> <div class="cust-table-cont"> <div class="table-responsive"> <table border="0" class="table cust-table"> <thead> <tr style=""> <th style="width:80px;">#</th> <th style="width:150px;" class="text-center"><li class="fa fa-gear"></li></th> <th style="width:250px;">Title</th> <th style="width:200px;">Company</th> <th style="width:100px;">Priority</th> <th style="width:120px;">Type</th> <th style="width:150px;">Assigned to</th> <th style="width:120px;">Status</th> </tr> </thead> <tbody> <tr> <th style="width:80px;">1</th> <td style="width:150px;" class="text-center"><button class="btn btn-outline-danger del-icon"><span class="fa fa-trash-o"></span></button> <button class="btn btn-outline-success"><span class="fa fa-pencil"></span></button></td> <td style="width:250px;">Lorem ipsum dolor sit</td> <td style="width:200px;">lorem ispusm</td> <td style="width:100px;">high</td> <td style="width:120px;">lorem ipsum</td> <td style="width:150px;">lorem ipsum</td> <td style="width:120px;">lorem ipsum</td> </tr> <tr> <th scope="row">2</th> <td class="text-center"><button class="btn btn-outline-danger del-icon"><span class="fa fa-trash-o"></span></button> <button class="btn btn-outline-success"><span class="fa fa-pencil"></span></button></td> <td>Lorem ipsum dolor sit</td> <td>lorem ispusm</td> <td>high</td> <td>lorem ipsum</td> <td>lorem ipsum</td> <td>lorem ipsum</td> </tr> <tr> <th scope="row">3</th> <td class="text-center"><button class="btn btn-outline-danger del-icon"><span class="fa fa-trash-o"></span></button> <button class="btn btn-outline-success"><span class="fa fa-pencil"></span></button></td> <td>Lorem ipsum dolor sit</td> <td>lorem ispusm</td> <td>high</td> <td>lorem ipsum</td> <td>lorem ipsum</td> <td>lorem ipsum</td> </tr> <tr> <th scope="row">4</th> <td class="text-center"><button class="btn btn-outline-danger del-icon"><span class="fa fa-trash-o"></span></button> <button class="btn btn-outline-success"><span class="fa fa-pencil"></span></button></td> <td>Lorem ipsum dolor sit</td> <td>lorem ispusm</td> <td>high</td> <td>lorem ipsum</td> <td>lorem ipsum</td> <td>lorem ipsum</td> </tr> <tr> <th scope="row">5</th> <td class="text-center"><button class="btn btn-outline-danger del-icon"><span class="fa fa-trash-o"></span></button> <button class="btn btn-outline-success"><span class="fa fa-pencil"></span></button></td> <td>Lorem ipsum dolor sit</td> <td>lorem ispusm</td> <td>high</td> <td>lorem ipsum</td> <td>lorem ipsum</td> <td>lorem ipsum</td> </tr> <tr> <th scope="row">6</th> <td class="text-center"><button class="btn btn-outline-danger del-icon"><span class="fa fa-trash-o"></span></button> <button class="btn btn-outline-success"><span class="fa fa-pencil"></span></button></td> <td>Lorem ipsum dolor sit</td> <td>lorem ispusm</td> <td>high</td> <td>lorem ipsum</td> <td>lorem ipsum</td> <td>lorem ipsum</td> </tr> <tr> <th scope="row">7</th> <td class="text-center"><button class="btn btn-outline-danger del-icon"><span class="fa fa-trash-o"></span></button> <button class="btn btn-outline-success"><span class="fa fa-pencil"></span></button></td> <td>Lorem ipsum dolor sit</td> <td>lorem ispusm</td> <td>high</td> <td>lorem ipsum</td> <td>lorem ipsum</td> <td>lorem ipsum</td> </tr> <tr> <th scope="row">8</th> <td class="text-center"><button class="btn btn-outline-danger del-icon"><span class="fa fa-trash-o"></span></button> <button class="btn btn-outline-success"><span class="fa fa-pencil"></span></button></td> <td>Lorem ipsum dolor sit</td> <td>lorem ispusm</td> <td>high</td> <td>lorem ipsum</td> <td>lorem ipsum</td> <td>lorem ipsum</td> </tr> <tr> <th scope="row">9</th> <td class="text-center"><button class="btn btn-outline-danger del-icon"><span class="fa fa-trash-o"></span></button> <button class="btn btn-outline-success"><span class="fa fa-pencil"></span></button></td> <td>Lorem ipsum dolor sit</td> <td>lorem ispusm</td> <td>high</td> <td>lorem ipsum</td> <td>lorem ipsum</td> <td>lorem ipsum</td> </tr> <tr> <th scope="row">10</th> <td class="text-center"><button class="btn btn-outline-danger del-icon"><span class="fa fa-trash-o"></span></button> <button class="btn btn-outline-success"><span class="fa fa-pencil"></span></button></td> <td>Lorem ipsum dolor sit</td> <td>lorem ispusm</td> <td>high</td> <td>lorem ipsum</td> <td>lorem ipsum</td> <td>lorem ipsum</td> </tr> <tr> <th scope="row">11</th> <td class="text-center"><button class="btn btn-outline-danger del-icon"><span class="fa fa-trash-o"></span></button> <button class="btn btn-outline-success"><span class="fa fa-pencil"></span></button></td> <td>Lorem ipsum dolor sit</td> <td>lorem ispusm</td> <td>high</td> <td>lorem ipsum</td> <td>lorem ipsum</td> <td>lorem ipsum</td> </tr> <tr> <th scope="row">12</th> <td class="text-center"><button class="btn btn-outline-danger del-icon"><span class="fa fa-trash-o"></span></button> <button class="btn btn-outline-success"><span class="fa fa-pencil"></span></button></td> <td>Lorem ipsum dolor sit</td> <td>lorem ispusm</td> <td>high</td> <td>lorem ipsum</td> <td>lorem ipsum</td> <td>lorem ipsum</td> </tr> </tbody> </table> </div> </div> <!-- End of cust-table-cont block --> </div> </div> <!-- ENd of row -->

.cust-table-cont { width:100%; overflow-x:auto; } .cust-table-cont .table-responsive { width:1190px; } .cust-table { table-layout:fixed; } .cust-table thead, .cust-table tbody { display: block; } .cust-table tbody { max-height:620px; overflow-y:auto; }


Deberías probar con "display: block;" to tbody, porque ahora está en línea y para establecer la altura, el elemento debe ser "block"


En mi opinión, uno de los mejores complementos para jQuery es DataTables .

También tiene una extensión para el encabezado fijo , y se implementa muy fácilmente.

Tomado de su sitio:

HTML:

<table id="example" class="display" cellspacing="0" width="100%"> <thead> <tr> <th>Name</th> <th>Position</th> <th>Office</th> <th>Age</th> <th>Start date</th> <th>Salary</th> </tr> </thead> <tfoot> <tr> <th>Name</th> <th>Position</th> <th>Office</th> <th>Age</th> <th>Start date</th> <th>Salary</th> </tr> </tfoot> <tbody> <tr> <td>Tiger Nixon</td> <td>System Architect</td> <td>Edinburgh</td> <td>61</td> <td>2011/04/25</td> <td>$320,800</td> </tr> <tr> <td>Garrett Winters</td> <td>Accountant</td> <td>Tokyo</td> <td>63</td> <td>2011/07/25</td> <td>$170,750</td> </tr> <tr> <td>Ashton Cox</td> <td>Junior Technical Author</td> <td>San Francisco</td> <td>66</td> <td>2009/01/12</td> <td>$86,000</td> </tr> </tbody> </table>

JavaScript:

$(document).ready(function() { var table = $(''#example'').DataTable(); new $.fn.dataTable.FixedHeader( table ); } );

Pero lo más simple que puede tener para hacer un <tbody> desplazable es:

//configure table with fixed header and scrolling rows $(''#example'').DataTable({ scrollY: 400, scrollCollapse: true, paging: false, searching: false, ordering: false, info: false });


Es más fácil con css

table tbody { display:block; max-height:450px; overflow-y:scroll; } table thead, table tbody tr { display:table; width:100%; table-layout:fixed; }


Es probable que obtenga múltiples tablas en una página, por lo tanto, necesita clases de CSS. Encuentre una solución de @ giulio modificada para eso.

Simplemente declararlo en la tabla:

<table class="table table-striped header-fixed"></table>

CSS

.header-fixed { width: 100% } .header-fixed > thead, .header-fixed > tbody, .header-fixed > thead > tr, .header-fixed > tbody > tr, .header-fixed > thead > tr > th, .header-fixed > tbody > tr > td { display: block; } .header-fixed > tbody > tr:after, .header-fixed > thead > tr:after { content: '' ''; display: block; visibility: hidden; clear: both; } .header-fixed > tbody { overflow-y: auto; height: 150px; } .header-fixed > tbody > tr > td, .header-fixed > thead > tr > th { width: 20%; float: left; }

Tenga en cuenta que la implementación actual solo se adapta a cinco columnas. Si necesita un número diferente, cambie el parámetro de ancho del 20% al * 100% / número_de_columnas *.


No es necesario envolverlo en un div ...

CSS :

tr { width: 100%; display: inline-table; table-layout: fixed; } table{ height:300px; // <-- Select the height of the table display: -moz-groupbox; // Firefox Bad Effect } tbody{ overflow-y: scroll; height: 200px; // <-- Select the height of the body width: 100%; position: absolute; }

Bootply : http://www.bootply.com/AgI8LpDugl


Para lo que sea que valga la pena ahora: Publiqué una solución para un scroll de tabla de hilo hermano con HTML y CSS que

  • toma dos tablas (una para el encabezado único, una para todos - trazada por el navegador)
  • después del diseño, ajuste la tabla superior (solo encabezado) al ancho del inferior
  • ocultar ( visibility , no display ) el encabezado de la tabla inferior y hacer que la tabla inferior se pueda desplazar con un div

La solución es independiente de los estilos / marcos utilizados, por lo que tal vez también sea útil aquí ...

Una descripción larga está en desplazamiento de tabla con HTML y CSS / el código también está en este lápiz: https://codepen.io/sebredhh/pen/QmJvKy


Puede colocar dos div donde 1st div (Header) tendrá barra de desplazamiento transparente y 2nd div tendrá datos con barra de desplazamiento visible / automático. La muestra tiene un fragmento de código angular para recorrer los datos.

Debajo del código funcionó para mí:

<div id="transparentScrollbarDiv" class="container-fluid" style="overflow-y: scroll;"> <div class="row"> <div class="col-lg-3 col-xs-3"><strong>{{col1}}</strong></div> <div class="col-lg-6 col-xs-6"><strong>{{col2}}</strong></div> <div class="col-lg-3 col-xs-3"><strong>{{col3}}</strong></div> </div> </div> <div class="container-fluid" style="height: 150px; overflow-y: auto"> <div> <div class="row" ng-repeat="row in rows"> <div class="col-lg-3 col-xs-3">{{row.col1}}</div> <div class="col-lg-6 col-xs-6">{{row.col2}}</div> <div class="col-lg-3 col-xs-3">{{row.col3}}</div> </div> </div> </div>

Estilo adicional para ocultar la barra de desplazamiento del encabezado -

<style> #transparentScrollbarDiv::-webkit-scrollbar { width: inherit; } /* this targets the default scrollbar (compulsory) */ #transparentScrollbarDiv::-webkit-scrollbar-track { background-color: transparent; } /* the new scrollbar will have a flat appearance with the set background color */ #transparentScrollbarDiv::-webkit-scrollbar-thumb { background-color: transparent; } /* this will style the thumb, ignoring the track */ #transparentScrollbarDiv::-webkit-scrollbar-button { background-color: transparent; } /* optionally, you can style the top and the bottom buttons (left and right for horizontal bars) */ #transparentScrollbarDiv::-webkit-scrollbar-corner { background-color: transparent; } /* if both the vertical and the horizontal bars appear, then perhaps the right bottom corner also needs to be styled */ </style>


Puedes usar un poco de JS y traducir el thead

Ejemplo de jQuery

$(''.tableFixHead'').on(''scroll'', function() { $(''thead'', this).css(''transform'', ''translateY(''+ this.scrollTop +''px)''); });

.tableFixHead { overflow-y: auto; height: 100px; } table { border-collapse: collapse; width: 100%; } th, td { padding: 8px 16px; } th { background:#eee; }

<div class="tableFixHead"> <table> <thead> <tr><th>TH 1</th><th>TH 2</th></tr> </thead> <tbody> <tr><td>A1</td><td>A2</td></tr> <tr><td>B1</td><td>B2</td></tr> <tr><td>C1</td><td>C2</td></tr> <tr><td>D1</td><td>D2</td></tr> <tr><td>E1</td><td>E2</td></tr> </tbody> </table> </div> <script src="https://code.jquery.com/jquery-3.1.0.js"></script>

O simple ES6 si lo prefiere:

// Fix table head function tableFixHead (e) { const el = e.target; el.querySelector("thead").style.transform = `translateY(${el.scrollTop}px)`; } [...document.querySelectorAll(".tableFixHead")].forEach(el => el.addEventListener("scroll", tableFixHead) );


Tarde en la fiesta (Historia de mi vida), pero ya que este es el primer resultado en Google, y ninguno de los anteriores me puso a trabajar, aquí está mi código

/*Set a min width where your table start to look like crap*/ table { min-width: 600px; } /*The next 3 sections make the magic happen*/ thead, tbody tr { display: table; width: 100%; table-layout: fixed; } tbody { display: block; max-height: 200px; overflow-x: hidden; overflow-y: scroll; } td { overflow: hidden; text-overflow: ellipsis; } /*Use the following to make sure cols align correctly*/ table, tr, th, td { border: 1px solid black; border-collapse: collapse; } /*Set your columns to where you want them to be, skip the one that you can have resize to any width*/ th:nth-child(1), td:nth-child(1) { width: 85px; } th:nth-child(2), td:nth-child(2) { width: 150px; } th:nth-child(4), td:nth-child(4) { width: 125px; } th:nth-child(5) { width: 102px; } td:nth-child(5) { width: 85px; }


Tuve muchos problemas para hacer funcionar la biblioteca stickytableheaders. Al hacer un poco más de búsqueda, descubrí que github.com/mkoryak/floatThead es una alternativa mantenida activamente con actualizaciones recientes y mejor documentación.


Usado este enlace, .com/a/17380697/1725764 , por Hashem Qolami en los comentarios de las publicaciones originales y en la pantalla usada: bloques en línea en lugar de flotadores. Corrige las fronteras si la tabla también tiene la clase ''table-bordered''.

table.scroll { width: 100%; &.table-bordered { td, th { border-top: 0; border-right: 0; } th { border-bottom-width: 1px; } td:first-child, th:first-child { border-right: 0; border-left: 0; } } tbody { height: 200px; overflow-y: auto; overflow-x: hidden; } tbody, thead { display: block; } tr { width: 100%; display: block; } th, td { display: inline-block; } td { height: 46px; //depends on your site } }

A continuación, solo agregue los anchos de td y th

table.table-prep { tr > td.type, tr > th.type{ width: 10%; } tr > td.name, tr > th.name, tr > td.notes, tr > th.notes, tr > td.quantity, tr > th.quantity{ width: 30%; } }