Estoy tratando de diseñar una tabla HTML donde el encabezado permanecerá en la parte superior de la página cuando Y SOLO cuando el usuario lo desplace de la vista. Por ejemplo, la tabla puede estar a 500 píxeles hacia abajo de la página, ¿cómo lo hago para que si el usuario desplaza el encabezado fuera de la vista? ? ¿Alguien puede darme una solución Javascript para esto?
<table>
<thead>
<tr>
<th>Col1</th>
<th>Col2</th>
<th>Col3</th>
</tr>
</thead>
<tbody>
<tr>
<td>info</td>
<td>info</td>
<td>info</td>
</tr>
<tr>
<td>info</td>
<td>info</td>
<td>info</td>
</tr>
<tr>
<td>info</td>
<td>info</td>
<td>info</td>
</tr>
</tbody>
</table>
Entonces, en el ejemplo anterior, quiero <thead>
que se desplace con la página si no se ve.
IMPORTANTE: NO estoy buscando una solución donde <tbody>
tenga una barra de desplazamiento (desbordamiento: automático).
jquery
html
html-table
Sam Dufel
fuente
fuente
Respuestas:
Para hacer algo como esto, toque el
scroll
controlador de eventoswindow
y use otrotable
con una posición fija para mostrar el encabezado en la parte superior de la página.HTML:
CSS:
JavaScript:
Esto mostrará el encabezado de la tabla cuando el usuario se desplace lo suficiente como para ocultar el encabezado de la tabla original. Se ocultará nuevamente cuando el usuario haya desplazado la página hacia arriba lo suficiente nuevamente.
Ejemplo de trabajo: http://jsfiddle.net/andrewwhitaker/fj8wM/
fuente
window
. mkoryak.github.io/floatThead tiene una solución más generalmente aplicable.CSS puro (sin soporte para IE11):
fuente
-webkit-sticky
como un valor no válido paraposition
.-webkit-sticky
es para Safari (escritorio e iOS), no para Chrome.position: sticky
funciona en Chrome desde la versión 56. Debe establecer AMBAS reglas:-webkit-sticky
ysticky
exactamente en el mismo orden que en mi ejemplo de código. Safari obtienewebkit-sticky
y todos los demás navegadores lo sobrescribensticky
.position: sticky
que no funcionará con elementos de tabla.Bueno, estaba tratando de obtener el mismo efecto sin recurrir a columnas de tamaño fijo o tener una altura fija para toda la tabla.
La solución que se me ocurrió es un hack. Consiste en duplicar toda la tabla, luego ocultar todo menos el encabezado y hacer que tenga una posición fija.
HTML
CSS
javascript
Ver aquí: http://jsfiddle.net/QHQGF/7/
Editar: actualizó el código para que el thead pueda recibir eventos de puntero (para que los botones y enlaces en el encabezado aún funcionen). Esto soluciona el problema reportado por luhfluh y Joe M.
Nuevo jsfiddle aquí: http://jsfiddle.net/cjKEx/
fuente
visibility: hidden
. Solo puede esconderse#clone tbody
y después de eso puede establecer el borde ... Violín deEscribí un complemento que hace esto. He estado trabajando en ello durante aproximadamente un año y creo que maneja todos los casos de esquina bastante bien:
Aquí hay algunas demostraciones / documentos:
http://mkoryak.github.io/floatThead/
fuente
Pude solucionar el problema al cambiar el ancho de las columnas. Comencé con la solución de Andrew anterior (¡muchas gracias!) Y luego agregué un pequeño bucle para establecer el ancho de los td clonados:
Esto resuelve el problema sin tener que clonar toda la mesa y ocultar el cuerpo. Soy nuevo en JavaScript y jQuery (y en el desbordamiento de pila), por lo que cualquier comentario será apreciado.
fuente
Esta es, con mucho, la mejor solución que he encontrado para tener un encabezado de tabla fijo.
ACTUALIZACIÓN 5/11: Se corrigió el error de desplazamiento horizontal como lo señaló Kerry Johnson
Codepen: https://codepen.io/josephting/pen/demELL
fuente
outerWidth
awidth
en la definición de la función resizeFixed ().z-index
algún número positivo en la.fixed
clase para que los objetos representados después de la carga de la página en la tabla no floten en la parte superior del encabezado fijo a medida que se desplaza.La mejor solución es usar este complemento jquery:
https://github.com/jmosbech/StickyTableHeaders
Este complemento funcionó muy bien para nosotros y probamos muchas otras soluciones. Lo probamos en IE, Chrome y Firefox
fuente
Hay muchas soluciones realmente buenas aquí ya. Pero una de las soluciones CSS más simples que utilizo en estas situaciones es la siguiente:
Debido a que no se requiere JavaScript, simplifica la situación significativamente. Esencialmente necesitas concentrarte en el segundo regla CSS, que contiene las condiciones para garantizar que el encabezado de la tabla permanezca en la parte superior sin importar el espacio de desplazamiento.
Elaborar cada una de las reglas en detalle.
position
está destinado a indicar al navegador que el objeto principal, su fila y sus celdas deben pegarse en la parte superior. Esto necesariamente debe ir acompañado detop
, lo que especifica al navegador que la cabeza se adherirá a la parte superior de la página o ventana gráfica. Además, se puede añadirz-index
para asegurar que el contenido de la cabeza permanece siempre en la parte superior.El color de fondo es simplemente para ilustrar el punto. No necesita usar JavaScript adicional para obtener este efecto. Esto es compatible con la mayoría de los principales navegadores después de 2016.
fuente
Encontré una biblioteca jQuery simple llamada Sticky Table Headers. Dos líneas de código e hizo exactamente lo que quería. Las soluciones anteriores no administran los anchos de columna, por lo que si tiene celdas de tabla que ocupan mucho espacio, el tamaño resultante del encabezado persistente no coincidirá con el ancho de su tabla.
http://plugins.jquery.com/StickyTableHeaders/
Información de uso aquí: https://github.com/jmosbech/StickyTableHeaders
fuente
Bueno, después de revisar todas las soluciones disponibles, escribí un complemento que puede congelar cualquier fila (no solo th) en la parte superior de la página o contenedor. Es muy simple y muy rápido. Sientase libre de usarlo. http://maslianok.github.io/stickyRows/
fuente
puedes usar este enfoque, HTML puro y CSS no se necesitan JS :)
fuente
Encontré una solución simple sin usar JQuery y solo con CSS .
Tienes que poner el contenido fijo dentro de las etiquetas 'th' y agregar el CSS
La posición, el índice z y las propiedades superiores son suficientes. Pero puede aplicar el resto para dar una mejor vista.
fuente
También experimenté los mismos problemas con el formato de borde que no se muestra usando el código de la entrofia, pero algunas pequeñas correcciones y ahora la tabla es expandible y muestra todas las reglas de estilo CSS que puede agregar.
a css agregar:
entonces aquí está el nuevo javascript:
fuente
Aquí hay una solución que se basa en la respuesta aceptada. Corrige por: anchos de columna, estilo de tabla coincidente y cuando la tabla se desplaza en un contenedor div.
Uso
Asegúrese de que su tabla tenga una
<thead>
etiqueta porque solo se corregirá el contenido del anuncio.JavaSript
fuente
$sp.scrollLeft()
que obtiene la cantidad desplazado desde la izquierda de modo que cuando el desplazamiento hacia abajo de la mesa fija se coloca correctamente. También se agregó verificación al desplazarse horizontalmente si la tabla fija es visible para ajustar la posición izquierda. Otro problema que no pude resolver es que cuando la tabla va por encima de la ventana gráfica, la tabla fija debe ocultarse hasta que el usuario se desplace hacia arriba.Uncaught TypeError: $table.scrollParent is not a function
Esto le ayudará a tener un encabezado fijo que también se puede desplazar horizontalmente con datos.
fuente
Esta es mi solucion
fuente
Un poco tarde para la fiesta, pero aquí hay una implementación que funciona con varias tablas en la misma página y "jank" gratis (usando requestAnimationFrame). Además, no es necesario proporcionar ningún ancho en las columnas. El desplazamiento horizontal también funciona.
Los encabezados se definen en un,
div
por lo que puede agregar cualquier marcado allí (como botones), si es necesario. Este es todo el HTML que se necesita:https://jsfiddle.net/lloydleo/bk5pt5gs/
fuente
En esta solución, el encabezado fijo se crea dinámicamente, el contenido y el estilo se clonan desde THEAD
todo lo que necesitas son dos líneas, por ejemplo:
var $myfixedHeader = $("#Ttodo").FixedHeader(); //create fixed header $(window).scroll($myfixedHeader.moveScroll); //bind function to scroll event
Mi plugin jquery FixedHeader y getStyleObject se proporcionan a continuación para colocar el archivo .js
fuente
Cree una tabla adicional con el mismo encabezado que la tabla principal. Simplemente coloque thead en la nueva tabla con una fila y todos los encabezados en ella. Posicionar absoluto y fondo blanco. Para la tabla principal, colóquelo en un div y use un poco de altura y desplazamiento de desbordamiento. De esta manera, nuestra nueva tabla superará el encabezado de la tabla principal y permanecerá allí. Rodea todo en un div. A continuación se muestra el código aproximado para hacerlo.
fuente
Demostración: demo de encabezado de tabla fija css
fuente
Solucione su problema con esto
fuente
Esto se puede lograr utilizando la transformación de propiedad de estilo. Todo lo que tiene que hacer es envolver su tabla en un div con altura fija y desbordamiento configurado en automático, por ejemplo:
Y luego puede adjuntar un controlador de desplazamiento, aquí tiene un método que encuentra cada tabla envuelta con
<div class="tableWrapper"></div>
:Y aquí hay un ejemplo de esto en acción (he usado bootstrap para hacerlo más bonito): violín
Para aquellos que también quieren admitir IE y Edge, aquí está el fragmento:
En IE y Edge, el desplazamiento es un poco lento ... pero funciona
Aquí hay una respuesta que me ayuda a descubrir esto: respuesta
fuente
He probado la mayoría de estas soluciones y finalmente encontré (IMO) la mejor solución moderna:
Rejillas CSS
Con las cuadrículas CSS, puede definir una 'cuadrícula', y finalmente puede crear una solución agradable, libre de javascript y de navegador cruzado para una tabla con un encabezado fijo y contenido desplazable. La altura del encabezado puede incluso ser dinámica.
CSS : Mostrar como cuadrícula y establecer el número de
template-rows
:HTML : crea un contenedor de cuadrícula y el número de definidos
rows
:Aquí está el ejemplo de trabajo:
CSS
HTML
fuente
Lo he intentado usando transformación: traducir . Si bien funciona bien en Firefox y Chrome, simplemente no hay función en IE11. No hay barras de desplazamiento doble. Soporta pie de mesa y pie de foto. Javascript puro, no jQuery.
http://jsfiddle.net/wbLqzrfb/42/
fuente
Encontré una solución sin jquery
HTML
CSS
Puedes verlo trabajando aquí: https://jsfiddle.net/lexsoul/fqbsty3h
Fuente: https://medium.com/@vembarrajan/html-css-tricks-scroll-able-table-body-tbody-d23182ae0fbc
fuente